[英]Use “and” many times in loop in Python
我尝试使用and
在while
循环中使用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
在第一次出现False
时all
将返回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.