Python-替换列表中的项目仅替换第一个实例,而不是所有实例

时间:2015-07-15 16:28:06

标签: python list replace

我现在正在教自己Python,并且正在努力写一个' Hangman'游戏。下面的代码用于检查一个字母是否在由随机选择的单词构成的列表中,以及它是否用另一个列表(由下划线组成)替换为实际字母的_。我的问题是,当一封信出现不止一次时,它不会取代它的所有实例,但就我从其他类似问题中看到的那样,我的代码应该这样做。希望这是有道理的,并且我以正确的方式提出了问题。

编辑,如建议:word_list是从所选单词生成的列表,因此如果' word'是'你好',word_list成为[' h',' e'' l',' l',& #39;○'] blank_word_list由for循环生成,并用' _'替换每个项目。并最终为[' ',' ',' ',' ',' _']。如果我输入' l',那么第一个' l'会被取代而不是两者兼而有之。如果我然后尝试输入第二个' l'我收到一个错误,因为python试图删除' l'来自letter_mod列表,但不能

if guess in word_list:
    for n, i in enumerate(word_list):
        if i == guess:
            blank_word_list[n]= i
            print (blank_word_list)
            letters_mod.remove(guess)
            print (letters_mod)
            if ('_') not in blank_word_list:
            game_on = False
            print ("You Win!")
        else:
            guess = input("Guess a letter ")
            guess = str(guess)

猜测变量来自输入,' letters_mod'变量是带有-z的列表,因此代码检查输入是否有效,并且它还应该删除从该列表中猜到的任何字母。这一点似乎有用。

1 个答案:

答案 0 :(得分:1)

if guess in word_list: # If the guess is correct
    for n, i in enumerate(word_list):
        if i == guess: # Find the indexes where the letter 'guess' is present
            blank_word_list[n]= i # Replace the underscode with the correct letter
            print (blank_word_list)
            letters.remove(guess)
            print (letters)
            if ('_') not in blank_word_list:
                game_on = False
                print ("You Win!")
            else: # If the game is not finished:
                guess = input("Guess a letter ") # Ask for a new letter
                guess = str(guess)

一旦找到第一个正确的字母,就会要求进行新的猜测。确定用户是赢还是需要新猜测的逻辑应该在for循环之外,其唯一目的是找到用户正确猜到的所有字母。

假设您正在运行一个inifite循环,可能的代码是:

while True:
    if ('_') not in blank_word_list:
        # user wins
    else:
       #  ask for a new guess
    if guess in word_list:
        for n, i in enumerate(word_list):
            # for loop code