关键字为in的Python控制流

2024-09-28 01:29:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图打印“是”或“否”(为清晰起见,请加引号),这取决于文本字符串中是否存在任何模式排列。你知道吗

from itertools import permutations


i = int(input())

for j in range(i):
    m = input()
    n = input()

    lst = []
    for k in permutations(m):
        lst.append("".join(k))

    for l in lst:
        if l in n:
            print("YES")
            break
        else:
            print("NO")
            break

    print(lst)

这是示例输入:

3
hack
indiahacks
code
eddy
coder
iamredoc

这是预期的输出

YES
NO
YES

对于前两个输入,输出正确,第三个输出失败。你知道吗

/home/ajay/.pyenv/versions/3.4.1/bin/python3.4 /home/ajay/PycharmProjects/LearnPython/test.py
1
coder
iamredoc
NO
['coder', 'codre', 'coedr', 'coerd', 'corde', 'cored', 'cdoer', 'cdore', 'cdeor', 'cdero', 'cdroe', 'cdreo', 'ceodr', 'ceord', 'cedor', 'cedro', 'cerod', 'cerdo', 'crode', 'croed', 'crdoe', 'crdeo', 'creod', 'credo', 'ocder', 'ocdre', 'ocedr', 'ocerd', 'ocrde', 'ocred', 'odcer', 'odcre', 'odecr', 'oderc', 'odrce', 'odrec', 'oecdr', 'oecrd', 'oedcr', 'oedrc', 'oercd', 'oerdc', 'orcde', 'orced', 'ordce', 'ordec', 'orecd', 'oredc', 'dcoer', 'dcore', 'dceor', 'dcero', 'dcroe', 'dcreo', 'docer', 'docre', 'doecr', 'doerc', 'dorce', 'dorec', 'decor', 'decro', 'deocr', 'deorc', 'derco', 'deroc', 'drcoe', 'drceo', 'droce', 'droec', 'dreco', 'dreoc', 'ecodr', 'ecord', 'ecdor', 'ecdro', 'ecrod', 'ecrdo', 'eocdr', 'eocrd', 'eodcr', 'eodrc', 'eorcd', 'eordc', 'edcor', 'edcro', 'edocr', 'edorc', 'edrco', 'edroc', 'ercod', 'ercdo', 'erocd', 'erodc', 'erdco', 'erdoc', 'rcode', 'rcoed', 'rcdoe', 'rcdeo', 'rceod', 'rcedo', 'rocde', 'roced', 'rodce', 'rodec', 'roecd', 'roedc', 'rdcoe', 'rdceo', 'rdoce', 'rdoec', 'rdeco', 'rdeoc', 'recod', 'recdo', 'reocd', 'reodc', 'redco', 'redoc']

Process finished with exit code 0

您可以看到redoc出现在排列列表中,但是为什么python in关键字不能识别它,从而产生NO输出。你知道吗


Tags: noinhomeforinputcodeyesprint
1条回答
网友
1楼 · 发布于 2024-09-28 01:29:13

在检查完列表中的第一项后,您就立即跳出了列表中的循环。你知道吗

而不是:

for l in lst:
    if l in n:
        print("YES")
        break
    else...

如果必须使用循环结构,可以使用以下方法恢复代码:

for l in lst:
    if l in n:
        print("YES")
        break
else: # this will run after (and only if) exhausting your loop.
    print("NO")

雷蒙德·赫廷格认为else的这种用法应该叫做nobreak,我认为这是一种很好的直觉。你知道吗


这是一个usage of the ^{} clause on loops, and is documented here。你知道吗

相关问题 更多 >

    热门问题