#python #python-3.x
Вопрос:
Я споткнулся на одном упражнении из книги Python для всех, не могли бы вы мне помочь, пожалуйста?
Упражнение 3. Напишите программу, которая будет запрашивать у пользователя количество часов и тариф в час для расчета валовой оплаты.
Ввод Часов: 35
Входная ставка: 2,75
Оплата: 96,25
я написал этот фрагмент кода
#compute gross pay
prompt = 'Enter hoursn'
hours = input(prompt)
int(hours)
prompt = 'Enter raten'
rate = input(prompt)
int(rate)
pay = hours * rate
print(pay)
и я получил сообщение об ошибке
Traceback (most recent call last):
File "ex2_pay", line 8, in <module>
pay = hours * rate
TypeError: can't multiply sequence by non-int of type 'str'
но я не могу понять, почему. Я действительно преобразовал возвращаемое значение в int
Комментарии:
1.
int(hours)
не обновляет значениеinput
. Сохранитеint(hours)
в переменной или вместо этого используйтеint(input("text"))
Ответ №1:
int(hours)
и int(rate)
на самом деле ничего не делай. Вы приводите эти значения к целочисленным типам, но в конечном счете ничего не делаете с результатом. То, что вы, вероятно, намеревались сделать, это вернуть им их исходные переменные:
#compute gross pay
prompt = 'Enter hoursn'
hours = input(prompt)
hours = int(hours)
prompt = 'Enter raten'
rate = input(prompt)
rate = int(rate)
pay = hours * rate
print(pay)
Однако вам следует подумать о том, чтобы сделать свой код немного более лаконичным, терпимым к вводу и более легким для чтения, объединив несколько строк и приведя входные данные к float
s (для обработки десятичных знаков в дополнение к целым числам).:
#compute gross pay
hours = float(input('Enter hoursn'))
rate = float(input('Enter raten'))
print(hours * rate)
Комментарии:
1.
int("2.75")
не получится, потому что он не может перевести его в целое число. Я думаюfloat
, что это действительно решило бы проблему ОП.2. @HampusLarsson Отличный момент — я добавил это в свою вторичную «оптимизированную» версию примера операции.
3. Это не оптимизация;
int
в первую очередь, это никогда не было правильным типом для определения скорости. (Хотя, когда речь идет о деньгах,float
это тоже не тот тип, который следует использовать из-за проблем с точностью.decimal.Decimal
было бы более уместно.)
Ответ №2:
hours = input('Enter hoursn')
hours = int(hours)
rate = input('Enter raten')
rate = int(rate)
pay = hours * rate
print(pay)
Вы можете упростить свой код и исправить int()