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

时间:2019-06-13 01:34:39

标签: python break

我正在尝试创建一个子手游戏。根据选择的随机单词的长度,我的程序突然停止。仅当您猜出单词或达到最大猜想次数时,它才会停止。

#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个猜测来弄清楚这个单词是mom,但是该程序在两次尝试后就结束了。

1 个答案:

答案 0 :(得分:0)

致电word_guessed时,在计算正确字母的数量之前,请勿将num_correct_letters重置回0。因此,一旦您猜出一个正确的字母,即使您猜错了其他字母,该计数器也会不断增加。如果到达len(set(secret_word)),则循环结束。

num_correct_letters状态下,无需检查while,因为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()