在 Python 3.0 中,如果我为 Hangman 游戏运行以下代码
secretWord = list("Apple")
compareWord = secretWord
print("".join(secretWord))
for (index , alphabet) in enumerate(secretWord):
compareWord[index] = "_"
print("".join(secretWord))
结果是
Apple
_____
为什么改密语了?我只想修改 compareWord,以便它从 secretWord 改为具有下划线。
发生这种情况是因为 secretWord
和 compareWord
都指向同一个列表。
第一行代码从字符串 Apple 创建一个新列表,并将该列表分配给 secretWord
。第二行将此列表分配给 compareWord
- 现在两个变量都指向同一个列表! for 循环将列表中的每个项目更改为下划线。打印此列表时,它会正确显示 5 个下划线。
如果将 print("".join(secretWord))
调用移至循环之后,您将看到该调用的输出也已更改为 5 个下划线。
解决此问题的一个简单方法是将列表的副本分配给 compareWord
(即,一个新列表,但具有与旧列表相同的内容)。例如:
- 切片:
compareWord = secretWord[:]
- 新列表调用:
compareWord = List(secretWord)
有关如何在 Python 中克隆列表的一些详细信息,请参阅 How to clone or copy a list?
有关 Python 和列表的一些介绍,请参阅 https://developers.google.com/edu/python/lists ,这也很好地说明了您遇到的问题。