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

如何判断代码哪些部分应封装为函数?以猜数字游戏代码为例

猜数字游戏代码的函数优化方案

原代码存在大量重复逻辑(简单/困难模式的流程几乎一致,仅次数不同),结构冗余且难以维护。我们可以按照单一职责原则,把不同功能模块封装成独立函数,让代码更清晰、易扩展。

可封装的核心模块

  • 获取合法难度选择:处理用户输入,确保只能选择"easy"或"hard",拦截无效输入
  • 生成目标随机数:封装1-100的随机数生成逻辑
  • 获取有效猜测值:确保用户输入的是整数,处理非数字输入的异常
  • 判断猜测结果并给出反馈:对比用户猜测和目标数,返回对应的提示信息
  • 游戏核心循环:接收目标数和剩余次数,处理完整的猜测流程

优化后的代码

import random

def generate_random_number():
    """生成1到100之间的随机整数"""
    return random.randint(1, 100)

def get_valid_difficulty():
    """获取用户合法的难度选择,直到输入正确为止"""
    while True:
        difficulty = input("选择难度:输入'easy'(简单,10次机会)或'hard'(困难,5次机会):").lower()
        if difficulty in ["easy", "hard"]:
            return difficulty
        print("输入无效,请重新选择!")

def get_valid_guess():
    """获取用户有效的数字猜测,处理非数字输入"""
    while True:
        try:
            guess = int(input("请输入你的猜测:"))
            return guess
        except ValueError:
            print("请输入有效的整数!")

def check_guess(guess, target):
    """对比猜测值和目标数,返回结果提示"""
    if guess == target:
        return f"{guess} 猜对了!你赢了!"
    elif guess > target:
        return f"{guess} 太大了!"
    else:
        return f"{guess} 太小了!"

def play_game(target, attempts):
    """执行游戏的核心循环,接收目标数和剩余次数"""
    print(f"你有 {attempts} 次机会猜数字!")
    for attempt in range(attempts, 0, -1):
        if attempt != attempts:
            print(f"你还剩 {attempt} 次机会!")
        guess = get_valid_guess()
        result = check_guess(guess, target)
        print(result)
        if "猜对了" in result:
            return
    print(f"机会用完了!正确数字是 {target},你输了!")

# 游戏启动流程
if __name__ == "__main__":
    target_number = generate_random_number()
    # 调试用:打印目标数
    # print(f"调试:目标数是 {target_number}")
    difficulty = get_valid_difficulty()
    total_attempts = 10 if difficulty == "easy" else 5
    play_game(target_number, total_attempts)

优化说明

  1. 消除重复代码:把原代码中easy和hard模式的重复逻辑全部整合到play_game函数中,通过传入不同的次数参数实现模式区分
  2. 职责单一:每个函数只做一件事,比如get_valid_guess只负责获取合法的数字输入,check_guess只负责判断猜测结果
  3. 容错性提升:新增了无效难度输入的处理,确保用户必须输入合法选项才能继续游戏
  4. 可读性增强:函数名和注释清晰表达了每个模块的功能,代码逻辑一目了然

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:45:33