現在、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で文字列を返すため、比較を行う際に文字列と整数を比較することになります。明確に定義されています(文字列が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))
_
Python 2.0では、何でも何でも(intからstring)と比較できます。これは明示的ではなかったので、3.0で変更されました。意味のない値を互いに比較したり、型を変換するのを忘れたときに問題が発生することはありません。