Python &引用;无序类型:int()<;str();

Python &引用;无序类型:int()<;str();,python,calculator,Python,Calculator,我现在正试图在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("H

我现在正试图在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))
def main():
打印(“让我退休财务计算器”)
存款=输入(“请以美元输入年度存款:$”)
费率=输入(“请以百分比形式输入年费率:%”)
时间=输入(“离退休还有多少年?”)
x=0
值=0
而(x<时间):
x=x+1
价值=(价值*利率)+存款
打印(“您的帐户在“+str(时间)+”年后的价值将为$”+str(价值))
它告诉我:

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()
回溯(最近一次呼叫最后一次):
文件“/Users/myname/Documents/Let Me Retire.py”,第8行,在
而(x<时间):
TypeError:无序类型:int()

有什么办法可以解决这个问题吗?

这里的问题是,
input()
在Python 3.x中返回一个字符串,所以当您进行比较时,您是在比较一个字符串和一个整数,而这个整数没有很好的定义(如果字符串是一个单词,那么如何比较字符串和数字呢?)-在这种情况下,Python不会猜测,它抛出了一个错误

要解决此问题,只需调用将字符串转换为整数:

int(input(...))
请注意,如果您想处理十进制数,您将需要使用或之一(取决于您的精度和速度需要)

请注意,在一系列数字上循环的更具Python风格的方法(与
循环和计数时的
相反)是使用
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))

这里的问题是,
input()
在Python3.x中返回一个字符串,因此当您进行比较时,您正在比较一个字符串和一个整数,这是一个没有很好定义的整数(如果字符串是一个单词,如何比较字符串和数字呢?)——在这种情况下,Python不会猜测,它会抛出一个错误

要解决此问题,只需调用将字符串转换为整数:

int(input(...))
请注意,如果您想处理十进制数,您将需要使用或之一(取决于您的精度和速度需要)

请注意,在一系列数字上循环的更具Python风格的方法(与
循环和计数时的
相反)是使用
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))

顺便说一下,在Python2.0中,您可以将任何内容与任何内容(int到string)进行比较。由于这不是显式的,所以在3.0中对其进行了更改,这是一件好事,因为您不会遇到相互比较无意义值的麻烦,也不会忘记转换类型

在Python2.0中,您可以将任何内容与任何内容进行比较(int与string)。由于这不是显式的,所以在3.0中对其进行了更改,这是一件好事,因为您不会遇到相互比较无意义值的麻烦,也不会忘记转换类型

好吧,我都弄明白了。非常感谢你的时间和努力。我真的很感激。非常感谢您,先生。还有最后一个问题需要解决,那就是年率会随着时间的推移而降低。例如,如果我在10年内以50%的比率输入500美元,一年后它会给我550美元,555.0、555.55、555.5555,等等……因为它实际上每年不会做50%。@user2074050这只是一个数学错误。您正在向存款中添加,而不是当前值。你想要
值*=(1+费率)
(将去年的值乘以费率加1)。好的,我把它都算出来了。非常感谢你的时间和努力。我真的很感激。非常感谢您,先生。还有最后一个问题需要解决,那就是年率会随着时间的推移而降低。例如,如果我在10年内以50%的比率输入500美元,一年后它会给我550美元,555.0、555.55、555.5555,等等……因为它实际上每年不会做50%。@user2074050这只是一个数学错误。您正在向存款中添加,而不是当前值。您需要
值*=(1+费率)
(将去年的值乘以费率加1)。