2017-02-12 257 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

东西要查找是“框和指针图”。你有一个“盒子”和两个“指针”。因此,同样的参考。编辑一个反映到另一个 –

相关问题