【问题标题】:iterate the range in for loop to satisfy the condition迭代for循环中的范围以满足条件
【发布时间】:2014-11-11 00:00:10
【问题描述】:

根据已回答的解决方案,我已经测试了循环。我想要从 6 到 10 的范围; 11 到 16 等等,直到满足条件,但循环继续从 1 到 5 运行。

set_mean = -10
#calculated_mean = None

energy = []
calculated_mean = float('inf')
while calculated_mean > set_mean:
        for i in range(1, 5):  
           energy.append(i-i*i)  
           print(energy)
           calculated_mean =  sum(energy[-2:])/2
           print(calculated_mean)

如果条件不满足,我如何使范围自动化,以便在第二个循环中切换到接下来的五个值,依此类推。对于此示例,如果循环从 6 运行到 10,它将满足。 谢谢!

【问题讨论】:

  • 缩进是正确的还是就在这里? for 循环后
  • 我想它就在这里。在我的系统上它正在工作。
  • 抱歉,您的问题不清楚
  • 我想在范围值上运行循环。在这种情况下;我的循环范围来自(1,5),这给了我 -9 计算的平均值。现在我想从 (6,10) 运行循环,依此类推,直到计算的平均值小于 set_mean。现在清楚了吗?
  • 当前你的代码运行到无限状态

标签: python python-2.7 python-3.x ipython


【解决方案1】:

我没有看到任何条件,这个循环将在您当前的版本中永远运行,因为 calculated_mean 将始终大于 set_mean,因为您正在制作 energy 每次您通过循环时列表都会变大,我真的不明白您的“条件”是什么,但如果它只是列表中最后两个数字的平均值,它永远不会大于你的 set_mean 这将导致一个无限循环。

【讨论】:

  • 我做了一个任意的例子来测试。如果范围切换到 6-10,则满足此条件。这就是我想知道的程序如何从 6 到 10 第二次运行循环。
【解决方案2】:

假设您只是要求使用以下动态方式:

set_mean = -10
#calculated_mean = None

energy = []
calculated_mean = float('inf')
x = 1
while calculated_mean > set_mean:
    for i in range(x, x+4):  # you can change step size here by passing it as last argument
        energy.append(i-i*i)  
        print(energy)
        calculated_mean =  sum(energy[-2:])/2
        print(calculated_mean)
    x = x + 1

输出为:

[0]
0
[0, -2]
-1
[0, -2, -6]
-4
[0, -2, -6, -12]
-9
[0, -2, -6, -12, -2]
-7
[0, -2, -6, -12, -2, -6]
-4
[0, -2, -6, -12, -2, -6, -12]
-9
[0, -2, -6, -12, -2, -6, -12, -20]
-16

我认为这正是您想要的。因为当你得到 -16

时循环停止

【讨论】:

  • 这是对的。但我可以控制步长吗?像这样在一步之后检查条件。我想在检查条件之前为下一个完整循环运行程序。这次真是万分感谢。我会试试这个。
  • 也许x = x + 5 会更好。添加 1 将是连续范围将是 1-5, 2-6, ... 而 OP 要求步长为 5(而不是 1)。
  • @Dunes 是的。但他后来改变了他的问题:-)
猜你喜欢
  • 2020-06-16
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2014-12-03
相关资源
最近更新 更多