Ошибка типа предотвращает вычитание

#python #string #integer #operands

#python #строка #целое число #операнды

Вопрос:

Добрый день всем, я новичок в StackOverflow и Python в целом. Я прохожу университетский курс, и я довольно озадачен тем, как определить ошибку операнда, которую я получаю из очень простой программы вычисления и возврата:

 currentYear = 2020
age = input("How old were you in 2020, in numbers? ")

birthYear = currentYear - age

print("Your birth year was: "   str(birthYear))
  

Возвращаемая ошибка является ошибкой типа: неподдерживаемые типы операндов для -: ‘int’ и ‘str’

Я попытался удалить конкатенацию в печати, преобразование в строку, и я попытался поместить вычисление переменных «currentYear» и «age» в виде строк. Я также попытался принудительно ввести целое число в переменную «age», вставив формат int(input()). Я уверен, что это очень простая проблема, которую я упускаю из виду, но я в своем уме!

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

1. На ваш запрос уже дан ответ, но у этой программы также есть проблема с вычислением времени — это будет один год в зависимости от того, был ли у пользователя день рождения.

2. Спасибо за ответ. Чтобы исправить это, должен ли я установить значение «age» в качестве входных данных минус один? Или я должен расширить область вопроса, чтобы включить месяц в диапазоне от 1 до 12?

3. Теперь вы задаете правильные вопросы… Корректно обращаться со временем сложно.

Ответ №1:

Добро пожаловать! Ваша проблема здесь в том, что age это строка, потому input что выводит любую строку, которую дает пользователь. К счастью, вы можете явно преобразовать его в целое число, например:

 age = input("How old were you in 2020, in numbers? ")

birthYear = currentYear - int(age)

print("Your birth year was: "   str(birthYear))
  

Примечание: это полностью игнорирует случай, когда ваш пользователь допускает ошибку, и вводимое значение не является числом. Например, если они вводят «восемь» или что-то в этом роде. Однако это совсем другая проблема!

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

1. Большое спасибо за ваш ответ! Я потерял первую строку кода, надеюсь, это ничего не изменит в ответе. Я понимаю проблему, из-за которой пользователь может не вводить правильное значение — я могу предотвратить это, используя формат int(input(«») и указав пользователю, что им нужно использовать целые числа, верно?

2. это правильно, да! Пропущенная строка в порядке. Это было целое число, которое я предполагал, так что, надеюсь, это сработает для вас

3. Ваше изменение действительно сработало! Я также задал вопрос моему преподавателю модуля, как только смог с ними связаться, и они сказали, что либо ваше решение, либо решение int(input(«») будет одинаково действительным. Еще раз спасибо за вашу помощь.