2016-04-03 75 views
0

我大約花了幾周的時間學習Python。請幫我更好地理解這個「除了」條件行

在用戶的指導下:'Lost'在Stackoverflow上我能夠弄清楚如何構建一個簡單的解碼器程序。他提出了一個代碼,我改變了一些東西,但對我來說重要的是我明白髮生了什麼。我瞭解該代碼的97%,除了decode()中的except: i += 1行外。到目前爲止,代碼的工作原理,但我想了解這一行。

所以基本上這個代碼根據一個特定的標準解密一個加密的單詞。你可以輸入這個樣本加密的單詞來試用它。 "0C1gA2uiT3hj3S"答案應該是"CATS"

我試着更換不同的是:用值錯誤i += 1,因爲我從來沒有見過一個try /除有條件的,只是有一個操作沒有錯誤的條款。但用「值錯誤」替換它創建了一個永無止境的循環。

我的問題是寫什麼是除了:i += 1它的目的。

如果你在那裏'迷路'你能回答這個問題嗎?對不起,關於舊線

def unscramble(elist): 

    answer = [] 
    i = 0 

    while i <= len(elist): 

     try: 
      if int(elist[i]) > -1: 
       i = i + int(elist[i]) + 1 
       answer.append(elist[i]) 
     except: 
      i += 1 

    return "".join(answer) 

def boom(): 
    eword = input("paste in your encrypted message here >> ") 
    elist = list(eword) 
    answer = unscramble(elist) 
    print (answer) 

clear() 
boom() 
+2

這是不好的代碼,我建議你找別的東西值得學習。 – jonrsharpe

+0

從這裏開始:https://docs.python.org/3/tutorial/errors.html –

回答

0

的目的是通過一個推進i,跳過的情況下,當前字符的投地int失敗,即如果elist[i]不是一個數字。

+0

謝謝你!這裏每個人都很有幫助。 – user3564925

0

有一對夫婦的錯誤,不是可以在try-塊內發生:

  1. i超出指標的,因爲當循環運行一個指標遠。
  2. elist[i]不是一個數字,這導致ValueError異常
  3. i = i + int(elist[i]) + 1變到大,和下一個索引訪問也導致了IndexError

在這兩種方式中,除了子句將忽略下一個字符。循環繼續。

的正確實施將不需要任何的例外:

def unscramble(elist): 
    answer = [] 
    i = 0 
    while i < len(elist): 
     i += int(elist[i]) + 1 
     answer.append(elist[i]) 
     i += 1 
    return "".join(answer) 
+0

我看到丹尼爾!謝謝。你的代碼更清潔。 – user3564925

+0

但是代碼並不相同。原始代碼將「0CX1gA2uiT3hj3S」解讀爲「CATS」,這將引發錯誤。 – wonce