#python
#python
Вопрос:
Мне пришлось использовать «try» и «except» для вычисления суммы чисел и учета недопустимого ввода. Когда пользователь вводит «готово», программа выводит результат. В чем он ошибается?
total = 0
count = 0
while True :
try :
x = (input('enter an input n'))
y = float(x)
print('your number is : ', y)
count = count 1
total = total x
except :
if x == 'done':
break
else :
print('invalid input')
print ('sum is' , total , 'and average is' , total/count)
Комментарии:
1. что происходит при выполнении этого кода?
2. Что произойдет, если вы запустите свой код? Сообщения об ошибках? Отредактируйте вопрос, чтобы показать его правильно отформатированным.
3. Подсказка «попробуйте запустить код» бесполезна, потому что они перехватывают сообщение об ошибке и не печатают его. 😉
4. Спасибо за редактирование кода, я новичок в stackoverflow, и в следующий раз я научусь правильно публиковать вопрос. Когда я запускаю код, он запрашивает число, а когда я ввожу целое число, он, по-видимому, выполняет как блоки try, так и except! Это кажется противоречивым. Это то, что произошло после ввода числа «10»: ваш номер: 10.0 неверный ввод введите ввод
5. Что делать, если вызов
input
завершится неудачно с первого раза?
Ответ №1:
Вы делаете:
x = (input('enter an input n'))
y = float(x)
print('your number is : ', y)
count = count 1
total = total x
т.е. Попытка добавить к total
тому, что было введено пользователем как str, вы должны добавить значение с плавающей запятой, т.е.:
x = (input('enter an input n'))
y = float(x)
print('your number is : ', y)
count = count 1
total = total y
Комментарии:
1. Большое вам спасибо, это решило проблему. Я чувствую себя глупо из-за этого простого пренебрежения.
Ответ №2:
Я предлагаю изменить ваш except
блок так, чтобы он отображал ошибку вместо «неверный ввод».:
except Exception as e:
if x == 'done':
break
else:
print(e)
Таким образом, он сообщит пользователю, что было не так с вводом — и если что-то еще пойдет не так в вашем коде, это будет легче выяснить!
Другой вариант — изменить ваш except
на только catch ValueError
s:
except ValueError as e:
if x == 'done':
break
else:
print(e)
Любая другая ошибка (скажем, a TypeError
) будет затем возникать как обычно.
Ответ №3:
Структура вашего кода неверна. Если попытка не удалась, значение x
не имеет значения. Вы должны проверить «готово» перед приведением с плавающей запятой. Я написал рабочую версию кода.
Код:
total = 0
count = 0
while True:
try:
x = input("enter an input n")
if x == "done":
break
y = float(x)
print("your number is : ", y)
count = 1 # Use the ' =' for incrementation.
total = y # You should add the float type to total.
except Exception:
print("invalid input")
print("sum is", total, "and average is", total / count)
Вывод:
>>> python3 test.py
enter an input
1
your number is : 1.0
enter an input
2
your number is : 2.0
enter an input
test
invalid input
enter an input
done
sum is 3.0 and average is 1.5