【问题标题】:Fixing in-range nested loops修复范围内的嵌套循环
【发布时间】:2012-05-16 06:35:14
【问题描述】:

我在让这个程序运行时遇到问题,现在大约是凌晨 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 很陌生,我的指导指南并没有涉及这些细节。我一直在尝试重新安排和更改这个程序两个小时左右,但我仍然很困惑。希望这里的人可以分享他们的知识。非常感谢。

【问题讨论】:

  • 你不想让用户一一输入;如果他们犯了错误,他们将诅咒制作程序的人。 =) 你想读一个文本文件什么的。

标签: python variables loops range nested


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    一次回答一个问题:

    例如,如果用户输入 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 个数量变量。

    如果您将金额在程序顶部定义为 0,则您可以在每次获得金额时将输入添加到金额中。它不会记录每天捐赠了多少,但如果您只需要总数和平均值,它就可以完美运行。

    因此,如果您在程序顶部启动金额并将 amount = input 行更改为 amount += input 以跟踪运行总计(也可能摆脱 week_total 和 collection_total,我看不到它不再使用了)并像我提到的那样修复你的 for 循环中的逻辑,你应该是金子。

    【讨论】:

    • 留金小马。保持黄金。我完全忘记了 += 操作,它自己很容易跟踪金额。我非常感谢您的回答,因为我已经准备好放弃了,因为它只是那些让我无法理解的小细节,因为我通常非常专注于保持它的详细和结构化,而实际上我的大多数问题都有简单的解决方案。无论如何,再次感谢,我喜欢这个网站,因为它实际上通过反馈帮助了我很多,但我需要学会不要像我已经为这些简单的错误所做的那样经常依赖它。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多