0

インターネットで見つけたこの複利問題を試しています。

A=P(1+r) n ここで、P は投資額、r は年率 (10 進数で 5.0%=0.050)、n は投資年数です。

投資、レート、条件を表す 3 つのリスト

investment = [10000.00, 10000.00, 10000.00, 10000.00, 1.00]
rate = [5.0, 5.0, 10.0, 10.0, 50.00] 
term = [20, 40, 20, 40, 40]

私はこのようにプログラムを作成しましたが、私が行ったようにすべてを書き出す代わりに、ループと呼ばれるものを使用できると感じていますが、for ループを適切に使用する方法がわかりません。

rateindecimal = [int(rate[0])/100.0, int(rate[1])/100.0, int(rate[2])/100.0), int(rate[3])/100.0, int(rate[4])/100.0]

パーセント レートを 10 進数に変換しましたが、代わりにループを使用してレート リストを実行し、簡単に変換するにはどうすればよいですか?

それから私はこれをしました。繰り返しが多すぎるように感じます。繰り返しますが、ループが必要だと感じていますが、ループを使用するのはあまり得意ではありません...

A1 = int(Investment[0]) * (1 + ratedecimal[0])**int(term[0])
A2 = int(Investment[1]) * (1 + ratedecimal[1])**int*term[1])

等...

print "$" + str(round(A1, 2))
print "$" + str(round(A2, 2))

なども一緒です。

これが本当に長い場合は申し訳ありません。すべてをループする方法を知りたいだけなので、それほど繰り返しする必要はありません。

ありがとう!

4

5 に答える 5

5

zip()それらを一緒に圧縮し.format()てから出力するために使用します。

for investment, rate, term in zip(investments, rates, terms):
    A = investment * (1 - rate / 100) ** term

    print '${0:.02f}'.format(A)
于 2013-02-25T05:56:26.087 に答える
0

Python でループする最も簡単な方法の 1 つである、次の基本的なアプローチを試してみませんか。

A = list()
# The following will execute the body of the loop for all numbers from 0 to the number
# of items in investment - 1. So in your case i = 0 to 4
for i in range(len(investment)):
   rateindecimal = int(rate[i])/100
   A.append(int(investment[i]) * (1 + ratedecimal)**int(term[i]))
   print "$", str(round(A,2))

ただし、int() を頻繁に使用するため、丸める浮動小数点数がないと思うので、丸めについてはわかりません...代わりに float() を試してみてください。

Python の for ループの詳細については、このリンクを参照してください。

于 2013-02-25T06:00:04.403 に答える
0

このような基本的な問題については、コードを単純にするのが最善だと思います。シンプルなコードは読みやすく、理解しやすく、書きやすいです。

ネストされた 3 つのforループを使用するソリューションを次に示します。

lst_investment_amt = [10000.00, 10000.00, 10000.00, 10000.00, 1.00]
lst_rate = [5.0, 5.0, 10.0, 10.0, 50.00]
lst_term = [20, 40, 20, 40, 40]


for amt in lst_investment_amt:
    for rate in lst_rate:
        for term in lst_term:
            r = 1.0 + (rate / 100.0)
            final = amt * r**term
            print("amt: $%6d\trate: %2.1f\tterm: %2d\tfinal: %15.2f" %
                (int(amt), rate, term, final))
    print('') # insert blank line to set off previous amount from next one

ネストされた実際のループが 3 つあるため、print('')各金額を次の各金額から分離するために空白行を出力するステートメントを追加できたことに注意してください。

Python には、リスト内包表記、ジェネレーター式、zip(). しかし、この単純な問題については、上記のコードが正しいと思います。

%ここでフォーマットコードをどのように使用したかに注意してください。このようなコードを実行すると、%6.2f「合計値が 6 文字の長さになり、小数点以下が 2 桁になる float 値を出力する」ことを意味します。小数点は 1 文字としてカウントされるため123.45、小数点以下 3 桁、小数点以下 2 桁の の形式の数値になります。数字が大きすぎる場合 (例: 100000.55) は 6 文字の制限を超えることができますが、数字が小さすぎる場合 (例: 1.0) はスペースで埋められます。

\tまた、印刷出力にタブ文字を入れて、値を区切り、物事を縦に並べるために を使用していることにも注意してください。

ネストされたループを含むこのようなコードと、フォーマット コードを含む print ステートメントは、Python だけでなく、C 言語、C++、およびその他のさまざまな言語で使用できます。

于 2013-02-25T07:32:08.707 に答える
0
  Alist = [int(Investment[i]) * (1 + ratedecimal[i])*int(term[i]) for i in range(0,len(investment)]

これにより、意図したA1、A2、A3などを含むリストが表示されます

于 2013-02-25T05:55:00.023 に答える
0

ここに、私が思うに必要なことを行ういくつかのループがあります。

investment = [10000.00, 10000.00, 10000.00, 10000.00, 1.00]
rate = [5.0, 5.0, 10.0, 10.0, 50.00] 
term = [20, 40, 20, 40, 40]

# this is how I would use a loop in your first problem
rateindecimal = list()
for i in range(0, len(rate)):
    rateindecimal.append(int(rate[i])/100.0)

# this is how i'd solve your second problem
a = list()
for i in range(0, len(investment)):
    a.append(int(investment[i]) * (1 + rateindecimal[i])**int(term[i]))

# then a loop for the printing
for result in a:
    # print "${0}".format(str(round(result, 2)))
    print '$%.3f' % round(result, 2)
于 2013-02-25T06:04:47.370 に答える