[英]While-loop with break under a condition in Python
我在 Python 中有一个 while-break-loop,它必须搜索带有字母 [('H', 'Y')] 的对。 一旦在 frozensets(第一个元素)中找到字母 H(混合“Y”和“N”)并在第二个元素中找到“Y”,它应该立即停止,并打印“No”。
def dt(z):
Y = all(letter=='Y' for number,letter in z)
N = all(letter=='N' for number,letter in z)
H = (not Y) and (not N)
return 'Y' if Y else ('N' if N else 'H')
conj=[{(frozenset({(9,'N'), (3,'Y')}), 3,'Y'), (frozenset({(9,'Y'), (3,'N')}), 3,'Y')}, {(frozenset({(9,'Y'), (2,'Y')}), 3,'Y')}]
flag = 'Yes'
while flag == 'Yes':
for i in conj:
i = list(i)
for j in i:
s0 = list(j[0])
t0 = list(j[-1])
u0 = list(t0[-1])
v0 = dt(s0)
diag = list(zip(v0,u0))
print(diag)
if diag == [('H','Y')]:
flag = 'No'
break
break
print(flag)
虽然它正确地推断出标志是“是”或“否”,但它正在搜索所有集合。 在上面的例子中,它给出了答案:
[('H', 'Y')]
[('Y', 'Y')]
No
[('Y','Y')] 不应该打印,它应该在运行 (frozenset({(9,'Y'), (3,'N')}), 3,'Y' 后停止). 这对于更复杂的集合非常有用。 我该如何改进呢? 一旦找到一对 [('H','Y')] 如果存在,它应该立即停止。
我不确定你的z
参数的初始值是多少,但使用z = [('H', 'Y'), ('Y', 'Y')])
并调整最后一个break
的缩进似乎提供了预期的效果行为:
flag = 'Yes'
while flag == 'Yes':
for i in conj:
i = list(i)
for j in i:
s0 = list(j[0])
t0 = list(j[-1])
u0 = list(t0[-1])
v0 = dt(s0)
diag = list(zip(v0,u0))
print(diag)
if diag == [('H','Y')]:
flag = 'No'
break
break
print(flag)
z = [('H', 'Y'), ('Y', 'Y')]
dt(z)
[('H', 'Y')]
No
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.