2013-03-23 51 views
0

我已決定在春假期間開始一個項目,從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

它會發布

CHEESE

CH33SE

我可以完全刪除else語句,但它根本不會發布原始文本。任何建議,將不勝感激。

+0

您正在打印每個步驟後的翻譯,而不是在完成後打印。既然你有兩個替代品,你會看到兩個輸出。 – FatalError 2013-03-23 03:08:14

回答

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允許for循環中的else子句,該子句只有在循環未被break語句停止時纔會執行。

您看到輸出兩次的原因是因爲您的字典中有兩個項目。我認爲只有在沒有任何替換匹配時纔打印原始文本。

+0

好的,非常感謝。我正在搞「else」條款的定位,但是沒有想到一個斷言。現在我明白了。 – iKyriaki 2013-03-23 03:17:55