20242219 《Python程序设计》实验1报告
20242219 2025-2026-2 《Python程序设计》实验1报告
课程:《Python程序设计》
班级: 2422
姓名: 陈儒俊
学号:20242219
实验教师:王志强
实验日期:2026年3月23日
必修/选修: 公选课
1.实验内容
1.熟悉Python开发环境;
介绍Python开发环境的各项功能。
2.练习Python运行、调试技能;
编写书中的程序,并进行调试分析,要有过程(运行需要截图、调试需要截图)。
3.编写程序,练习变量和类型、字符串、对象、缩进和注释等;
编写一个猜数字的游戏。
4.利用LLM生成猜数字的游戏。
运行并给出相应的截图。
对比你写的Python程序,分析LLM生成代码的优点,至少写3个。
5. 掌握git技能
需要把编写的代码托管到Gitee上,给出托管过程和结果,并在此放上链接(Markdown格式)
2. 实验过程及结果
2.1 熟悉Python开发环境
工具:PyCharm
运行环境:Windows/Linux
核心功能:代码编辑(语法高亮、自动补全)、可视化调试、项目管理、Git集成、插件扩展
2.2 Python运行与调试技能练习
以猜数字游戏代码为例,完成多工具调试:
- 调试:在循环入口行设置断点,通过“Step Over”(F8)逐行执行,实时查看
usernumber、low、high等变量值,同时可以查看rabot的值 - 调试结果:
![屏幕截图 2026-03-23 211946]()
2.3 猜数字游戏程序编写
完整代码
import random
print("欢迎来到比赛猜数字游戏!你能赢我吗?")
print("\n游戏规则:")
print("1. 你需要输入一个数字范围,然后选择一个幸运数字(在范围内)")
print("2. 你和我(机器人)轮流猜测对方的数字")
print("3. 每次猜测后,对方会告诉你是大了、小了还是猜对了")
print("4. 谁先猜对对方的数字谁获胜")
print("5. 如果输入无效或不守规矩,会受到惩罚(猜测次数+1)")
print("\n准备好开始挑战了吗?")
while True:
try:
level = int(input("输入这次比赛猜的范围: "))
if level < 0:
print("范围不能为负数,请重新输入!")
continue
break
except ValueError:
print("请输入有效的数字!")
# 优化:增加幸运数字输入校验
while True:
try:
user = int(input(f"我想好了我的幸运数字,请输入你的幸运数字(0~{level}): "))
if 0 <= user <= level:
break
else:
print(f"数字超出范围(0~{level}),请重新输入!")
except ValueError:
print("请输入有效的数字!")
robot = random.randint(0, level)
usernumber = 0 # 用户猜测次数
robotnumber = 0 # 机器人猜测次数
user_won = False # 用户获胜标记
robot_won = False # 机器人获胜标记
low = 0 # 机器人猜测下限
high = level # 机器人猜测上限
print("\n游戏比赛开始了!")
while not user_won and not robot_won:
# 用户猜测回合
print("\n你的回合,我的数字是什么?")
try:
userguess = int(input("请输入你的猜测: "))
usernumber += 1
if userguess > robot:
print("没猜对小老弟,大了!")
elif userguess < robot:
print("没猜对小老弟,小了!")
else:
print("不错嘛,猜对了!")
user_won = True
except ValueError:
print("怎么回事小老弟,不守规矩,得给你点惩罚,你的猜测次数+1!!!")
usernumber += 1
# 机器人猜测回合(用户未获胜时执行)
if not user_won:
print("\n哈哈,到我了!")
robot_guess = (low + high) // 2
print(f"我猜你的数字是:{robot_guess} 对不对,小老弟?")
# 优化:增加输入选项校验
while True:
usernum = input("如果大了,输入1,如果小了,输入2,如果对了,输入3: ")
if usernum in ["1", "2", "3"]:
break
else:
print("输入无效!请输入1、2或3!")
robotnumber += 1
if usernum == "1":
if robot_guess > user:
high = robot_guess - 1
else:
print("小老弟,不守规矩,得给你点惩罚,你的猜测次数+1!!!")
usernumber += 1
elif usernum == "2":
if robot_guess < user:
low = robot_guess + 1
else:
print("小老弟,不守规矩,得给你点惩罚,你的猜测次数+1!!!")
usernumber += 1
elif usernum == "3":
if robot_guess == user:
print("我猜的数字对了!")
robot_won = True
else:
# 修复:删除重复提示
print("小老弟,不守规矩,得给你点惩罚,你的猜测次数+1!!!")
usernumber += 1
# 游戏结束,显示结果
print("\n游戏结束!")
print(f"你的猜测次数: {usernumber}")
print(f"机器人的猜测次数: {robotnumber}")
if user_won and robot_won:
print("平局!再接再厉!")
elif user_won:
print("不错嘛,恭喜你赢了!")
elif robot_won:
print("我赢了,你还得练,再来一局吧!")
运行结果示例

2.4 LLM生成猜数字游戏代码(豆包生成)
豆包生成的猜数字游戏代码
"""
猜数字游戏 - 豆包LLM生成版本
功能:支持自定义数字范围,人机双向猜数,带友好提示和异常处理
遵循PEP8编码规范,模块化设计,便于扩展和维护
"""
import random
def init_game():
"""初始化游戏参数,获取用户设定的数字范围和幸运数字"""
print("🎮 欢迎来到智能猜数字游戏(豆包版)🎮")
# 获取合法的数字范围
while True:
try:
max_num = int(input("\n请设定猜数字的最大范围(正整数):"))
if max_num <= 0:
print("❌ 范围必须是正整数,请重新输入!")
continue
break
except ValueError:
print("❌ 输入无效!请输入有效的整数!")
# 获取用户的幸运数字
while True:
try:
user_secret = int(input(f"请输入你的幸运数字(1~{max_num}):"))
if 1 <= user_secret <= max_num:
break
else:
print(f"❌ 数字超出范围!请输入1~{max_num}之间的数字!")
except ValueError:
print("❌ 输入无效!请输入有效的整数!")
# 生成机器人的幸运数字
robot_secret = random.randint(1, max_num)
print(f"\n✅ 游戏初始化完成!机器人已生成1~{max_num}之间的幸运数字,开始对战!")
return max_num, user_secret, robot_secret
def user_guess_round(robot_secret):
"""用户猜测回合,返回是否猜对、用户猜测次数"""
guess_count = 0
while True:
try:
user_guess = int(input("\n🔍 你的回合:猜猜机器人的幸运数字是多少?"))
guess_count += 1
if user_guess > robot_secret:
print("⬇️ 猜大了!再往小了猜猜~")
elif user_guess < robot_secret:
print("⬆️ 猜小了!再往大了猜猜~")
else:
print(f"🎉 恭喜你!猜对了!你一共猜了{guess_count}次!")
return True, guess_count
except ValueError:
print("❌ 输入错误!请输入有效的整数,本次不计入次数~")
continue
def robot_guess_round(user_secret, max_num):
"""机器人猜测回合,使用二分法优化猜测效率,返回是否猜对、机器人猜测次数"""
guess_count = 0
low, high = 1, max_num
while low <= high:
guess_count += 1
robot_guess = (low + high) // 2
print(f"\n🤖 机器人的回合:我猜你的幸运数字是 {robot_guess}!")
# 获取用户反馈并校验
while True:
feedback = input("请反馈(大了输1/小了输2/猜对了输3):")
if feedback not in ["1", "2", "3"]:
print("❌ 反馈无效!请输入1、2或3!")
continue
break
if feedback == "1":
high = robot_guess - 1
elif feedback == "2":
low = robot_guess + 1
else:
if robot_guess == user_secret:
print(f"🤖 机器人猜对了!一共猜了{guess_count}次!")
return True, guess_count
else:
print("❌ 你反馈错误!机器人本次猜测不计入次数~")
guess_count -= 1
print("🤖 机器人无法猜出你的数字,你赢了!")
return False, guess_count
def main():
"""游戏主函数"""
max_num, user_secret, robot_secret = init_game()
user_win, user_count = False, 0
robot_win, robot_count = False, 0
# 游戏主循环
while not user_win and not robot_win:
# 用户猜测
user_win, user_count = user_guess_round(robot_secret)
if user_win:
break
# 机器人猜测
robot_win, robot_count = robot_guess_round(user_secret, max_num)
# 游戏结果展示
print("\n🏆 游戏结束 🏆")
print(f"你的猜测次数:{user_count}")
print(f"机器人的猜测次数:{robot_count}")
if user_win:
print("🥳 你获得了胜利!")
else:
print("😜 机器人获得了胜利!")
if __name__ == "__main__":
main()
豆包生成代码的优点分析
- 模块化与结构化更强:将游戏拆分为
init_game()、user_guess_round()、robot_guess_round()、main()等函数,每个函数仅负责单一功能,代码复用性和扩展性远高于自研的线性代码(比如新增“多轮游戏”功能只需修改main函数); - 用户体验与容错性更优:豆包生成的代码对所有输入(范围、猜测值、反馈)都做了严格校验,且无效输入不计入次数(而非自研代码的“惩罚机制”),提示信息增加了可视化符号(🎮、❌、🎉),更符合用户使用习惯;
- 逻辑优化更合理:机器人猜测环节优化了二分法逻辑,增加“反馈错误校验”,避免用户恶意反馈导致逻辑混乱,相比自研代码的简单二分法更健壮;
- 编码规范与可读性更高:代码完全遵循PEP8规范,包含清晰的文档字符串和功能注释,变量命名(如
user_secret、robot_guess)语义化更强,自研代码的usernumber、usernum等命名易混淆。
2.5 Git技能与Gitee托管
托管过程
- 环境配置(Windows+OpenEuler):
- 安装Git:Windows直接安装,OpenEuler执行
yum install git -y; - 配置用户信息:
git config --global user.name "XXX"、git config --global user.email "xxx@xxx.com";
- 安装Git:Windows直接安装,OpenEuler执行
- 本地操作:
mkdir code && cd code # 创建并进入文件夹 git init # 初始化仓库 git add guess_number.py doubao_guess_number.py # 添加自研+豆包生成的代码文件 git commit -m "实验一:猜数字游戏(自研+豆包LLM生成)" # 提交代码 - Gitee关联与推送:
- 在Gitee创建仓库
code; - 关联远程仓库:
git remote add origin https://gitee.com/Mr-Men_door/code; - 推送代码:
git push -u origin master;
- 在Gitee创建仓库
- 服务器验证:OpenEuler执行
git clone https://gitee.com/Mr-Men_door/code,克隆后运行代码验证正常。
托管结果
Gitee仓库链接:https://gitee.com/Mr-Men_door/code
3. 实验过程中遇到的问题和解决过程
- 问题1:自研代码中用户输入非数字时直接崩溃,无异常处理;
问题1解决方案:添加try-except捕获ValueError,并对数字范围/幸运数字增加循环校验,确保输入合法; - 问题2:机器人猜测逻辑中
low变量通过locals()判断,调试时出现未定义警告;
问题2解决方案:提前初始化low=0、high=level,删除locals()判断,简化逻辑; - 问题3:Git推送代码时出现“Authentication failed”错误;
问题3解决方案:改用Gitee个人访问令牌(Settings->私人令牌)作为密码,或配置SSH密钥登录,重新推送成功; - 问题4:OpenEuler服务器VIM编辑代码时中文乱码;
问题4解决方案:在~/.vimrc中添加set fileencodings=utf-8,gbk和set encoding=utf-8,重启VIM后正常显示。
其他(感悟、思考等)
- 对比自研和豆包生成的代码,发现结构化、规范化编程的重要性——豆包能快速生成高质量、高可用性的代码,但其核心逻辑(如二分法猜数)仍基于基础编程知识,自研过程是理解底层逻辑的关键,二者结合才能真正提升编程能力;
- Git版本控制是编程必备技能,不仅能备份代码,还能实现多环境同步,避免代码丢失,也为后续协作开发打下基础;
- 实验中遇到的异常处理、字符编码、Git认证等问题,让我认识到编程不仅是写功能,还要考虑鲁棒性、环境适配等细节,实践是掌握编程的核心。


浙公网安备 33010602011771号