2016-02-21 178 views
2

我做了一些研究,發現有很多類似的問題已經被提出,但是我無法得到我的答案。無論如何,我試圖建立一個圖書館來「加密」字符串與「塞薩爾的數字」技術,這意味着我必須採取字符串,並用另一個字母替換每個字母在字母表中的X位置(我希望這是有道理的) 。這裏是我的代碼:Python:退出循環?

from string import ascii_lowercase, ascii_uppercase 

def creer_encodeur_cesar(distance): 

    retour = lambda x: encodeur_cesar(x, distance) 
    return retour 

def encodeur_cesar(string, distance): 
    tabLowerCase = list(ascii_lowercase) 
    tabUpperCase = list(ascii_uppercase) 
    tabString = list(string) 

    l_encodedStr = [] 

    for char in tabString: 
     position = 0 
     if char == " ": 
      pass 
     elif char.isupper(): 
      #do something 

     elif char.islower(): 
      for ctl in range(0, len(tabLowerCase)): 
       position = ctl 
       if char == tabLowerCase[ctl]: 
        if (ctl + distance) > 26: 
         position = ctl + distance - 25 
        char = tabLowerCase[position + distance] 
        l_encodedStr.append(char) 
        #How to break out of here?? 


     encodedStr = str(l_encodedStr) 

     return encodedStr 

encodeur5 = creer_encodeur_cesar(5) 
print(encodeur5("lionel")) 

所以,在我的第二個elif的發言,我想破一次,我已成功發現和加密的字符,而不是循環槽全字母。我試圖使用break,但它已經打破了主循環。不是我想要的。我看到我可以使用tryexceptraise,但我不太清楚我該怎麼做,這是一個好主意嗎?

這樣做的最好方法是什麼?這種情況下的良好做法是什麼?

任何幫助將不勝感激,並提前致謝!

+0

從中圈你想打出來的?這一個:'對於tabString中的字符:'或這個:'對於範圍內的ctl(0,len(tabLowerCase)):'? –

+0

for the ctl in range(0,len(tabLowerCase)):one。對不起,我不是更清楚 – Gaboik

+0

使用break來退出循環 – tinySandy

回答

4

您可以使用continue關鍵字。

從文檔:

>>> for num in range(2, 10): 
...  if num % 2 == 0: 
...   print "Found an even number", num 
...   continue 
...  print "Found a number", num 
Found an even number 2 
Found a number 3 
Found an even number 4 
Found a number 5 
Found an even number 6 
Found a number 7 
Found an even number 8 
Found a number 9 
+0

但是在什麼情況下我的程序會進入else語句?當它到達休息時? – Gaboik

+0

@Gaboik我很抱歉,我在添加輸出時粘貼了錯誤的代碼片段。基本上,你可以在繼續之後放置代碼,如果繼續沒有執行,你只想執行。 – wpercy

+0

好吧,這更有意義:)謝謝! – Gaboik