Запросите пользователя

#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)
 

Repl.it

Однако вам следует подумать о том, чтобы сделать свой код немного более лаконичным, терпимым к вводу и более легким для чтения, объединив несколько строк и приведя входные данные к float s (для обработки десятичных знаков в дополнение к целым числам).:

 #compute gross pay
hours = float(input('Enter hoursn'))
rate = float(input('Enter raten'))
print(hours * rate)
 

Repl.it

Комментарии:

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()