You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将基于Python类实现的Hangman游戏改写为纯函数形式

将Hangman游戏从类结构转换为函数式实现

下面是移除类结构、整合所有逻辑到main()函数的实现版本,同时保留原游戏的所有功能:

def get_secret_word():
    while True:
        word = input("Please enter word to be guessed\nthat does not contain ? or white space: ")
        if " " not in word and '?' not in word:
            return word

def get_guess():
    while True:
        character = input("Please enter your next guess : ")
        if len(character) == 1:
            return character
        print("you can only guess a single character")

def display_guess(progress):
    return "".join(progress)

def is_game_over(guesses, secret_word, progress):
    if guesses >= 7 or secret_word == ''.join(progress):
        if secret_word == ''.join(progress):
            print("\nCongratulations you cracked it...")
        else:
            print("\nSorry game over...")
        return True
    return False

def update_progress(progress, secret_word, guess):
    for i in range(len(secret_word)):
        if secret_word[i] == guess:
            progress[i] = guess

def display_hangman(guesses, secret_word):
    if guesses == 0:
        print("             ")
    elif guesses == 1:
        print("      |      ")
        print("      0      ")
        print("             ")
        print("             ")
        print("             ")
    elif guesses == 2:
        print("      |      ")
        print("      0      ")
        print("     /       ")
        print("             ")
        print("             ")
    elif guesses == 3:
        print("      |      ")
        print("      0      ")
        print("     /|      ")
        print("             ")
        print("             ")
    elif guesses == 4:
        print("      |      ")
        print("      0      ")
        print("     /|\     ")
        print("             ")
        print("             ")
    elif guesses == 5:
        print("      |      ")
        print("      0      ")
        print("     /|\     ")
        print("     /       ")
        print("             ")
    else:
        print("      |      ")
        print("      0      ")
        print("     /|\     ")
        print("     / \     ")
        print("             ")
        print("You failed to guess the secret word: " + secret_word)

def main():
    guesses = 0
    letters_guessed = ""
    secret_word = get_secret_word()
    progress = list("?" * len(secret_word))

    while not is_game_over(guesses, secret_word, progress):
        display_hangman(guesses, secret_word)
        print("\n" + display_guess(progress))
        print("So far you have guessed : " + letters_guessed)
        guess = get_guess()

        if guess in secret_word and guess not in letters_guessed:
            letters_guessed += "," + guess if letters_guessed else guess
            update_progress(progress, secret_word, guess)
        elif guess not in secret_word and guess not in letters_guessed:
            guesses += 1
            letters_guessed += "," + guess if letters_guessed else guess
        else:
            print(f"you already guessed the character : {guess}")

if __name__ == "__main__":
    main()

转换说明

  • 移除类与实例属性:将原类中的guesses、letters_guessed、secret_word、progress等实例属性,改为main()函数中的局部变量。
  • 方法转为独立函数:每个原类方法都改为接收必要参数的独立函数(比如update_progress需要接收progress、secret_word和guess参数),不再依赖实例上下文。
  • 优化细节:调整了letters_guessed的拼接逻辑,避免初始状态下出现多余的逗号;将原update_progress中的while循环替换为更简洁的for循环,功能保持一致。
  • 入口规范:使用if __name__ == "__main__"确保main()函数仅在直接运行脚本时执行,符合Python脚本的标准写法。

内容的提问来源于stack exchange,提问作者Takayuki Nakano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:45:43