web-dev-qa-db-ja.com

「順序付けできない型: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()

これを解決する方法はありますか?

17
user2074050

ここでの問題は、input()がPython 3.xで文字列を返すため、比較を行う際に文字列と整数を比較することになります。明確に定義されています(文字列がWordの場合、文字列と数字をどのように比較しますか?)-この場合Pythonは推測せず、エラーをスローします。

これを修正するには、単に int() を呼び出して文字列を整数に変換します。

_int(input(...))
_

注として、10進数を処理する場合は、 float() または decimal.Decimal() (精度と速度のニーズに応じて)。

whileループおよびカウントとは対照的に、一連の数値をループするより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))
_
35
Gareth Latty

Python 2.0では、何でも何でも(intからstring)と比較できます。これは明示的ではなかったので、3.0で変更されました。意味のない値を互いに比較したり、型を変換するのを忘れたときに問題が発生することはありません。

1
user1767754