“无法编辑的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() 

任何想法如何我可以解决这个问题?

这里的问题是, input()在Python 3.x中返回一个string,所以当你做比较的时候,你会比较一个string和一个整数,这个没有很好的定义(如果string是一个单词,怎么办一个比较一个string和一个数字?) – 在这种情况下,Python不会猜测,它会引发错误。

要解决这个问题,只需调用int()将string转换为整数:

 int(input(...)) 

请注意,如果要处理十进制数字,则需要使用float()decimal.Decimal() (取决于您的精度和速度需求)中的一个。

请注意,循环一系列数字(而不是一个while循环和计数)更pythonic的方式是使用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)) 

您需要将您的string转换为整数,以便在循环条件下进行比较。 在其他replace时间int(时间)。 最好在循环之前而不是循环内部进行replace,因为每次循环迭代时都会将string转换为整数。

只是一个侧面说明,在Python 2.0中,你可以比较任何东西(int到string)。 由于这不是明确的,因此在3.0版本中进行了更改,这是一件好事,因为您没有遇到将无意义的值与对方进行比较或者忘记转换types的麻烦。