在此代码中,任务是编写一个函数,该函数从SOWPODS.txt词典的单词列表中选择一个随机单词。文件中的每一行都包含一个单词。这行代码place[random_word.index(ask)] = ask
使用索引函数分配了问值的位置,但是问题是索引函数显示列表random_word
中项目的第一个索引,例如随机列表抛出{{1 }}用户输入后,它将分配类似['A', 'N', 'T', 'I', 'E', 'N', 'T']
的值,即,这行代码未分配重复项。
附言我正在尝试制作一个简单的Hangman游戏
['A', 'N', 'T', 'I', 'E', ' ', ' ']
我想将import random
random_word_from_file = random.choice(open('sowpods.txt', 'r').read().split())
random_word = []
for letter in random_word_from_file:
random_word.append(letter)
print(random_word, len(random_word))
print("\nWelcome to Hangman Game!\n")
print('Secret Word: ',' '.join(random_word))
place = []
for i in range(len(random_word)):
place.append(' ')
print(place)
chance = 0
while chance <= 6:
ask = input("Enter letter: ").upper()
if ask in random_word:
place[random_word.index(ask)] = ask
print(place)
elif ask == 'exit':
break
elif ask not in random_word:
chance += 1
else:
pass
中退出的整个字母分配给random_word
列表。
答案 0 :(得分:1)
Python中的list.index()函数将仅返回查询出现的 first 位置的索引,这意味着如果列表中有重复的条目(与单词“ antient”),每次您只会获得该字母首次出现的索引。
要获取每次出现的Ask的索引,您可以使用列表理解,然后遍历索引列表。例如:
indices = [i for i, letter in enumerate(random_word) if letter == ask]
for index in indices:
place[index] = ask
换句话说:
random_word
匹配的ask
索引的列表place
的索引替换为ask
我相信这会满足您的需求。
答案 1 :(得分:0)
因为.index()第一次出现,所以您永远不会那样到达字母的第二次出现。
有很多方法可以解决这个问题。我所做的是创建一个tmp_word,即您的random_word。然后我将出现的每个字母都删除,让您仍然使用.index()
tmp_word = random_word
while chance <= 6:
ask = input("Enter letter: ").upper()
if ask in tmp_word:
place[tmp_word.index(ask)] = ask
for i, word in enumerate(tmp_word):
if word == ask:
tmp_word[i] = ''
break
print(place)
# Uncomment line below to see visualization of what's happening
# print('_', tmp_word)
elif ask == 'exit':
break
elif ask not in tmp_word:
chance += 1
else:
pass