目前的代码存在一些问题。首先,这一行:
wordList =["antidisestablishmentarianism"]
并没有按照你的想法做 - 它实际上创建了一个包含单个项目 "antidisestablishmentarianism" 的列表。要将字符串转换为字符列表,您可以使用list() - 由于您已经拥有变量word,因此无需再次输入该单词。
附带说明,wordList 不是一个很好的变量名。除了它使用 camelCase 而不是更 Pythonic 的下划线分隔样式这一事实之外,您在这里真正想要的是单词中的 字符 的列表。
因此,该行可以替换为:
characters = list(word)
继续……这一行:
lengthWord = len(word)
是多余的 - 您只在代码中引用一次 lengthWord,因此您不妨在使用它的地方将该引用替换为 len(word)。
您的线路:
usedValues=[position]
也没有按照您的想法做:它完全替换 usedValues,列表中仅包含循环中的最新位置。要将值附加到列表,请使用list.append():
used_positions.append(position)
(我给变量取了一个更准确的名称)。你的下一个问题是这个块:
for ch in wordList:
wordList.remove([usedValues])
首先,您确实想检查您之前存储的每个位置,而不是单词中的每个字符。您对list.remove() 的使用也是错误的:您不能像那样给出要删除的值列表,但是无论如何list.remove() 将从列表中删除值的第一个实例,而您要做的是删除item 在特定位置,这就是 list.pop() 的用途:
for position in sorted(used_positions, reverse=True):
characters.pop(position)
我们使用了一个反向排序的used_positions 的副本,这样当我们删除一个项目时,used_positions 中的剩余位置不会滑出与characters[*] 的左侧对齐。
你的最后一个问题是最后一行:
print("The remaining letters are",WordList, sep='')
如果您想打印以'' 分隔的列表的内容,这不是这样做的方法。相反,你需要str.join():
print("The remaining letters are", "".join(characters))
将所有这些更改付诸实践,并稍微整理一下,我们最终得到:
import random
word = "antidisestablishmentarianism"
characters = list(word)
print("The Word is:", word, "\n")
used_positions = []
for i in range(5):
position = random.randrange(0, len(word))
print("word[",position, "]\t", word[position])
used_positions.append(position)
for position in sorted(used_positions, reverse=True):
characters.pop(position)
print("The remaining letters are", "".join(characters))
[*] 事实上,这引发了另一个问题:如果你的代码两次选择相同的位置怎么办?我会让你考虑那个。