Python 蟒蛇刽子手没有透露信件

Python 蟒蛇刽子手没有透露信件,python,Python,我正在开发一个基于.txt文件wordlist的Python版本的hangman。出于某种原因,在初始播放结束后的播放结束中,脚本不会显示某些字母。其他的一切或多或少都是我想要的 我的代码: import random wordlist = open("wordlist.txt").read().split() word = random.choice(wordlist) strikes = 0 hidden_letters = [] alphabet = "abcdefghijklmnopq

我正在开发一个基于.txt文件wordlist的Python版本的hangman。出于某种原因,在初始播放结束后的播放结束中,脚本不会显示某些字母。其他的一切或多或少都是我想要的

我的代码:

import random

wordlist = open("wordlist.txt").read().split()
word = random.choice(wordlist)
strikes = 0
hidden_letters = []
alphabet = "abcdefghijklmnopqrstuvwxyz"
guesses = []

def new_word():
    global word
    global guesses
    word = random.choice(wordlist)
    for letter in set(word):
        if letter in alphabet:
            hidden_letters.append(letter)
    guesses = []

def current_progress():
    for letter in word:
        if letter in hidden_letters:
            print '_',

        elif letter == ' ':
            print ' ',

        else:
            print letter,
    print "\n"

def play_again():
    global strikes
    print "Would you like to play again?"
    answer = raw_input("y/n: ")
    if answer == "y":
        strikes = 0
        main()
    elif answer == "n": exit(0)
    else:
        print "That's not a valid answer."
        play_again()

def letter_in_word(x):
    global strikes
    global hidden_letters
    if x in word:
        hidden_letters.remove(x)
        print "That letter is in the word."
        current_progress()
        if hidden_letters == []:
            print "You win!"
            play_again()
        else:
            print "You have %d strike(s)." % strikes

    elif not x in word:
        print "That letter is not in the word."
        current_progress()
        strikes = strikes + 1
        print "You have %d strike(s)." % strikes

def main():
    new_word()
    current_progress()
    global strikes
    while strikes < 6 and not hidden_letters == []:
        print "Guess a letter. \n Letters that have been already guessed are:", guesses

        guess = raw_input("> ")

        if guess in alphabet and len(guess) == 1:
            if not guess in guesses:
                guesses.append(guess)
                letter_in_word(guess)

            else:
                print "You've already guessed that letter. Pick another."
                current_progress()
                print "You have %d strikes." % strikes

        else:
            print "Sorry, that's not a valid guess."
            current_progress()
            print "You have %d strikes." % strikes

    if strikes == 6:
        print "Oop! You lose."
        print "The answer was:", word
        play_again()

print "Welcome to Hangman!"
print "Six strikes and you lose."
print "----------"      
main()

你的问题是:当玩家猜到当前单词和前一个单词中存在的字母,但在前一个单词中没有猜到时,玩家输掉了游戏,该字母仍在隐藏字母列表中,因为removex只删除该字母的第一个实例。换句话说,在某些执行过程中,列表包含两个相同的字母,这违反了代码的隐含要求。在添加新词的字母之前,可以通过在new_word函数中添加隐藏的字母=[]来解决此问题

从重点矿井:

list.removex

从列表中删除值为x的第一项。这是一个错误 如果没有这样的项目


你的问题是:当玩家猜到当前单词和前一个单词中存在的字母,但在前一个单词中没有猜到时,玩家输掉了游戏,该字母仍在隐藏字母列表中,因为removex只删除该字母的第一个实例。换句话说,在某些执行过程中,列表包含两个相同的字母,这违反了代码的隐含要求。在添加新词的字母之前,可以通过在new_word函数中添加隐藏的字母=[]来解决此问题

从重点矿井:

list.removex

从列表中删除值为x的第一项。这是一个错误 如果没有这样的项目


或者,我想你可以添加声明

del hidden_letters[:]

论新词的乞讨。它会清除隐藏的字母列表。

或者,我想你可以添加声明

del hidden_letters[:]

论新词的乞讨。它会清除隐藏的字母列表。

您能给我们一个具体的例子说明您遇到的问题吗?或者尝试使用调试器来缩小问题的范围?您能给我们一个您遇到的问题的具体示例吗?或者尝试使用调试器来缩小问题的范围?而且,使用集合可以完全消除整个问题,这将防止重复的可能性。并且,使用集合可以完全消除整个问题,这将防止重复的可能性。