Это домашнее задание от udemy, мое решение не работает, вот вопрос:

Напишите функцию, которая запрашивает целое число и печатает его квадрат. Используйте цикл while с блоком try, except, else, чтобы учесть неправильный ввод. вот мое решение:

def ask():
    while True:
        try:
            user_input = int(input('give me int energe:'))
            squ = user_input**2
            print('boom! show you my power:'+squ)
        except:
            print('lack of int energe')
            continue
        else:
            print('Gotcha')
            break
        finally:
            print('boooooom')
        
    pass

Если я ввожу str, исключение работает хорошо, но даже я ввожу int, также показывает тот же результат, что и str, почему это происходит ?? мой снимок экрана с ошибкой

Вот правильное решение:

def ask():
    
    while True:
        try:
            n = int(input('Input an integer: '))
        except:
            print('An error occurred! Please try again!')
            continue
        else:
            break
            
        
    print('Thank you, your number squared is: ',n**2)

Я не уверен, почему моя попытка не удалась

0
tRsoooo 4 Окт 2020 в 07:35

2 ответа

Лучший ответ

Ваш оператор print вызывает исключение. Вы не можете добавить строку и int, используя +. Либо используйте

print('boom! show you my power:' + str(squ))

Или

print('boom! show you my power:', squ)

В общем, нетипизированные операторы except - действительно плохая идея. Если бы вы вместо этого написали except ValueError:, улавливая только ошибку, возникшую при попытке преобразовать строку в int с помощью функции int(), вы бы сразу увидели проблему.

1
Frank Yellin 4 Окт 2020 в 04:41

В вашем коде ошибка заключается в следующем:

print('boom! show you my power:'+squ)

squ - это тип int, и вы используете оператор +, где левая сторона имеет строку, а правая - int. Либо измените int на строку, либо используйте символ ,. Любой из них будет работать:

print('boom! show you my power:', squ)

print('boom! show you my power:' + str(squ))
0
fcdt 4 Окт 2020 в 11:14