【问题标题】:replacing a character in a list even when it appears more than once替换列表中的字符,即使它出现多次
【发布时间】:2017-11-02 13:05:30
【问题描述】:

我正在为 Python 制作臭名昭著的 Hangman 游戏。这是我的代码:

import random
import string
WORDLIST_FILENAME = "words.txt"
def load_words():
    inFile = open(WORDLIST_FILENAME, 'r', 0)
    line = inFile.readline()
    wordlist = string.split(line)
    return wordlist
def choose_word(wordlist):
    return random.choice(wordlist)
wordlist = load_words()
word=list(choose_word(wordlist))          #I read that it's preferable to
print "Welcome to the game, Hangman!"     #use lists as string are more
print "I am thinking of a word that is", len(word), "letters long." #tricky
def check(word):                           #because they are immutable and 
    guesses=20                            #some problems might arise
    let="abcdefghijklmnopqrstuvwxyz"
    altword=list(len(word)*"-")
    while "-" in altword and guesses>0:
        print "You have", guesses, "guesses left."
        print "Available letters: ", let
        letter=raw_input("Please guess a letter: ")
        newlet=let.replace(letter, "")
        let=newlet
        if letter in word:
            index=word.index(letter)          #here is the problem when a
            altword[index]=letter             #letter appears more than once
            print "Good guess: ", ''.join(map(str, altword))
        else:
            guesses=guesses-1
            print "Oops! That letter is not in my word: ", ''.join(map(str, altword))
    if guesses<=0:
        print "Sorry, you've been hanged! The word is: ", ''.join(map(str, word))
    else:
        print "Congratulations, you won!"
check(word)

我如何替换替代词中的"-"如果该字母出现多次?我试图用其他方式表达它,但问题是所述字母可能在任何给定单词中出现多次,我需要先以某种方式检查。

【问题讨论】:

    标签: python list replace


    【解决方案1】:

    你可以这样检查

    'apple'.count('p')
    

    这会给你苹果中 p 的出现 或者您可以使用它来检测句子中的单词

    "apple are red and bananas are yellow and oranges are orange".count("and")
    

    【讨论】:

    • 但这只是给出了计数。该问题要求提供匹配的索引
    • 根据询问的这一行回答 但问题是所述字母可能会或可能不会在任何给定单词中出现多次,我需要先以某种方式检查 i>
    • 谢谢,会努力记住这一点的!
    【解决方案2】:

    您不必计算出现次数,对于游戏逻辑来说,猜出的字母是正确(在单词中)还是不正确(不在单词中)很重要。

    要替换所有匹配项,您可以使用简单的 for-loop 和 enumerate

    if letter in word:
        for idx, char in enumerate(word):  # go through the word (remembering the index)
            if char == letter:             # check if it is a match
                altword[idx] = letter      # replace the character at idx in "altword" with "letter"
        print "Good guess: ", ''.join(map(str, altword))
    else:
        guesses -= 1
        print "Oops! That letter is not in my word: ", ''.join(map(str, altword))
    

    【讨论】:

    • if letter in word: 即使字母出现一次也会给出 true,我认为要求是多次
    • @SoumeshBanerjee 该问题要求提供可能多次出现的字母。在hangman 的上下文中,这封信在word 中出现的频率并不重要,只要它是(好)还是不是(坏)。带有enumeratefor 循环在不知道确切匹配数的情况下工作。它只检查所有元素。
    • 是的,我所说的多次if letter in word:即使出现一次也会给True
    • 在刽子手的上下文中,字母在单词中出现的频率并不重要,我不知道这个游戏,所以不能说更多,但问题是问的似乎在问是否多次出现
    • Hangman (Wikipedia)。如果您有兴趣。
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 2013-04-24
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多