20242219 《Python 程序设计》实验2报告
20242219 2025-2026-2 《Python程序设计》实验二报告
课程:《Python程序设计》
班级: 2422
姓名: 陈儒俊
学号: 20242219
实验教师:王志强
实验日期:2026年4月13日
必修/选修: 公选课
1.实验内容
(1)编写计算器程序
设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
考核基本语法、判定语句、循环语句、逻辑运算等知识点。
(2)用LLM生成一个计算器程序
介绍相关功能,并分析生成的程序代码含义。
对比分析自写程序与生成程序的区别(好与坏)。
2. 实验过程及结果
2.1 手动编写双模式计算器程序
开发思路
- 双模式设计:
- 普通模式:用户自主选择运算,输入数字完成计算。
- 刺激模式:输入两个数字,系统随机运算,用户猜测运算类型,实现互动趣味效果。
- 功能封装:使用函数封装加法、减法、乘法、除法、开方、指数、对数、取余等运算。
- 循环运行:支持连续计算/连续游戏,不退出程序。
- 输入处理:使用eval()函数简化数字输入,直接解析用户输入内容。
完整代码
import math
import random
# 定义运算函数
def add(a, b):
return a + b
def sub(a, b):
return a - b
def mul(a, b):
return a * b
def div(a, b):
return a / b
def sqrt(a):
return math.sqrt(a)
def power(a, b):
return a ** b
def log(a):
return math.log(a)
def mod(a, b):
return a % b
# 主程序
print("欢迎使用简单且刺激的计算器")
mode = int(input("请选择你的模式:1. 普通计算 2. 刺激计算\n"))
# 普通计算模式
if mode == 1:
print("你选择了普通计算模式")
while True:
print("请输入第一个数字:")
a = eval(input())
print("请输入第二个数字:")
b = eval(input())
print("请选择要进行的操作:")
print("1. 加法")
print("2. 减法")
print("3. 乘法")
print("4. 除法")
print("5. 平方根")
print("6. 指数")
print("7. 对数")
print("8. 取余")
print("9. 退出")
print("请输入您的选择:")
choice = int(input())
if choice == 1:
print("结果是:", add(a, b))
elif choice == 2:
print("结果是:", sub(a, b))
elif choice == 3:
print("结果是:", mul(a, b))
elif choice == 4:
print("结果是:", div(a, b))
elif choice == 5:
print("结果是:", sqrt(a))
elif choice == 6:
print("结果是:", power(a, b))
elif choice == 7:
print("结果是:", log(a))
elif choice == 8:
print("结果是:", mod(a, b))
elif choice == 9:
print("退出普通模式")
break
else:
print("无效的选择,请重新输入\n")
# 刺激猜谜模式
elif mode == 2:
print("刺激计算模式开始了,你准备好了吗?")
while True:
print("请输入第一个数字:")
a = eval(input())
print("请输入第二个数字:")
b = eval(input())
# 随机选择运算
operations = [1, 2, 3, 4, 6, 8]
operation = random.choice(operations)
if operation == 1:
result = add(a, b)
correct_answer = "1"
elif operation == 2:
result = sub(a, b)
correct_answer = "2"
elif operation == 3:
result = mul(a, b)
correct_answer = "3"
elif operation == 4:
result = div(a, b)
correct_answer = "4"
elif operation == 6:
result = power(a, b)
correct_answer = "6"
elif operation == 8:
result = mod(a, b)
correct_answer = "8"
print("\n操作如下:")
print("1. 加法 2. 减法 3. 乘法 4. 除法")
print("5. 平方根 6. 指数 7. 对数 8. 取余")
print(f"\n结果是:{result}")
# 用户猜测
guess = input("请猜测使用了哪种运算:")
if guess == correct_answer:
print("恭喜你,猜对了!")
else:
print(f"很遗憾,猜错了。正确答案是:{correct_answer}")
# 是否继续
continue_choice = input("是否继续游戏?(y/n):")
if continue_choice.lower() != 'y':
print("退出刺激模式")
break
else:
print("无效模式!")
运行结果如下

运行结果
程序成功运行,实现普通计算+刺激猜谜双模式:
- 普通模式:可完成加减乘除、开方、指数、对数、取余运算,支持连续计算。
- 刺激模式:输入数字→系统随机运算→用户猜运算→判断对错→选择是否继续,互动性强。
- 程序可正常退出,无崩溃情况。
2.2 LLM生成的多功能计算器程序
生成代码
import math
def add(a, b):
return a + b
def sub(a, b):
return a - b
def mul(a, b):
return a * b
def div(a, b):
if b == 0:
return "错误:除数不能为 0"
return a / b
def mod(a, b):
if b == 0:
return "错误:模数不能为 0"
return a % b
def power(a, b):
return a ** b
def sqrt_num(a):
if a < 0:
return "错误:不能对负数开平方"
return math.sqrt(a)
def abs_num(a):
return abs(a)
def neg_num(a):
return -a
def log_num(a):
if a <= 0:
return "错误:对数必须大于 0"
return math.log(a)
# 主程序
print("=" * 40)
print(" 🌟 多功能计算器 🌟")
print("=" * 40)
last_result = None # 保存上一次结果,用于连续计算
while True:
print("\n【操作菜单】")
print("1. 加法 2. 减法")
print("3. 乘法 4. 除法")
print("5. 取余(%) 6. 指数(a^b)")
print("7. 平方根 8. 绝对值")
print("9. 取反(-x) 10. 自然对数")
print("11. 使用上一次结果计算")
print("0. 退出计算器")
try:
choice = input("\n请输入操作编号:")
if choice == "0":
print("👋 感谢使用,再见!")
break
# 使用上一次结果
if choice == "11":
if last_result is None:
print("❌ 暂无历史结果!")
continue
print(f"✅ 上一次结果 = {last_result}")
num1 = last_result
else:
num1 = float(input("请输入第一个数字:"))
# 单目运算(只需要一个数)
if choice in ["7", "8", "9", "10"]:
if choice == "7":
res = sqrt_num(num1)
elif choice == "8":
res = abs_num(num1)
elif choice == "9":
res = neg_num(num1)
elif choice == "10":
res = log_num(num1)
print(f"✅ 计算结果:{res}")
if isinstance(res, (int, float)):
last_result = res
continue
# 双目运算(需要两个数)
num2 = float(input("请输入第二个数字:"))
if choice == "1":
res = add(num1, num2)
elif choice == "2":
res = sub(num1, num2)
elif choice == "3":
res = mul(num1, num2)
elif choice == "4":
res = div(num1, num2)
elif choice == "5":
res = mod(num1, num2)
elif choice == "6":
res = power(num1, num2)
else:
print("❌ 无效输入,请重新选择!")
continue
print(f"✅ 计算结果:{res}")
# 保存合法结果用于下次计算
if isinstance(res, (int, float)):
last_result = res
except ValueError:
print("❌ 错误:请输入有效数字!")
except Exception as e:
print(f"❌ 程序异常:{e}")
运行结果如下:

生成代码功能与分析
- 功能:支持加减乘除、取余、指数、平方根、绝对值、取反、对数,支持上一次结果连续计算,异常处理完善。
- 结构:
- 函数封装运算,逻辑清晰。
- 区分单目运算(一个数)和双目运算(两个数)。
- 使用
try-except捕获所有异常,程序稳定性高。
- 亮点:界面美观、容错性强、支持连续计算、代码规范。
2.3 自写程序 VS LLM生成程序 对比分析
| 对比维度 | 自写双模式计算器 | LLM生成多功能计算器 |
|---|---|---|
| 核心功能 | 普通计算 + 刺激猜谜双模式,趣味化 | 纯工具型计算,功能全面 |
| 创新点 | 引入随机运算+猜谜模式,互动性强 | 支持上一次结果连续计算 |
| 代码结构 | 简单直接,逻辑贴合个人思路 | 规范标准,模块化清晰 |
| 异常处理 | 无专门异常处理,输入错误会崩溃 | 完善异常捕获,除数为0、负数开方等均有提示 |
| 交互体验 | 界面简洁,模式新颖好玩 | 界面美观,提示清晰,用户友好 |
| 编写难度 | 低,易理解、易修改 | 中,代码更严谨、扩展性强 |
| 适用场景 | 学习、娱乐、趣味互动 | 实用、稳定、日常计算 |
核心结论:
- 自写程序:创意优先,双模式设计独特,适合练习编程思维,但健壮性不足。
- LLM生成程序:实用优先,代码规范、异常处理完善、功能专业,但缺乏创意。
2.4 代码托管至码云
- 登录码云,创建公开仓库。
- 上传手动编写的双模式计算器代码。
- 仓库可公开访问,完成实验要求的代码托管。
托管结果
Gitee仓库链接:https://gitee.com/Mr-Men_door/code
3. 实验过程中遇到的问题和解决过程
-
问题1:刺激模式中,随机选择运算时逻辑混乱,答案对应错误
-
问题1解决方案:给每个运算绑定固定编号与正确答案,确保运算与答案一一对应。
-
问题2:输入非数字内容时,程序直接报错崩溃
-
问题2解决方案:学习LLM代码思路,使用
try-except捕获输入异常,优化程序稳定性。 -
问题3:开平方、对数输入负数/0时数学运算报错
-
问题3解决方案:在运算函数中增加判断,限制输入范围,提示输入错误。
-
问题4:普通模式每次都必须输入两个数字,单目运算(开方、对数)不合理
-
问题4解决方案:区分单目/双目运算,单目运算只输入一个数字。
-
问题5:刺激模式退出逻辑不清晰,无法正常结束游戏
-
问题5解决方案:增加
y/n判断,用户输入n则跳出循环,退出游戏。
其他(感悟、思考等)
- 本次实验我独立设计了双模式计算器,不仅巩固了函数、循环、判断等基础语法,还学会了使用
random库实现趣味功能。 - 通过对比自写代码与LLM生成代码,我明白了:自己写代码锻炼逻辑与创意,AI生成代码学习规范与健壮性,两者结合进步最快。
- 异常处理是程序的“安全防护”,完善的异常处理能让程序更稳定、用户体验更好。
- 代码托管(码云)是非常好的开发习惯,可以保存代码、方便分享,也为后续团队项目打下基础。
- 编程不只是完成功能,还可以加入创意,让程序更好玩、更有个性。

浙公网安备 33010602011771号