20253332 实验二《Python程序设计》实验报告
20253332 2025-2026-2 《Python程序设计》实验2报告
课程:《Python程序设计》
班级: 2533
姓名: 向家沣
学号:20253332
实验教师:王志强
实验日期:2026年4月13日
必修/选修: 公选课
📑 文章目录
- 1. 实验内容
- 2. 实验过程及结果
- 3. 实验过程中遇到的问题和解决过程
- 4. 其他(感悟、思考等)
- 5. 参考资料
1.实验内容
(1)编写计算器程序
设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
考核基本语法、判定语句、循环语句、逻辑运算等知识点。
(2)用LLM生成一个计算器程序
介绍相关功能,并分析生成的程序代码含义。
对比分析自写程序与生成程序的区别(好与坏)。
2. 实验过程及结果
2.1计算机
2.1.1实验准备
本次实验使用Python 3.9版本和PyCharm工具,创建工程项目“Calculator_Experiment”,新建主程序文件calculator.py,重点运用已学的list(可变序列)和tuple(不可变序列)知识点,完成程序编写和调试,最后将代码托管到码云。
2.1.2自写计算器程序
自写程序具体代码如下:
print("=" * 30)
print(" Python计算器(实验二)")
operators = ('+', '-', '', '/', '%')
print(f"支持运算:{operators}(加、减、乘、除、取模)")
print("输入'q'可退出程序")
print("=" * 30)
history = []
while True:
num1_input = input("请输入第一个数字:")
if num1_input.lower() == 'q':
print("程序已退出,感谢使用!")
if history:
print("本次运算历史:")
for i in range(len(history)):
print(f"{i + 1}. {history[i]}")
break
try:
num1 = float(num1_input)
except ValueError:
print("输入错误!请输入有效的数字(整数或小数)。")
continue
operator = input(f"请输入运算符号(只能是{operators}):")
if operator not in operators:
print("运算符号错误!请重新输入。")
continue
num2_input = input("请输入第二个数字:")
if num2_input.lower() == 'q':
print("程序已退出,感谢使用!")
if history:
print("本次运算历史:")
for i in range(len(history)):
print(f"{i + 1}. {history[i]}")
break
try:
num2 = float(num2_input)
except ValueError:
print("输入错误!请输入有效的数字(整数或小数)。")
continue
result = 0
if operator == '+':
result = num1 + num2
elif operator == '-':
result = num1 - num2
elif operator == '':
result = num1 * num2
elif operator == '/':
if num2 == 0:
print("错误!除数不能为0,请重新输入。")
continue
result = num1 / num2
elif operator == '%':
if num2 == 0:
print("错误!除数不能为0,请重新输入。")
continue
result = num1 % num2
result_str = f"{num1} {operator} {num2} = {round(result, 2)}"
print(result_str)
history.append(result_str)
continue_flag = input("是否继续运算?(y/n):")
if continue_flag.lower() != 'y':
print("程序已退出,感谢使用!")
if history:
print("本次运算历史:")
for i in range(len(history)):
print(f"{i + 1}. {history[i]}")
break

2.1.3自写程序功能说明:
-
用tuple(不可变序列)存储运算符号,因为运算符号固定不变,适合用不可变序列存储,避免误修改;
-
用list(可变序列)存储运算历史,运用append操作添加运算记录,实现序列的存储和动态添加功能;
-
用range遍历序列,输出运算历史,运用了序列的遍历用法,完全贴合已学知识;
-
用“operator not in operators”判断运算符号是否合法,运用了序列的基础判断功能;
运行结果:程序可正常启动,输入有效数字和运算符号后,能正确输出运算结果;输入错误时会给出提示,可正常退出程序并输出运算历史,无报错,调试运行成功。
2.2 LLM生成计算器程序
2.2.1使用豆包编写程序
用LLM生成计算器程序,提示词为“用Python编写计算器,只运用list、tuple序列知识点,实现加减乘除、取模运算,无复杂语法,逻辑简单”,生成的代码如下:
print("=" * 30)
print(" Python计算器(LLM生成)")
operators_list = ['+', '-', '', '/', '%']
operator_des = ['加法', '减法', '乘法', '除法', '取模']
print("支持运算:")
for i in range(len(operators_list)):
print(f"{operators_list[i]}:{operator_des[i]}")
print("输入'q'可退出程序")
print("=" * 30)
history_list = []
while True:
num1_str = input("请输入第一个数字:")
if num1_str == 'q':
print("程序已退出!")
if history_list:
print("运算历史:")
for i in range(len(history_list)):
print(f"{i + 1}. {history_list[i]}")
break
try:
num1 = float(num1_str)
except ValueError:
print("输入错误,请输入数字!")
continue
op = input("请输入运算符号(+、-、、/、%):")
if op not in operators_list:
print("运算符号错误,请重新输入!")
continue
num2_str = input("请输入第二个数字:")
if num2_str == 'q':
print("程序已退出!")
if history_list:
print("运算历史:")
for i in range(len(history_list)):
print(f"{i + 1}. {history_list[i]}")
break
try:
num2 = float(num2_str)
except ValueError:
print("输入错误,请输入数字!")
continue
res = 0
if op == '+':
res = num1 + num2
elif op == '-':
res = num1 - num2
elif op == '*':
res = num1 * num2
elif op == '/':
if num2 == 0:
print("除数不能为0,请重新输入!")
continue
res = num1 / num2
elif op == '%':
if num2 == 0:
print("除数不能为0,请重新输入!")
continue
res = num1 % num2
res_str = f"{num1} {op} {num2} = {round(res, 2)}"
print(res_str)
history_list.append(res_str)
again = input("继续运算?(y/n):")
if again.lower() != 'y':
print("程序已退出!")
if history_list:
print("运算历史:")
for i in range(len(history_list)):
print(f"{i + 1}. {history_list[i]}")
break
2.2.2运行结果

2.2.3LM生成程序分析:
-
用list(可变序列)存储运算符号、运算说明和运算历史,运用append操作添加运算记录,实现序列的动态存储功能;
-
用range遍历序列,输出运算符号说明和运算历史,运用了序列的遍历用法,和自写程序的遍历方式一致;
-
用“op not in operators_list”判断运算符号合法性,运用了序列的基础判断功能,逻辑简单易懂;
-
运算逻辑和自写程序一致,都是用if-elif判定,无任何复杂语法,完全贴合已学的序列和基础语法。
运行结果:生成的程序可正常运行,能正确执行运算、存储运算历史,输入错误时会给出提示,无报错,调试运行成功。
2.3 自写程序与LLM生成程序对比
序列运用:
自写程序 用tuple(不可变序列)存储运算符号,list(可变序列)存储运算历史,仅运用两种序列的基础存储、添加、遍历功能;
LLM生成程序 只用list(可变序列)存储运算符号、说明和历史,运用序列的遍历、添加功能,未使用tuple
序列操作:
自写程序 运用append添加历史、range遍历序列,操作简单,贴合刚学的序列基础用法;
LLM生成程序 运用append添加历史、range遍历序列,还多了序列的对应遍历(运算符号和说明对应),操作更丰富一点
代码逻辑:
自写程序 逻辑简单,完全贴合已学知识,序列操作少而精,容易理解;
LLM生成程序 逻辑和自写程序一致,序列运用更全面,但未超出序列基础知识点
可读性:
自写程序 简单易懂,序列操作直观,适合刚学到序列的水平;
LLM生成程序 序列运用稍多,但逻辑不复杂,能快速看懂
2.4 代码托管结果
已创建码云仓库,初始托管时仅显示之前的旧文件,未显示刚编辑的自写计算器程序和LLM生成程序,后续已排查并解决该问题,将两个刚编辑的程序文件成功提交至码云仓库,确保所有实验相关代码可正常克隆、运行,仓库地址已记录,可随时供老师查看。
https://gitee.com/xiangjifeng/python_-calculator_-experiment

3. 实验过程中遇到的问题和解决过程
问题1:编写程序时,不知道如何用序列存储运算历史,不会用append操作添加历史记录。
问题1解决方案:回忆课堂上学的list序列知识点,知道list是可变序列,可通过append操作添加元素,于是用list定义运算历史,每次运算完成后,用history.append(result_str)将结果添加到序列中,解决了序列存储和添加的问题。
问题2:遍历序列输出运算历史时,不会用range遍历,不知道如何获取序列中的每个元素。
问题2解决方案:查阅课堂笔记,记住range(len(序列))可以遍历序列,通过for i in range(len(history)),获取序列的索引,再用history[i]获取每个运算历史,成功实现序列遍历。
其他(感悟、思考等)
本次实验让我进一步巩固了序列(list、tuple)的知识点,学会了用list和tuple存储数据、用append添加元素、用range遍历序列,也掌握了循环、判定语句和加减乘除、取模运算的基本用法。
通过自主编写程序,我学会了根据需求选择合适的序列:固定不变的数据(运算符号)用tuple(不可变序列)存储,需要动态添加的数据(运算历史)用list(可变序列)存储,加深了对两种序列区别的理解。
对比自写程序和LLM生成程序,我发现序列的用法有很多种,不管是只用list,还是结合list和tuple,只要贴合需求、运用已学的序列操作,就能完成程序功能。这次实验也让我明白,编程需要多练习、多调试,遇到不懂的问题,通过查阅笔记、调试代码,就能慢慢解决,同时也培养了我的逻辑思维和问题解决能力。
后续我会加强序列知识点的练习,熟练掌握list、tuple的存储、添加、遍历等操作,为后续学习打下坚实的基础。
参考资料
《程序设计与数据结构教程(第二版)》
《程序设计与数据结构教程(第二版)》学习指导
...

浙公网安备 33010602011771号