Проблема в том, что вы пытаетесь сделать два преобразования одновременно, и одно из них неявно .
Следующее будет работать, потому что есть очевидный способ преобразованиячисло '87' до целого числа 87.
>>> int('87')
87
И по той же причине будет работать и следующее:
>>> float('87')
87.0
>>> float('87.94')
87.94
>>> int(87.94)
87
Имейте в виду то, что было сказано, и посмотрите на разницумежду:
>>> int(float('87.94'))
87
и
>>> int('87.94')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '87.94'
Как вы видите, проблема заключается в том, что вы подразумеваете преобразование float()
до перехода к int()
, но как мог догадаться компилятортот?Существует множество доступных рабочих преобразований для строки '87 .94 '.Должен ли компилятор перепробовать их все, прежде чем выяснить, какой onw будет работать с int
?А что если есть два или более, которые вернут что-то, что будет работать с целым числом?
Примеры:
>>> int(hash('87.94'))
4165905645189346193
>>> int(id('87.94'))
22325264
>>> int(max('87.94'))
9
>>> int(input('87.94'))
87.94111
111
Должен ли компилятор выбрать float()
для вас?
Я так не думаю: Явное лучше, чем неявное .
В любом случае, если вы собираетесь использовать это число для умножения на число с плавающей запятой 0.6
.Вы можете напрямую преобразовать его в float()
.
Изменить эту строку:
price = int(input())
с помощью:
price = float(input())
И все будетбудьте в порядке.
Кроме того, операция, которую вы представляете в вашем примере, является умножением , а не делением .На случай, если вас это заинтересует, есть разделение по этажам //
, которое вернет целое число с плавающей запятой.Посмотрите на PEP238 для получения дополнительной информации об этом.