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
相关产品推荐
相关产品推荐

