in语句只对python中的列表工作一次

in语句只对python中的列表工作一次,python,python-2.7,Python,Python 2.7,我正在制作一个简单的基于文本的刽子手游戏,我想检查一个用户输入的字母是否是一个列表的一部分,该列表包含了用户应该猜测的单词的字符 以下是该部分代码: while True: print "Guess a letter / The word (%d attempts remaining.)" % attempts guess = raw_input() if len(guess) == 1: if guess in chars: blankslist[chars.index

我正在制作一个简单的基于文本的刽子手游戏,我想检查一个用户输入的字母是否是一个列表的一部分,该列表包含了用户应该猜测的单词的字符

以下是该部分代码:

while True:
print "Guess a letter / The word (%d attempts remaining.)" % attempts
guess = raw_input()
if len(guess) == 1:
    if guess in chars:
        blankslist[chars.index(guess) * 2] = guess
        blanks = "".join(str(x) for x in blankslist)
        print blanks
    else:
        print "Nope!"
        attempts -= 1
        if attempts <= 0:
            print "Game Over! The word was %s" % chosen_word
            break

elif len(guess) == len(chosen_word):
    if guess == chosen_word:
        print "Congrats, you won with %d attempts left!" % attempts
    else:
        print 'Oh no, you lost... The correct word was "%s".' % chosen_word
    break

else:
    print("Input a single letter")
为True时:
打印“猜测字母/单词(%d次尝试剩余。)%”尝试次数
猜测=原始输入()
如果len(猜测)==1:
如果按字符猜测:
空白列表[字符索引(猜测)*2]=猜测
blanks=“”.连接(str(x)表示blankslist中的x)
打印空白
其他:
打印“不!”
尝试次数-=1
如果尝试
.index(guess)
只返回它找到的第一个索引

您可以使用类似的方法获取所有索引:

positions = [i for i, char in enumerate(chars) if guess == char]
然后循环浏览此列表:

for p in positions:
    blankslist[p * 2] = guess

你能在代码中添加for循环吗?在每个循环
之后如何猜测和修改字符。index(guess)
返回该值的第一个索引,只需在列表中循环并替换所有出现的值。为什么
blankslist
的长度是
chars
的两倍?这是因为我的blankslist类似于\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(让用户了解单词有多少个字母)我必须将索引乘以2,这样它只能替换下划线而不是空格。这很有效,但是你能解释一下你添加的第一行代码是做什么的吗?作为一个初学者,我不能完全理解它。@J.C.理解列表理解的有用资源:还有
帮助(枚举)
将解释这一点part@J.C.enumerate将列表中的每个元素转换为一个元组,第0个元素
i
作为索引,第一个元素
char
作为原始元素。您可以在不理解列表的情况下将其重写为
positions=[]
/
对于i,枚举中的char(chars):
/
如果guess==char:
/
位置。附加(i)