【问题标题】:While-loop with break under a condition in PythonPython中条件下的while循环
【发布时间】:2021-11-25 07:23:49
【问题描述】:

我在 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')],它应该立即停止。

【问题讨论】:

  • 粗略一瞥,似乎最后一个break 需要再缩进一层以与for j in i: 循环块对齐(最后一个break 在当前位置是不必要的,最外层for-loop 在完成所有循环后总是会中断)。
  • 在这种情况下,在没有 ('H','Y') 对的情况下,它似乎会经历一个无限循环。
  • 这里的答案可能会对您有所帮助。 stackoverflow.com/questions/189645/…
  • 传递给def dt(z):z的初始值是多少?

标签: python if-statement while-loop break


【解决方案1】:

我不确定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

【讨论】:

  • 如果条目没有导致 diag = ('H','Y') 的值并且标志将保持为“是”,则此选项将不起作用。它经历了一个无限循环。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 2011-12-08
  • 2011-11-02
  • 2023-01-11
  • 2015-02-27
  • 2013-11-15
  • 2014-11-02
相关资源
最近更新 更多