循环迭代时的python

时间:2014-10-09 21:52:42

标签: python while-loop

我想运行一个while循环,其中两个条件值将在循环中生成。任何人都可以建议我如何制作它?如果我用一个已知的(比如calculated_std = 5)值运行它,那么它可以正常工作。感谢

test_energy = []
calculated_std = float('inf')
absolute_avg = float('inf')
x = 1
while absolute_avg > calculated_std:
 for i in range(x,x+10):
    energy = system.energy().value()
    print(energy)
    test_energy.append(energy)
    std = AverageAndStddev()
    A = sum(test_energy[-10:-5])/5
    B = sum(test_energy[-5:])/5
    absolute_avg = abs(A - B)
    std.accumulate(A)
    std.accumulate(B)
    avg = std.average()
    calculated_std = std.standardError()
    x = x+1

1 个答案:

答案 0 :(得分:0)

您的while循环永远不会执行,因为

while absolute_avg > calculated_std:
    ...

永远不会满足。事实上absolute_avg == calculated_std.

似乎没有理由不能将absolute_avgcalculated_std实例化为值,以便它们在while循环的第一次传递时成功。

说:

calculated_std = 0.0
absolute_avg = 1.0

也许是一个更清洁的解决方案,你可以实现一个do-while-esque循环,以确保循环至少运行一次,如下所示:

test_energy = []
calculated_std = float('inf')
absolute_avg = float('inf')
x = 1
while True:
 for i in range(x,x+10):
    energy = system.energy().value()
    print(energy)
    test_energy.append(energy)
    std = AverageAndStddev()
    A = sum(test_energy[-10:-5])/5
    B = sum(test_energy[-5:])/5
    absolute_avg = abs(A - B)
    std.accumulate(A)
    std.accumulate(B)
    avg = std.average()
    calculated_std = std.standardError()
    x = x+1
  if absolute_avg > calculated_std:
    break