在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变为下划线。
答案 0 :(得分:2)
这是因为compareWord
和secretWord
都指向同一个列表。
第一行代码从字符串Apple创建一个新列表,并将该列表分配给compareWord
。第二行将此列表分配给print("".join(secretWord))
- 两个变量现在指向同一个列表! for循环将列表中的每个项目更改为下划线。打印此列表时,它会正确显示5个下划线。
如果您将compareWord
调用移至循环后,您将看到该调用的输出也已更改为5个下划线。
解决此问题的一种简单方法是将列表的副本分配给compareWord = secretWord[:]
(即,新列表但具有与旧列表相同的内容)。例如:
compareWord = List(secretWord)
holder.count.setText(products.getNumOfProducts());
有关如何在Python中克隆列表的详细信息,请参阅How to clone or copy a list?
有关Python和列表的一些介绍,请参阅https://developers.google.com/edu/python/lists,这也很好地显示了您遇到的问题。