Python两个循环

2024-09-30 03:22:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个游戏,其中两个用户输入字母,直到他们猜出秘密单词,但由于某些原因,我的列表没有正确更新。假设这个秘密单词是TOYS,如果用户猜到T,它就会显示T,然后用户输入R,这样它就切换到第二个循环,用户输入S,它表示S不在单词中,然后转到第一个用户。 这是一个猜测游戏,两个玩家之间的变化,当它变成第二个玩家时,它不工作,因为某种原因。我想不通为什么?那个函数secondLoop具有与附加行“#”相同的组件


Tags: 函数用户游戏列表字母玩家组件原因
2条回答

在secondLoop函数中,它似乎永远递归地调用自己。这可能就是你犯错误的原因。我把递归的self调用改成了return语句,看起来效果不错。我已经评论了下面的变化,例如。。。你知道吗

def secondLoop(enteredLetters,sentence,newSentence,lettersInWord):
    print ' Player 2 '
    number = len(sentence)
    flag = True
    while flag == True: 
        # changed input to raw_input
        letter = raw_input("Enter letter: ")

        if letter not in enteredLetters:
            find = sentence.find(letter)
            if find == -1:
                print("Letter is not in word")
                flag = False
                #  - changed line below to return statement below it  -
                #enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
                return enteredLetters,newSentence,lettersInWord
            else:
                newSentence = ""
                lettersInWord.append(letter)
                for char in sentence:
                    if char in lettersInWord:
                        newSentence = newSentence + char 
                    else:
                        newSentence = newSentence + "_ "
                number = newSentence.count("_")
                flag = True
        elif letter in enteredLetters:
            print ("The letter has been used")
            flag = False
            #  - changed line below to return statement below it  -
            #enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
            return enteredLetters,newSentence,lettersInWord

        print (newSentence)
        enteredLetters.append(letter)    

sentence = 'TOYS'
enteredLetters = []
newSentence = '____'
lettersInWord = []

number = len(sentence)
while number != 0:
    print ' Player 1 '
    # changed input to raw_input
    letter = raw_input("Enter letter: ")

    if letter not in enteredLetters:
        find = sentence.find(letter)
        if find == -1:
            print("Letter is not in word")
            enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
        else:
            newSentence = ""
            lettersInWord.append(letter)
            for char in sentence:
                if char in lettersInWord:
                    newSentence = newSentence + char 
                else:
                    newSentence = newSentence + "_ "
            number = newSentence.count("_")
    elif letter in enteredLetters:
        print ("The letter has been used")
        enteredLetters,newSentence,lettersInWord = secondLoop(enteredLetters,sentence,newSentence,lettersInWord)
    print (newSentence)
    enteredLetters.append(letter)    

良好的程序结构使生活变得更加轻松:

from itertools import cycle
import string

UNKNOWN     = "_"
ALWAYS_SEEN = set(" " + string.punctuation)

def get_letter(prompt):
    while True:
        ch = input(prompt).strip().upper()
        if len(ch) == 1:
            return ch

def seen_word(word, guessed):
    return ''.join(ch if ch in guessed or ch in ALWAYS_SEEN else UNKNOWN for ch in word)

def play_hangman(word, players):
    word    = word.strip().upper()
    guessed = set()
    seen    = seen_word(word, guessed)

    for current_player in cycle(players):
        while True:
            print(seen)
            ch = get_letter("{}: guess a letter: ".format(current_player))

            if ch in guessed:
                print("That letter has already been guessed!")
                break
            else:
                guessed.add(ch)

            if ch in word:
                print("That's the way to do it!")
                seen = seen_word(word, guessed)
            else:
                print("Sorry, that letter is not in the word.")
                break

            if seen == word:
                print("Hurray! {} won!".format(current_player))
                return current_player

def main():
    word = "TOYS"
    players = ["Player 1", "Player 2"]
    play_hangman(word, players)

if __name__=="__main__":
    main()

相关问题 更多 >

    热门问题