繁体   English   中英

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

[英]Use “and” many times in loop in Python

我尝试使用andwhile循环中使用and但似乎无法正常工作。 例如:

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。

尽管存在某些短路( and在第一个虚假结果停止评估)的事实,但是有一种更简洁的方法可以使用all编写此代码:

while all([A1 == 0, A2 == 0, A3 == 0, A4 == 0]):
    # Work here

在评估列表内部生成的所有值时(因此不会造成短路), all在第一次出现Falseall将返回False


由于您已经添加了正在使用的代码,因此表达式在第二次迭代中将永远不成立 random.randrange(1, 5)只生成1到5 random.randrange(1, 5) 之间的值 将起始值减小为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM