0

我在让这个程序运行时遇到问题,现在大约是凌晨 2:00,所以我真的只想结束它。无论如何,我需要创建一个程序,在该程序中计算和显示几周内(由用户输入)的捐款总额和平均值。该程序使用嵌套循环来收集数据并计算平均值。

它的工作方式是:

  • 程序询问周数
  • 外循环每周迭代一次
  • 内循环每周迭代 5 次
  • 内部循环的每次迭代都要求用户提供一定数量的捐赠
  • 在所有迭代之后,显示捐赠的总和以及每周捐赠的平均值

在创建这个程序时,我遇到了三个主要问题。首先是我的循环嵌套没有按照我想要的方式工作。

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 周,我希望程序每周获得 5 次,所以 15 次。但它没有,而是只要求两次。

第二个问题是当用户输入 1 周或 0 周时,会出现错误,指出“NameError: name 'amount' is not defined”

最后一个问题是我在编码中实际上还没有涉及到的问题,如果用户每天输入不同的金额,我将如何计算一周的总数(week_total)。我只将金额声明为一个变量,而实际上一周中有 5 天有 5 个金额变量。

再说一次,我对 python 很陌生,我的指导指南真的没有涉及到这些细节。我一直在尝试重新安排和更改这个程序两个小时左右,但我仍然很困惑。希望这里的人可以分享他们的知识。非常感谢。

4

2 回答 2

2

首先,该break语句导致内部循环提前终止。

其次,您必须计算循环内的运行总数(或至少将值保留在某处)。amount目前,您会在每次迭代中不断覆盖。

最后,week_totalandcollection_total逻辑看起来很可疑。只需保持每日金额的运行总和,最后除以周数即可获得每周平均值。

于 2012-05-16T06:37:47.380 回答
0

一次一个地回答你的问题:

例如,如果用户输入 3 周,我希望程序每周获得 5 次,所以 15 次。但它没有,而是只要求两次。

如前所述,那是因为你的休息,只要摆脱它,它就会不止一次这样做。

第二个问题是当用户输入 1 周或 0 周时,会出现错误,指出“NameError: name 'amount' is not defined”

好吧,让我们用 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 以避免该问题。

此外,第二个 for 语句没有理由成为in range(0, donation_week*5),如果您希望它每周要求 5 个,那实际上是完全错误的。如果你想要,它应该只是in range(5)(如果没有明确设置开始,也假定为 0)所以它每周会执行 5 次循环。你有它的方式,第一周它会问 0 次,第二周会问 5 次,第三周会问 10 次,等等。

最后一个问题是我在编码中实际上还没有涉及到的问题,如果用户每天输入不同的金额,我将如何计算一周的总数(week_total)。我只将金额声明为一个变量,而实际上一周中有 5 天有 5 个金额变量。

If you make it so that amount is defined at the top of the program as 0, you can just add the input to amount each time you get it. It won't keep track of how much was donated on each day, but it works perfectly if you just want totals and averages.

So, if you initiate amount at the top of your program and also change the amount = input line to amount += input to keep track of the running total (Also likely get rid of week_total and collection_total, I don't see it having a use anymore) and fix the logic within your for loop like I mentioned, you should be golden.

于 2012-05-16T06:52:39.567 回答