2016-08-15 5 views
0

Я никогда раньше не кодировал и не начинал с Python-3.5 несколько дней назад. После некоторого упражнения я пытаюсь поиграть сам. В прошлый раз я хотел создать скрипт, который хранит ввод как переменную и округляет его до трех десятичных знаков. К сожалению, я получаю ошибку, когда я пытаюсь сделать это:Ошибка при использовании round() для переменной

round (spam, 3) 
TypeError: type str doesn't define __round__ method" 

Я попытался посмотреть на этот вопрос в Q & А, но вы, ребята, кажется, есть более сложные проблемы, связанные с этим сообщ ошибки.

Так это то, что я вошел в редактор файлов, когда я получил сообщ об ошибке:

print('Pls enter value') 
spam = input() 
#print(spam) 
round(spam, 3) 

, когда я введите в интерактивной оболочке округление, кажется, работает, хотя:

>>> spam = 3.666666 
>>> round (spam, 3) 
3.667 

Итак, почему же одна и та же логика работает в оболочке, но не в редакторе файлов? Заранее спасибо!

ответ

2

Разница заключается в том, что во втором случае вы поставляете значение spam с помощью терки буквального (то есть, spam = 3.666666) в то время как в первом случае вы получите его от вызова input() что не совсем то же самое.

Функция input() возвращает str экземпляр в Python 3, а для str типов, функция round не имеет особого смысла; вам нужно явно преобразовать его к поплавку, обернув результат input() с float():

spam = float(input()) # change input to 'float' type 

Теперь вы можете вызвать round на нем. Вам нужно, чтобы быть осторожным, чтобы вход, который вы действительно поставляете, действительно трансформируется в float, иначе будет поднят ValueError.

В дополнение к этому, нет необходимости добавлять print вызов до input, input имеет prompt аргумент, который позволяет указать текст перед отправкой ввода:

spam = input("Enter valid float number: ") 

Теперь вы должны получить аналогичные результаты для обоих случаев ,

+1

Большое спасибо Джим! Теперь все ясно! У меня был только вызов печати перед входом, потому что я хотел посмотреть, действительно ли введенное значение было присвоено переменной. Так что это было только для проверки цели ... –

Смежные вопросы