20253332 实验二《Python程序设计》实验报告

20253332 2025-2026-2 《Python程序设计》实验2报告
课程:《Python程序设计》
班级: 2533
姓名: 向家沣
学号:20253332
实验教师:王志强
实验日期:2026年4月13日
必修/选修: 公选课

📑 文章目录

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

屏幕截图 2026-04-13 192832
2.1.3自写程序功能说明:

  1. 用tuple(不可变序列)存储运算符号,因为运算符号固定不变,适合用不可变序列存储,避免误修改;

  2. 用list(可变序列)存储运算历史,运用append操作添加运算记录,实现序列的存储和动态添加功能;

  3. 用range遍历序列,输出运算历史,运用了序列的遍历用法,完全贴合已学知识;

  4. 用“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运行结果

屏幕截图 2026-04-13 193205

2.2.3LM生成程序分析:

  1. 用list(可变序列)存储运算符号、运算说明和运算历史,运用append操作添加运算记录,实现序列的动态存储功能;

  2. 用range遍历序列,输出运算符号说明和运算历史,运用了序列的遍历用法,和自写程序的遍历方式一致;

  3. 用“op not in operators_list”判断运算符号合法性,运用了序列的基础判断功能,逻辑简单易懂;

  4. 运算逻辑和自写程序一致,都是用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

屏幕截图 2026-04-13 200817

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的存储、添加、遍历等操作,为后续学习打下坚实的基础。

参考资料

《程序设计与数据结构教程(第二版)》

《程序设计与数据结构教程(第二版)》学习指导

...

posted @ 2026-04-13 20:37  向家沣  阅读(20)  评论(1)    收藏  举报
LOADING