如何将基于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
相关产品推荐
相关产品推荐

