程序根据任意字的长度突然停止

Program abruptly stops based on the length of an arbitrary word

我正在尝试制作刽子手游戏。我的程序根据所选随机单词集的长度突然停止。只有在您猜到单词或达到最大猜测次数后,它才会停止。

#Krish Patel

from random import randrange


def load_words():
    word_list = ["mom"] #"apple","tomato","krish","name","pediatrician"]
    return word_list

words_dict = load_words()

def get_word():
    word=words_dict[randrange(0,len(words_dict))]
    return word

secret_word = get_word()
letters_guessed = set()
local_guesses= 0
max_guesses = 6
num_correct_letters = 0

def play_hangman():
    global secret_word
    global letters_guessed
    global max_guesses
    global num_correct_letters
    global local_guesses

    print("Hello there! You are about to play a game of hangman!. Enjoy...")
    while not word_guessed() and  num_correct_letters != len(set(secret_word)) and local_guesses < max_guesses:
        guess = input("Enter a letter: ")
        if letters_guessed.add(guess) != letters_guessed:   
            local_guesses += 1
            letters_guessed.add(guess)
        else:
            print("You already guessed that letter!")
        print_guessed()
        word_guessed()
    if word_guessed() == True:
        print("You have won! The secret word was: " + secret_word)
        secret_word = get_word()
        letters_guessed = set()
        local_guesses= 0
        max_guesses = 6
        num_correct_letters = 0
    if local_guesses >= max_guesses:
        print("You went over your maximum number of allotted guesses. The secret word was: " + secret_word)
        secret_word = get_word()
        letters_guessed = set()
        local_guesses= 0
        max_guesses = 6
        num_correct_letters = 0

def print_guessed():
    global secret_word
    global letters_guessed
    print("Your guesses are " + str(letters_guessed))

def word_guessed():
    global secret_word
    global letters_guessed
    global num_correct_letters


    for i in set(secret_word):
        if i in letters_guessed:
            num_correct_letters += 1
    return num_correct_letters == len(set(secret_word))

应该发生的是,您有 6 次猜测来确定单词是妈妈,但程序在尝试两次后结束。

当您调用 word_guessed 时,您不会在计算正确字母的数量之前将 num_correct_letters 重置回 0。因此,一旦您猜对了一个字母,即使您没有猜对其他字母,该计数器也会继续增加。如果达到len(set(secret_word)),则循环结束。

您的 while 条件中没有必要检查 num_correct_letters,因为 word_guessed() 已经检查过了。

你不需要word_guessed中的循环,你也不需要变量num_correct_letters,你可以简单地写:

def word_guessed():
    global secret_word
    global letters_guessed
    return set(secret_word).issubset(letters_guessed)

您也没有测试 guess 是否已经在 letters_guessed 中正确。使用 guess not in letters_guessed.

您应该在函数的开头对所有变量进行一次初始化,而不是在结尾的两个 if 语句中重复进行。而且不需要是全局变量,直接作为函数参数传递即可。

from random import randrange

def load_words():
    word_list = ["mom","apple","tomato","krish","name","pediatrician"]
    return word_list

words_dict = load_words()

def get_word():
    word=words_dict[randrange(0,len(words_dict))]
    return word

def play_hangman():
    secret_word = get_word()
    letters_guessed = set()
    local_guesses= 0
    max_guesses = 6

    print("Hello there! You are about to play a game of hangman!. Enjoy...")
    while not word_guessed(secret_word, letters_guessed) and local_guesses < max_guesses:
        guess = input("Enter a letter: ")
        if guess not in letters_guessed:
            letters_guessed.add(guess)
            local_guesses += 1
            letters_guessed.add(guess)
        else:
            print("You already guessed that letter!")
        print_guessed(letters_guessed)
    if word_guessed(secret_word, letters_guessed):
        print("You have won! The secret word was: " + secret_word)
    elif local_guesses >= max_guesses:
        print("You went over your maximum number of allotted guesses. The secret word was: " + secret_word)

def print_guessed(letters_guessed):
    print("Your guesses are " + str(letters_guessed))

def word_guessed(secret_word, letters_guessed):
    return set(secret_word).issubset(letters_guessed)

play_hangman()