我决定在春假期间开始一个项目,从webcomic中获取字符并翻译文本,就好像那个角色说的那样。我已经设法让它适用于一个角色,但是有一个小问题。
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语句,但它根本不会发布原始文本。任何建议将不胜感激。
答案 0 :(得分: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
语句停止时才会执行。
您看到输出两次的原因是因为您的dict中有两个项目。我认为只有在没有替换匹配时才打印原始文本。