2014-03-12 32 views
1

在第二個for循環運行到26時,我希望每次從列表中刪除一個項目時都要將其設置爲零,以便我可以檢查從一開始如果在list1中所有字母表中都有一個字母表,我嘗試在for循環內的if語句中添加i = 0,但它回到其範圍值並且不會被重置爲零。每次for循環運行在python中時,需要將i設置爲零

import string 
def getAvailableLetters(lettersGuessed): 
    str1 = string.ascii_lowercase 
    list1 = [ ] 
    list1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 
    str3 = "" 
    str4 = str3.join(lettersGuessed) 

    for j in range(len(str4)): 
     for i in range(26): 
      if list1[i] == str4[i]: 
      list1.remove(list1[i]) 


lettersGuessed = ['e', 'i', 'k', 'p', 'r', 's'] 
getAvailableLetters(lettersGuessed) 
+0

換句話說,要刪除''從string.ascii_lowercase' lettersGuessed'? – Ben

+0

通常,如果不使用Python特有的東西,你可以用'while'循環('while while i <26'或類似的)替換'for'循環,並根據需要添加行來增加/重置'i'。如果這是用於生產編碼器而不是一般的編程練習,那麼請使用@ wim的方法。 – YXD

+0

是的,抱歉,不明確。 –

回答

3

嘗試是這樣的,而不是:

import string 

def getAvailableLetters(lettersGuessed): 
    return sorted(set(string.ascii_lowercase) - set(lettersGuessed)) 

lettersGuessed = ['e', 'i', 'k', 'p', 'r', 's'] 
getAvailableLetters(lettersGuessed) 
+1

謝謝!,這是美麗的代碼。我應該更像這樣想,我想這是伴隨着練習。 –

0

for loops在Python具有較小的已知的(並且有些晦澀難懂)else表達可用於確定整個循環完成。這對重新啓動循環很有用。

for j in range(…): 
    while True: 
    for i in range(26): 
     if list1[i] == str4[i]: 
     list1.remove(list1[i]) 
     break # Break out of the `for` loop to continue the `while`. 
    else: 
     # The `else` will not happen if we `break` in the `for` loop. 
     break # Finished the `for` loop; Break out of the `while`. 
0

你可以嘗試while loop代替,像這樣:

i = 0 
for j in range(len(str4)): 
     while i < 26: 
      if list1[i] == str4[i]: 
       list1.remove(list1[i]) 
       i = 0 
       continue 
      i += 1 

這樣你就可以真正從零循環改變icontinue值。

0
def getAvailableLetters(lettersGuessed): 
    alphabet = 'abcdefghijklmnopqrstuvwxyz' 
    lst= '' 
    for e in alphabet: 
     if e not in lettersGuessed: 
      lst += e 
    return lst 

這是我做的不是字母的信,我加入這回字符串