2012-05-16 78 views
0

我有一个问题,让这个程序工作,这是凌晨2点左右在这里,所以我真的只是想把它结束。无论如何,我需要创建一个程序,计算并显示几周内(由用户输入)的捐款总额和平均值。该程序使用嵌套循环来收集数据并计算平均值。修复范围嵌套循环

它的工作方式是:

  • 的程序要求每周的周数
  • 外环迭代,每周一次
  • 每次迭代
  • 内部循环迭代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:不定义名称‘量’”

的最后一个问题是我居然还没有触及但在编码中,如果用户每天输入不同的金额,我将如何计算一周的总金额(week_total)。我只是把金额当作一个变量来表示,一周中的5天有5个金额变量。

再说一遍,我对python非常陌生,我的教学指南确实没有涉及到这些细节。我一直在尝试重新安排和改变这个程序两个小时左右,现在我仍然很困难。希望这里有人能分享他们的知识。非常感谢。

+0

您不希望让用户逐一输入;如果他们犯了错误,他们会诅咒任何制作该计划的人。 =)你想阅读一个文本文件或其他东西。 – ninjagecko

回答

0

接听一次您的问题之一:

For example if the user inputs 3 weeks, I expect the program to get the amount 5 times per week, so 15 times. But it doesn't, and instead only asks for an amount twice.

如前所述,这是因为你的突破,刚刚摆脱的是,它会做它不止一次。

Second problem is when the user inputs 1 week or 0 weeks, an error occurs which states "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以避免该问题。

另外,没有理由为第二个陈述为in range(0, donation_week*5),实际上,如果您希望它每周要求5次,则完全错误。如果你需要的话,它应该是in range(5)(如果启动没有明确设置,则假设为0),因此每周会执行5次循环。你有它的方式,第一个星期就问0次,第二,它会问5,第三个10等

The final problem is something I actually haven't touched on yet in the coding, which is how I will calculate the week's total (week_total) if the user inputs different amounts each day. I only state amount as one variable when really, there are 5 amount variables for 5 days of the week.

如果你让这个量在程序的顶部定义作为0,您可以在每次获得输入时添加输入。它不会记录每天捐赠的捐款数额,但如果您只需要总计和平均值,它就能完美工作。

所以,如果你在你的程序的顶部开始量,改变它的amount = input线amount += input跟踪运行总的(也有可能摆脱week_total和collection_total,我没有看到有使用它不再),并像我提到的那样修复你的for循环中的逻辑,你应该是金。

+1

保持黄金Ponyboy。保持黄金。我完全忘记了+ =操作,并且它本身很容易跟踪数量。我非常感谢你的回答,因为我准备放弃它,因为它只是那些细细的细节,因为我通常非常注重保持细节和结构,而对于我的大部分问题,实际上都有简单的解决方案。无论如何,再次感谢,我喜欢这个网站,因为它通过反馈确实帮助我做了很多事情,但我需要学会不要像以前那样经常依赖这种简单的错误。再次感谢。 – Jertise

2

首先,break语句会导致内部循环提前终止。其次,你必须计算循环内部的运行总数(或至少将值保存在某处)。目前,您每次迭代都会覆盖amount

最后,week_totalcollection_total逻辑看起来怀疑。只需保持每日金额的运行总和,并最终将其除以周数以获得每周平均值。