如何在循环时退出此操作?

时间:2015-12-07 08:13:10

标签: python loops while-loop

我在退出以下循环时遇到问题。这是一个简单的程序,如果随机值大于5,则打印"JPEG", ".jpg", 0xFF, /*0xD*/ 0xD8, 0xFF, 0xE0, null, null, 0x4A, 0x46, 0x49, 0x46, 0x00。程序运行良好一次但是当我尝试再次运行它时会进入无限循环。

"Graphics Interchange Format 87a", ".gif", 0x47, 0x49, 0x46, 0x38, 0x37, 0x6

6 个答案:

答案 0 :(得分:8)

你的while循环可能会将变量计数增加0,1,2或3.这可能会导致计数从低于20的值变为超过20的值。

例如,如果count的值为18,则会发生以下情况:

a > 5, count += 1
b > 5, count += 1
c > 5, count += 1

在这些操作之后,count的值将是18 + 3 = 21,而不是20.因此,条件值== 20将永远不会被满足。

要修复错误,您可以替换

if count == 20

if count >= 20

或只是在while循环中更改程序逻辑。

答案 1 :(得分:1)

由于您在一次迭代中将count增加2或3次,因此可能会跳过count == 20次检查

这是获得20行的一种方法。

from random import seed, randint

seed()
a = randint(0,10)
b = randint(0,10)
c = randint(0,10)
count = iter(range(20))

while True:
    try:
        if a > 5:
            next(count)
            print ("aHello")
        else: 
            a = randint(0,10)
        if b > 5: 
            next(count)
            print ("bHello")
        else:
           b = randint(0,10)
        if c > 5:
            next(count)
            print ("cHello")
        else:
            c = randint(0,10)
    except StopIteration:
        break

请注意,此代码中仍有很多重复。将a,b,c变量存储在list而不是单独的变量中将允许代码进一步简化

答案 2 :(得分:1)

"休息"如果变量abc的两个或多个值大于5,则条件可能会失败。在这种情况下,计数将递增多次并且计数将结束> 20,循环永远不会终止。你应该改变:

  if count == 20 :

  if count >= 20:

答案 3 :(得分:1)

在迭代结束时,由于多次递增,count可能会大于20。所以我会将最后一个if语句更新为:

if count >= 20:

感到安全。

答案 4 :(得分:1)

如果你的目标是在count>= 20时停止计算,那么你应该将这个条件用于你的while循环,而你根本不需要打破,因为你只会打破无论如何,在循环结束时。

新的while语句看起来像

while count < 20:
    # increment count

然后在while循环之外,如果你想再次使用它,可以将count重置为0

答案 5 :(得分:1)

以下代码是否有帮助?

while True:
    if a > 5 :
       print ("aHello")
       count = count + 1
       if count == 20 :
            break
    else : 
       a = randint(0,10)
    if b > 5 : 
       print ("bHello")
       count = count + 1
       if count == 20 :
            break
    else :
       b = randint(0,10)
   if c > 5 :
       print ("cHello")
       count = count + 1
       if count == 20 :
            break
  else :
       c = randint(0,10)

每次递增后都必须检查计数值。