Логический недостаток / недостатки в моем базовом коде Python для вычисления суммы чисел?

#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