2015-03-13 48 views
0

我需要從列表中刪除一個單詞,然後顯示單詞 - 我可以很好地做到這一點。 但是當我刪除第二個單詞並附加之前刪除的單詞時,找不到列表。刪除帶有'pop'的單詞

replword = words.pop(9) 
except IOError: 
    print("WARNING: The text file cannot be found. The program will not run without error.") 

'while menu = true' 
    try: 
     threeByThree() #function: threeByThree 
     #suffle words 
     #remword = words[9] 
     #words = random.shuffle(words) 
     print(remword) 
     newword = replword 
     words.append(newword) 
     threeByThree() 
     #firstNineWords = words[:9] 
     #lastWord = words[-1] 
     words[random.randrange(9)] = lastWord #generate integer between 0 and 9 
     print("") 
     threeByThree 
    except NameError: 
     print("WARNING: Because the file is not found, the list 'words' is not defined.") 

我已經嘗試了代碼在多個不同的訂單,我仍然得到名稱錯誤說列表中沒有定義,當它被定義時,它拉詞語。

我需要能夠給兩個單詞分配2個變量,一個被刪除並添加,然後第二個刪除 - 這個問題後,我可以自己做。

+1

你明白,通過'try/except NameError'保護13行代碼(其中5個現在已被註釋)意味着你拼錯整個部分名稱的任何對象都將導致你的程序打印出「WARNING :因爲文件沒有找到......「等等,這不會是真的嗎? – 2015-03-13 17:57:33

+0

什麼是「threeByThree」,爲什麼最後一行不是'threeByThree()'? – Jkdc 2015-03-13 17:57:33

+2

此代碼無法運行,請提供*完整運行示例*。有一件事我可以指出:'threeByThree'是一個函數,但在最後一次打印之後,它被稱爲內建函數。 – alfasin 2015-03-13 17:57:38

回答

0

歡迎來到bug狩獵101。您需要退後一步,嘗試澄清您遇到的問題。您提供的代碼是某些較大腳本的不完整部分。正如上面的評論,你引用threeByThree作爲一個函數和內置。此外,假設單詞是全局的並且始終可用,那麼您不會將任何事情傳遞給該函數。你可以做的最好的事情是打開一個REPL控制檯並解決問題。

>>> listOfWords = ["My","dog","has","fleas","and","ticks","and","worms","he","al 
>>> listOfWords 
['My', 'dog', 'has', 'fleas', 'and', 'ticks', 'and', 'worms', 'he', 'also', 'smells'] 
>>> removeditem = listOfWords[4] 
>>> removeditem 
'and' 
>>> listOfWords 
['My', 'dog', 'has', 'fleas', 'and', 'ticks', 'and', 'worms', 'he', 'also', 'smells'] 
>>> removeditem = listOfWords.pop(4) 
>>> listOfWords 
['My', 'dog', 'has', 'fleas', 'ticks', 'and', 'worms', 'he', 'also', 'smells'] 
>>> removeditem 
'and' 
>>> anotherremoveditem = listOfWords.pop(1) 
>>> listOfWords 
['My', 'has', 'fleas', 'ticks', 'and', 'worms', 'he', 'also', 'smells'] 
>>> anotherremoveditem 
'dog' 
>>> listOfWords.append(removeditem) 
>>> listOfWords 
['My', 'has', 'fleas', 'ticks', 'and', 'worms', 'he', 'also', 'smells', 'and'] 
>>> listOfWords.append(anotherremoveditem) 
>>> listOfWords 
['My', 'has', 'fleas', 'ticks', 'and', 'worms', 'he', 'also', 'smells', 

'and', 'dog'] 
    >>>>>> def threeByThree(words): 
... print(words[:3]) 
... print(words[3:6]) 
... print(words[6:9]) 
... 
>>> threeByThree(listOfWords) 
['My', 'has', 'fleas'] 
['ticks', 'and', 'worms'] 
['he', 'also', 'smells'] 
>>> threeByThree(listOfWords[9:]) 
['and', 'dog'] 
[] 
[] 
>>> 

當然,如果你輸入了錯誤的東西,你可以看到錯誤消息

>>> threeByThree(sistOfWords[9:]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'sistOfWords' is not defined 

所以,如果你到threeByThree()調用引用變量你沒有通過,以及Try/Except循環捕捉異常,你會得到錯誤的錯誤信息。

>>> def three(): 
... print(words[0:3]) 
... 
>>> three() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in three 
NameError: global name 'words' is not defined 
>>> 

正如我過去告訴過的學生:一個程序完全按照被告知要做的事情,而不是你想做的事情。