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

Python函数清晰度与效率提升:猜数字游戏代码优化咨询

猜数字Python代码重构优化方案

原代码存在缩进错误、逻辑bug、无输入校验、递归风险、可读性差等问题,以下是修复重构后的完整可运行版本,以及对应优化说明。

重构后完整代码

import random

def get_valid_int_input(prompt, error_tip="输入无效,请输入整数!"):
    """循环获取用户输入的合法整数值,避免非数字输入导致程序崩溃"""
    while True:
        input_content = input(prompt).strip()
        if input_content.lstrip('-').isdigit():
            return int(input_content)
        print(error_tip)

def guess_number_game():
    while True:
        # 获取并校验游戏配置参数
        lower_bound = get_valid_int_input("请输入数字范围下界:")
        upper_bound = get_valid_int_input("请输入数字范围上界:")
        # 自动修正上下界颠倒的问题
        if lower_bound > upper_bound:
            lower_bound, upper_bound = upper_bound, lower_bound
            print(f"检测到上下界输入颠倒,已自动调整为范围 {lower_bound} - {upper_bound}")
        
        max_trials = get_valid_int_input("请输入最大猜测次数:", "输入无效,请输入正整数作为次数!")
        while max_trials <= 0:
            max_trials = get_valid_int_input("猜测次数必须大于0,请重新输入:", "输入无效,请输入正整数作为次数!")

        # 生成目标数字
        target_num = random.randint(lower_bound, upper_bound)
        guess_count = 0
        win_flag = False
        print(f"\n游戏开始!请在{max_trials}次内猜出{lower_bound}-{upper_bound}之间的数字")

        # 单局猜数字循环
        while guess_count < max_trials:
            remain_times = max_trials - guess_count
            current_guess = get_valid_int_input(f"剩余尝试次数:{remain_times},请输入你猜的数字:")
            guess_count += 1

            if current_guess == target_num:
                win_flag = True
                print(f"恭喜猜对了!你总共用了{guess_count}次")
                break
            elif current_guess > target_num:
                print("猜大了,正确数字比这个小")
            else:
                print("猜小了,正确数字比这个大")
        
        if not win_flag:
            print(f"很遗憾,你用完了所有尝试次数,正确数字是{target_num}")

        # 询问是否重开
        while True:
            continue_choice = input("是否继续游戏?(输入Yes继续,输入No退出):").strip().lower()
            if continue_choice in ["yes", "y"]:
                print("\n" + "="*30 + "\n")
                break
            elif continue_choice in ["no", "n"]:
                return "感谢游玩!"
            else:
                print("输入无效,请输入Yes或No选择")

if __name__ == "__main__":
    print(guess_number_game())

主要优化点说明

  • 修复核心逻辑bug:修正原代码缩进错误、count +=1放在循环外不生效、第一次猜测不计入次数、递归调用重开导致栈溢出的问题
  • 增加输入鲁棒性:所有用户输入都加合法性校验,输入非数字、范围无效、次数为0/负数、重开选项输入错误时都会提示重输,不会直接崩溃
  • 优化代码结构:拆分通用的整数输入校验为独立函数,避免重复代码;用双层循环分别处理「游戏重开」和「单局猜测」逻辑,结构清晰;把原函数名random_num改为guess_number_game,符合函数实际功能,见名知意
  • 提升可读性:用f-string替代原有的+字符串拼接写法,代码更简洁;统一4空格缩进规范,拆分过长的代码行
  • 优化使用体验:自动修正上下界颠倒的问题,每次猜测显示剩余次数,支持输入y/yes、n/no快速选择重开/退出
  • 符合Python编码规范:增加if __name__ == "__main__":程序入口,避免导入模块时自动执行游戏逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:54:28