如何优化Jupyter Notebook中的Hangman游戏:多轮游玩、难度选择与排行榜
优化Jupyter Notebook环境下的Hangman猜词游戏
需要对现有Hangman游戏代码进行以下优化:
- 支持用户输入指定游玩次数,并按该次数执行游戏;同时提供游戏模式选择(单人模式/双人模式)
- 添加游戏难度等级选择功能,不同难度对应不同的可猜错次数和单词长度
- 集成排行榜功能,显示前5名玩家的姓名及对应分数
原代码
from IPython.display import clear_output import random NUMBER_OF_PICKS = 3 MINIMUM_SELECTION = 1 MAXIMUM_SELECTION = 36 # 游戏管理员输入单词 user = input("Please enter your name:") print("Hi " + user + " good luck ") no_of_time = input("How many times do you want to play: ") answer_word = list(str.lower(input("input enter your word: "))) clear_output() win = False # 定义检查猜测的函数 def guesscheck(guess,answer,guess_no): clear_output() if len(guess)==1: if guess in answer: print("Correct, ",guess," is a right letter") return True else: print("Incorrect, ",guess, " is a not a correct letter. That was your chance number ",guess_no) return False else: print("Enter only one letter") # 初始化显示的单词(用*代替字母) answer_display=[] for each in answer_word: answer_display += ["*"] print(answer_display) # 初始化允许的猜测次数 guess_no = 1 while guess_no<5: clear_output # 玩家输入猜测字母 guess_letter=str.lower(input('Enter your guess letter: ')) # 调用检查函数 guess_check=guesscheck(guess_letter,answer_word,guess_no); # 猜错的情况 if guess_check == False: guess_no +=1 print(answer_display) # 猜对的情况 elif guess_check == True: num = [i for i, x in enumerate(answer_word) if x == guess_letter] for all in num: answer_display[all]=guess_letter print(answer_display) # 判断是否获胜 if answer_display.count('*')==0: win = True break # 显示最终结果 if win: print("You won!") else: print("The correct answer was: ", answer_word) print("You lost!")
优化后的完整代码
from IPython.display import clear_output import random # 按难度划分的内置词库 WORD_LIBRARIES = { "easy": ["apple", "banana", "cat", "dog", "fish"], "medium": ["elephant", "giraffe", "computer", "mountain", "rainbow"], "hard": ["encyclopedia", "congratulations", "unbelievable", "extraordinary", "complicated"] } # 各难度对应的可猜错次数 DIFFICULTY_ATTEMPTS = { "easy": 6, "medium": 4, "hard": 3 } # 排行榜数据(可扩展为持久化存储) leaderboard = [] def get_valid_input(prompt, valid_options=None, input_type=int): """获取合法输入的工具函数""" while True: try: user_input = input(prompt) if valid_options and user_input not in valid_options: print(f"请输入以下选项之一:{', '.join(valid_options)}") continue return input_type(user_input) if input_type else user_input except ValueError: print(f"请输入有效的{input_type.__name__}类型数据") def guesscheck(guess, answer): """检查猜测字母是否正确""" clear_output() if len(guess) != 1: print("请输入单个字母!") return None guess = guess.lower() if guess in answer: print(f"正确!'{guess}' 是目标单词中的字母") return True else: print(f"错误!'{guess}' 不在目标单词中") return False def play_game(username, difficulty, game_mode): """单局游戏逻辑""" # 选择目标单词 if game_mode == "1": # 单人模式:从对应难度词库随机选词 word_list = WORD_LIBRARIES[difficulty] answer_word = list(random.choice(word_list).lower()) else: # 双人模式:由另一玩家输入单词 clear_output() answer_word = list(input("请输入目标单词(输入后会清屏):").lower()) clear_output() answer_display = ["*"] * len(answer_word) max_attempts = DIFFICULTY_ATTEMPTS[difficulty] wrong_attempts = 0 win = False print(f"开始游戏!难度:{difficulty},最多可猜错{max_attempts}次") print("目标单词:", "".join(answer_display)) while wrong_attempts < max_attempts: guess_letter = input("请输入你猜测的字母:") check_result = guesscheck(guess_letter, answer_word) if check_result is None: print("当前进度:", "".join(answer_display)) continue if check_result: # 更新显示的单词 for idx, char in enumerate(answer_word): if char == guess_letter: answer_display[idx] = guess_letter print("当前进度:", "".join(answer_display)) # 判断是否获胜 if "*" not in answer_display: win = True break else: wrong_attempts += 1 print(f"剩余可猜错次数:{max_attempts - wrong_attempts}") print("当前进度:", "".join(answer_display)) # 计算单局得分:获胜得分为难度系数×剩余次数,失败得0分 difficulty_score = {"easy": 10, "medium": 20, "hard": 30}[difficulty] score = difficulty_score * (max_attempts - wrong_attempts) if win else 0 # 显示单局结果 clear_output() if win: print(f"恭喜{username},你赢了!本次得分:{score}") else: print(f"很遗憾{username},你输了!目标单词是:{''.join(answer_word)},本次得分:{score}") return score def update_leaderboard(username, total_score): """更新排行榜,保留前5名""" leaderboard.append({"username": username, "score": total_score}) # 按分数降序排序 leaderboard.sort(key=lambda x: x["score"], reverse=True) # 只保留前5名 leaderboard[:] = leaderboard[:5] def show_leaderboard(): """显示前5名排行榜""" clear_output() print("=== 排行榜(前5名) ===") if not leaderboard: print("暂无玩家数据") else: for idx, player in enumerate(leaderboard, 1): print(f"{idx}. {player['username']} - {player['score']}分") input("按回车键返回主菜单...") clear_output() def main(): """主程序入口""" while True: clear_output() print("=== Hangman猜词游戏 ===") print("1. 开始游戏") print("2. 查看排行榜") print("3. 退出游戏") choice = get_valid_input("请选择操作(1/2/3):", ["1", "2", "3"], input_type=None) if choice == "3": print("游戏结束,再见!") break elif choice == "2": show_leaderboard() continue # 游戏初始化流程 username = input("请输入你的姓名:").strip() while not username: print("姓名不能为空,请重新输入") username = input("请输入你的姓名:").strip() game_mode = get_valid_input("选择游戏模式(1=单人模式/2=双人模式):", ["1", "2"], input_type=None) difficulty = get_valid_input("选择难度(easy/medium/hard):", ["easy", "medium", "hard"], input_type=None) play_times = get_valid_input("请输入游玩次数:", input_type=int) total_score = 0 for i in range(play_times): print(f"\n=== 第{i+1}局游戏 ===") round_score = play_game(username, difficulty, game_mode) total_score += round_score input("按回车键进入下一局...") clear_output() print(f"{username},你总共游玩了{play_times}局,总得分:{total_score}") update_leaderboard(username, total_score) input("按回车键返回主菜单...") if __name__ == "__main__": main()
优化说明
- 游玩次数与游戏模式:主菜单支持选择单人/双人模式,可输入指定游玩次数,自动循环执行对应局数
- 难度等级:划分简单、中等、困难三个难度,对应不同长度的词库和可猜错次数,得分计算随难度提升
- 排行榜功能:记录玩家总得分,按分数降序排序后显示前5名,支持随时查看
内容的提问来源于stack exchange,提问作者Jeon
相关产品推荐
相关产品推荐

