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

如何优化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()

优化说明

  1. 游玩次数与游戏模式:主菜单支持选择单人/双人模式,可输入指定游玩次数,自动循环执行对应局数
  2. 难度等级:划分简单、中等、困难三个难度,对应不同长度的词库和可猜错次数,得分计算随难度提升
  3. 排行榜功能:记录玩家总得分,按分数降序排序后显示前5名,支持随时查看

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:56:06