2017-02-12 252 views
-1

我正在編寫一個程序,需要一些字母並檢查哪些單詞可以與這些字母拼寫。這個想法是,它在玩拼字遊戲時很有用。爲了測試這個程序,我使用了一個較小的單詞選擇,以便for循環不會永遠持續下去。爲什麼從一個列表中刪除一個元素將它從另一個列表中刪除

One 
Two 
Three 
Four 
Five 

到目前爲止,該計劃的全部工作正常,檢查時,如果一個字可以與輸入的字母拼寫除外。通過在for循環中的不同點處打印某些變量進行了一些測試之後,我發現錯誤是由於列表letterscharacters中刪除了字符而導致的,即使我不是從letters中刪除任何內容。這令我感到驚訝,因爲即使我已經使用Python一段時間了,這從來都不是問題。這裏是我的代碼:

words = [] 
file = open('test.txt', 'r') 
for line in file.readlines(): 
    words.append(line.strip('\n')) 

letters = '' 
while True: 
    letters = input('Enter your available letters: ') 
    if letters.isalpha() and len(letters) == 7: 
     letters = list(letters.lower()) 
     break 
    else: 
     print('Please enter 7 letters') 
     continue 

allowed = [] 

for i in words: 
    characters = letters 
    check = 0 
    for j in range(len(i)): 
     if i[j] in characters: 
      characters.remove(i[j]) 
      check += 1 
     if j == check - 1 == len(i) - 1: 
      allowed.append(i) 

print(allowed) 

當我使用oneerht作爲輸入,單詞onethree應放置在允許列表中,但只有one出現在列表中。這是因爲列表letters正在被清空以及列表characters不應該發生。那麼爲什麼letters被清空了,我能做些什麼來防止這種情況發生?

我知道別人可能已經提出了類似的問題,但是我找不到答案,而且我不知道要搜索什麼。任何幫助將不勝感激,謝謝!

+0

'字母'和'字符'是相同的列表。 – user2357112

回答

1

您需要製作一個副本以創建一個單獨的對象。您正在使用相同的參考

characters = letters[:] 
+0

*參考*是什麼意思? (我會在10分鐘內接受你的答案,當它讓我,你說的工作。) –

+0

東西要查找是「框和指針圖」。你有一個「盒子」和兩個「指針」。因此,同樣的參考。編輯一個反映到另一個 –

相關問題