Python &引用;无序类型:int()<;str();
我现在正试图在Python上制作一个退休计算器。语法没有问题,但当我运行以下程序时: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
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)。