0

我决定在春假期间开始一个项目,从网络漫画中提取角色并翻译文本,就好像那个角色在说它一样。我已经设法让它适用于一个角色,但有一个小问题。

def meulin():
    replace = {'EE':'33', 'ee':'33'}
    originalText = input('Input text -> ')
    while True:
        for i, j in replace.items():
            if i in originalText:
                newText = originalText.replace(i,j)
                print(newText.upper())
            else:
                print(originalText.upper())
        originalText = input('Input text (type "quit" to end program.) -> ')
        if originalText in ('quit', 'end', 'exit', 'stop', 'q'):
            sys.exit('Program ended.')

当我运行 PyScripter 的调试器时,它告诉我,在获得输入后,程序从该for i, j in replace.items():行开始,完全跳过 if 语句并转到 else 语句,然后转到 if 语句。所以不仅仅是发布

CH33SE

它会发布

起司

CH33SE

我可以完全删除 else 语句,但它根本不会发布原始文本。任何建议,将不胜感激。

4

1 回答 1

1
for i, j in replace.items():
    if i in originalText:
        newText = originalText.replace(i,j)
        print(newText.upper())
        break
else:
    print(originalText.upper())

break语句意味着循环将在第一次替换后停止。Python 允许在循环中使用子句,该else子句for仅在循环未被break语句停止时才会执行。

您看到输出两次的原因是因为您的字典中有两个项目。我认为您仅在没有替换匹配时才希望打印原始文本。

于 2013-03-23T03:08:24.073 回答