2017-02-12 10 views
-1

いくつかの文字を取り、その文字で綴ることができる単語を確認するプログラムを作成しています。アイデアは、スクラブルを演奏するときに役立つだろうということです。プログラムをテストするために、私はforループが永遠に取らないように、より小さな単語の選択を使用しています。1つのリストから要素を削除すると、別の要素から削除されるのはなぜですか?

One 
Two 
Three 
Four 
Five 

入力された文字で単語のスペルができるかどうかを確認する以外は、プログラムの全体が正しく機能します。特定の変数をforループの異なるポイントに出力してテストを行った後、エラーがリストによって引き起こされていることがわかりましたcharactersから文字が削除されると、lettersの文字が削除されていますlettersから何かを削除してください。これは私がPythonをしばらく使用していたとしても、今まで問題となったことはなかったように、私を驚かせました。ここに私のコードは次のとおりです。私は、入力としてoneerhtを使用する場合

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) 

、言葉onethreeは許可リストに配置する必要がありますが、唯一のoneがリストに表示されます。これはリストlettersが空になっているだけでなく、リストcharactersが発生してはならないようなものです。だからlettersが空になっているのですが、これが起こらないように私ができることは何ですか?

他の人がおそらく既に同様の質問をしている可能性があることを知っていますが、探しているときに回答が見つからず、何を検索するのかわかりません。どんな助けもありがとう、ありがとう!

+0

'letters'と' characters'は同じリストです。 – user2357112

答えて

1

個別のオブジェクトを作成するには、リストのコピーを作成する必要があります。あなたは同じ参照を使用しています。

characters = letters[:] 
+0

* reference *とはどういう意味ですか? (あなたが答えてくれた10分後にあなたの答えを受け入れるでしょう。) –

+0

何かは、「箱とポインタの図」です。 1つの「ボックス」と2つの「ポインタ」があります。したがって、同じ参照。 1つの編集を他の編集に反映 –

関連する問題