"Unorderable types: int() <str()"
Я пытаюсь сделать калькулятор выхода на пенсию прямо сейчас на Python. Там нет ничего плохого в синтаксисе, но когда я запускаю следующую программу:
def main():
print("Let me Retire Financial Calculator")
deposit = input("Please input annual deposit in dollars: $")
rate = input ("Please input annual rate in percentage: %")
time = input("How many years until retirement?")
x = 0
value = 0
while (x < time):
x = x + 1
value = (value * rate) + deposit
print("The value of your account after" +str(time) + "years will be $" + str(value))
Это говорит мне, что:
Traceback (most recent call last):
File "/Users/myname/Documents/Let Me Retire.py", line 8, in <module>
while (x < time):
TypeError: unorderable types: int() < str()
Любые идеи, как я мог это решить?
Ответы
Ответ 1
Проблема в том, что input()
возвращает строку в Python 3.x, поэтому, когда вы выполняете сравнение, вы сравниваете строку и целое число, которое не определено (что, если строка - это слово, как сравнивать строку и число?) - в этом случае Python не догадывается, это вызывает ошибку.
Чтобы исправить это, просто вызовите int()
, чтобы преобразовать строку в целое число:
int(input(...))
В качестве примечания, если вы хотите иметь дело с десятичными числами, вы захотите использовать один из float()
или decimal.Decimal()
(в зависимости от вашей точности и скорости).
Обратите внимание, что чем больше питоновский способ петли над серией чисел (в отличие от цикла while
и подсчета), это использовать range()
. Например:
def main():
print("Let me Retire Financial Calculator")
deposit = float(input("Please input annual deposit in dollars: $"))
rate = int(input ("Please input annual rate in percentage: %")) / 100
time = int(input("How many years until retirement?"))
value = 0
for x in range(1, time+1):
value = (value * rate) + deposit
print("The value of your account after" + str(x) + "years will be $" + str(value))
Ответ 2
Вам нужно преобразовать свою строку в целое число, чтобы сравнить ее в рамках цикла. В другое время заменить int (время). Лучше заменить его перед циклом, а не внутри условия цикла, поскольку это приведет к тому, что строка будет преобразована в целое число при каждом итерации цикла.
Ответ 3
Просто обратите внимание, что в Python 2.0 вы можете сравнивать что-либо со всем (int to string). Поскольку это не было явным, это было изменено в версии 3.0, что хорошо, поскольку вы не сталкиваетесь с проблемой сравнения бессмысленных значений друг с другом или когда вы забываете преобразовать тип.