我在退出以下循环时遇到问题。这是一个简单的程序,如果随机值大于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
答案 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)
"休息"如果变量a
,b
和c
的两个或多个值大于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)
每次递增后都必须检查计数值。