在Python中循环使用“和”多次

时间:2015-05-29 15:00:46

标签: python while-loop

我尝试在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个。

1 个答案:

答案 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