我正在创建一个刽子手程序,我使用list()
函数将单词转换为一个列表,其中每个字母都是自己的元素。当用户输入字母作为猜测时,我希望从列表中删除该字母。我已经尝试了list.remove(obj)
功能,当我在shell中输入列表名称时,它没有工作,没有删除任何字母。
wordList=list(word) letter=input("please enter a letter") if len(letter)>1: print('invalid input, you may only enter one letter at a time') elif letter.isalpha(): if letter in letters: print('you have already entered this letter') else: letters.append(letter) if any(letter in s for s in wordList,): print(letter,"is in the word") wordList.remove(letter)
编辑了长度。
任何想法为什么这些字母都没有从wordList
删除?
答案 0 :(得分:0)
我能够运行你的代码。建议删除多次出现的信件稍作改动。
word = "apple"
wordList=list(word)
while wordList != []:
letter=input("please enter a letter")
letters = []
if len(letter)!=1:
print('invalid input, you may only enter one letter at a time')
if letter.isalpha():
if letter in letters:
print('you have already entered this letter')
else:
letters.append(letter)
if any(letter in s for s in wordList,):
print(letter,"is in the word")
wordList =filter(lambda a: a != letter, wordList)
#wordList.remove(letter)
print wordList
list.remove() - 仅删除第一次出现的字母。你可以使用:
filter(lambda a: a!=letter, wordList)
答案 1 :(得分:0)
然而我不认为这是解决问题的正确方法,因为.remove()仅适用于列表中的第一个匹配项,您可以尝试类似
的方法letters = list('_'*len(wordList))
if letter in wordList:
qtty = wordList.count(letter)
position = wordList.index(letter)
letters[position] = letter
if qtty > 1:
for i in range(qtty-1):
position = wordList.index(letter, position+1)
letters[position] = letter
你有这样的方式,而不是一个完整的列表,每次插入rigth字母时删除,你将有一个空的(实际上是#39; _'字符)列表,每个字母添加到其位置你插入正确的字母的时间,这样你可以像这样打印当前的单词
我制作了这样的游戏,它在我的github上,说明是西班牙语,但很容易跟进