0

このプログラムを動作させるのに問題があり、ここでは午前 2 時頃なので、本当に終わらせたいと思っています。とにかく、数週間にわたる寄付の総額と平均 (ユーザーが入力) を計算して表示するプログラムを作成する必要があります。このプログラムは、ネストされたループを使用してデータを収集し、平均を計算します。

仕組みは次のとおりです。

  • プログラムは週数を要求します
  • 外側のループは毎週 1 回繰り返されます
  • 内側のループは 1 週間に 5 回繰り返されます
  • 内側のループの各反復は、ユーザーに寄付額を要求します
  • すべての反復の後、寄付の合計と各週の寄付の平均が表示されます

このプログラムを作成する上で私が抱えている主な問題は 3 つあります。1 つ目は、ループのネストが思いどおりに機能していないことです。

weeks = input("How many weeks available for collection? ")

for donation_week in range(0, weeks):
    for donation_day in range(0, donation_week*5):
        amount = input("How much money was donated today? ")
        break

week_total = amount * 5
collection_total = week_total * weeks
average = collection_total / weeks

print "In", weeks, "weeks, a sum of", collection_total, "was collected and an average"\
                   " of", average, "was donated each week"

たとえば、ユーザーが 3 週間と入力した場合、プログラムは 1 週間に 5 回、つまり 15 回、金額を取得すると予想します。しかし、そうではなく、金額を 2 回要求するだけです。

2 番目の問題は、ユーザーが 1 週間または 0 週間を入力すると、「NameError: name 'amount' is not defined」というエラーが発生することです。

最後の問題は、コーディングでまだ触れていないことです。これは、ユーザーが毎日異なる金額を入力した場合に、1 週間の合計 (week_total) を計算する方法です。実際には、週 5 日間に 5 つの金額変数がある場合にのみ、金額を 1 つの変数として述べます。

繰り返しますが、私はPythonに非常に慣れていないため、私の説明ガイドはこれらのような詳細には触れていません. このプログラムを 2 時間ほど並べ替えたり変更したりしてきましたが、まだかなり行き詰っています。ここで誰かが知識を共有できることを願っています。どうもありがとう。

4

2 に答える 2

2

まず、このbreakステートメントにより、内側のループが早期に終了します。

次に、ループ内で実行中の合計を計算する必要があります (または、少なくとも値をどこかに保持します)。amount現在、繰り返しごとに上書きを続けています。

最後に、week_totalandcollection_totalロジックが怪しいようです。1 日の金額の現在の合計を維持し、最終的にそれを週数で割って、1 週間の平均を取得します。

于 2012-05-16T06:37:47.380 に答える
0

一度に1つずつ質問に答えます。

たとえば、ユーザーが3週間入力した場合、プログラムは1週間に5回、つまり15回取得することを期待しています。しかし、そうではなく、代わりに2回だけ金額を要求します。

述べたように、それはあなたの休憩のせいです、ただそれを取り除くだけで、それはそれを複数回行います。

2番目の問題は、ユーザーが1週間または0週間を入力すると、「NameError:name'amount'isnotdefined」というエラーが発生することです。

さて、1週間でそれをたどってみましょう:

for donation_week in range(0,1): #range(0,1) == [0]
    for donation_day in range(0, 0*5): #during the first (and only) loop, donation_day is 0, so do no loops

したがって、ループを通過すると、設定する行amountは実行されないため、金額は定義されません。この問題を回避するために、プログラムの上部で0として定義してみてください。

また、ステートメントの2番目がである理由はありませんin range(0, donation_week*5)。実際、毎週5を要求する場合、これは完全に間違っています。それが必要in range(5)な場合は、(開始が明示的に設定されていない場合は0も想定されます)、毎週5回ループを実行する必要があります。あなたがそれを持っている方法では、最初の週は0回、2番目は5回、3番目は10回というように尋ねます。

最後の問題は、コーディングでまだ実際には触れていないことです。これは、ユーザーが毎日異なる金額を入力した場合に、週の合計(week_total)を計算する方法です。実際には、週の5日間に5つの金額変数がある場合にのみ、金額を1つの変数として記述します。

プログラムの上部で金額が0として定義されるようにすると、取得するたびに金額に入力を追加できます。毎日の寄付額は追跡されませんが、合計と平均が必要な場合は完全に機能します。

したがって、プログラムの先頭で金額を開始し、amount = input行を変更しamount += inputて現在の合計を追跡する場合(おそらく、week_totalとcollection_totalを削除しますが、もう使用されていないようです)、ロジックを修正します私が述べたようにあなたのforループ内では、あなたは金色でなければなりません。

于 2012-05-16T06:52:39.567 に答える