我尝试在and
循环中使用while
,但似乎效果不佳。例如:
while (A1==0) and (A2==0) and (A3==0) and (A4==0):
有了这个,它似乎结束了第一个和第二个and
的循环,并不总是满足所有条件。这是and
循环使用while
的错误方法吗?
以下是代码:
import random
B1=0
B2=0
B3=0
B4=0
A = random.randrange(1,5)
while all([B1==0, B2==0, B3==0, B4==0]):
if A != B1:
B1 = A
print(B1)
A = random.randrange(1,5)
if (A!= B2) and (A!= B1):
B2 = A
print(B2)
A = random.randrange(1,5)
if (A!= B3) and (A!= B2) and (A!= B1):
B3=A
print(B3)
A = random.randrange(1,5)
if (A!= B4) and (A!= B3) and (A!= B2) and (A!= B1):
B4=A
print(B4)
我想以随机顺序打印1,2,3,4但它通常打印2或3个。
答案 0 :(得分:3)
尽管事情是短路的(and
在第一次假结果时停止评估),但使用all
写一个更简洁的方法:
while all([A1 == 0, A2 == 0, A3 == 0, A4 == 0]):
# Work here
虽然正在评估列表中生成的所有值(因此不会短路),但all
将在第一次出现错误时返回False
。
由于您已添加了您正在使用的代码,因此在第二次迭代中,您的表达式永远不会成为。 random.randrange(1, 5)
将only generate values between 1 and 5 exclusive。将起始值减少为0,这样就可以偶然生成0。
由于您已经明确了要执行的操作,因此您只需生成四个随机值,并检查它们是否与包含所需值的集合相匹配。
result = []
expected = {1, 2, 3, 4}
while set(result) != expected:
# Surely there's a better method to generate this...
result = [random.randint(1, 4), random.randint(1, 4),
random.randint(1, 4), random.randint(1, 4)]
print result