Подтвердить что ты не робот

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

Любые идеи, как я мог это решить?

4b9b3361

Ответ 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, что хорошо, поскольку вы не сталкиваетесь с проблемой сравнения бессмысленных значений друг с другом или когда вы забываете преобразовать тип.