首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >程序会根据任意单词的长度突然停止

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

Stack Overflow用户
提问于 2019-06-13 09:34:40
回答 1查看 12关注 0票数 0

我正在尝试创建一个绞刑者游戏。我的程序会根据随机选择的一组单词的长度突然停止。只有当你猜到单词或达到最大猜测次数时,它才会停止。

代码语言:javascript
复制
#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次猜测,以确定单词是妈妈,但程序在两次尝试后结束。

EN

Stack Overflow用户

回答已采纳

发布于 2019-06-13 10:12:23

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

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

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

代码语言:javascript
复制
def word_guessed():
    global secret_word
    global letters_guessed
    return set(secret_word).issubset(letters_guessed)

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

应该在函数开始时初始化所有变量一次,而不是在函数末尾的两个if语句中重复初始化。它们不需要是全局变量,只需将它们作为函数参数传递即可。

代码语言:javascript
复制
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()
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56572261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档