我有这个代码:
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中返回一个字符串,所以当您进行比较时,您正在比较一个字符串和一个未定义好的整数(如果字符串是一个单词,如何比较字符串和数字?)-在这种情况下,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))
顺便说一句,在Python 2.0中,您可以将任何东西与任何东西进行比较(int到string)。由于这不是明确的,它在3.0中进行了更改,这是一件好事,因为您不会遇到相互比较无意义值的麻烦,也不会忘记转换类型。