2013-02-15 9 views
13

そこの構文では何の問題もないのですが、私は次のプログラムを実行する場合:私はこれを解決する可能性がどのように任意のアイデア"私は現在、Pythonで退職金計算機を作ろうとしています。int型(int型)<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() 

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

をそれはと言われますか?

答えて

31

ここでの問題は、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)) 
+1

大丈夫私はそれをすべて考え出しました。あなたの時間と労力にとても感謝しています。私は本当にそれを感謝します。ご親切にありがとうございました。解決すべき最後の問題があります。これは、年率が時間とともに減少するということです。たとえば、50%のレートで10年間で500ドルを入力すると、1年後には550ドル、555.0,555.55,555.5555などとなります。実際には毎年50%はしません。 – user2074050

+1

@ user2074050これは数学のエラーです。現在の値ではなく、デポジットに追加しています。あなたは 'value * =(1 + rate)'(昨年の値にその金額に1を加えた値)を掛けたいとします。 –

0

ループ状態で比較するには、文字列を整数に変換する必要があります。他の時はint(時間)で置き換えます。ループが繰り返されるたびに文字列が整数に変換されるため、ループの前ではなくループの前に置き換える方が良いです。

0

Python 2.0では何かを比較できました(intからstringへ)。これは明示的ではないので、3.0で変更されました。これは、無意味な値をお互いに比較することや、型の変換を忘れた場合にはうまくいかないため、良いことです。

関連する問題