在 Python 条件下中断的 while 循环
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)
虽然它正确推断出标志是 'Yes' 或 'No',但它正在搜索所有集合。在上面的例子中,它给出了答案:
[('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
我在 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)
虽然它正确推断出标志是 'Yes' 或 'No',但它正在搜索所有集合。在上面的例子中,它给出了答案:
[('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