20242219 《Python 程序设计》实验2报告

20242219 2025-2026-2 《Python程序设计》实验二报告

课程:《Python程序设计》
班级: 2422
姓名: 陈儒俊
学号: 20242219
实验教师:王志强
实验日期:2026年4月13日
必修/选修: 公选课

1.实验内容

(1)编写计算器程序

设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
考核基本语法、判定语句、循环语句、逻辑运算等知识点。
(2)用LLM生成一个计算器程序

介绍相关功能,并分析生成的程序代码含义。
对比分析自写程序与生成程序的区别(好与坏)。

2. 实验过程及结果

2.1 手动编写双模式计算器程序

开发思路

  1. 双模式设计
    • 普通模式:用户自主选择运算,输入数字完成计算。
    • 刺激模式:输入两个数字,系统随机运算,用户猜测运算类型,实现互动趣味效果。
  2. 功能封装:使用函数封装加法、减法、乘法、除法、开方、指数、对数、取余等运算。
  3. 循环运行:支持连续计算/连续游戏,不退出程序。
  4. 输入处理:使用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("无效模式!")

运行结果如下
image

运行结果

程序成功运行,实现普通计算+刺激猜谜双模式:

  • 普通模式:可完成加减乘除、开方、指数、对数、取余运算,支持连续计算。
  • 刺激模式:输入数字→系统随机运算→用户猜运算→判断对错→选择是否继续,互动性强。
  • 程序可正常退出,无崩溃情况。

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}")

运行结果如下:
image

生成代码功能与分析

  1. 功能:支持加减乘除、取余、指数、平方根、绝对值、取反、对数,支持上一次结果连续计算,异常处理完善。
  2. 结构
    • 函数封装运算,逻辑清晰。
    • 区分单目运算(一个数)和双目运算(两个数)。
    • 使用try-except捕获所有异常,程序稳定性高。
  3. 亮点:界面美观、容错性强、支持连续计算、代码规范。

2.3 自写程序 VS LLM生成程序 对比分析

对比维度 自写双模式计算器 LLM生成多功能计算器
核心功能 普通计算 + 刺激猜谜双模式,趣味化 纯工具型计算,功能全面
创新点 引入随机运算+猜谜模式,互动性强 支持上一次结果连续计算
代码结构 简单直接,逻辑贴合个人思路 规范标准,模块化清晰
异常处理 无专门异常处理,输入错误会崩溃 完善异常捕获,除数为0、负数开方等均有提示
交互体验 界面简洁,模式新颖好玩 界面美观,提示清晰,用户友好
编写难度 低,易理解、易修改 中,代码更严谨、扩展性强
适用场景 学习、娱乐、趣味互动 实用、稳定、日常计算

核心结论

  • 自写程序创意优先,双模式设计独特,适合练习编程思维,但健壮性不足。
  • LLM生成程序实用优先,代码规范、异常处理完善、功能专业,但缺乏创意。

2.4 代码托管至码云

  1. 登录码云,创建公开仓库。
  2. 上传手动编写的双模式计算器代码。
  3. 仓库可公开访问,完成实验要求的代码托管。

托管结果

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则跳出循环,退出游戏。

其他(感悟、思考等)

  1. 本次实验我独立设计了双模式计算器,不仅巩固了函数、循环、判断等基础语法,还学会了使用random库实现趣味功能。
  2. 通过对比自写代码与LLM生成代码,我明白了:自己写代码锻炼逻辑与创意,AI生成代码学习规范与健壮性,两者结合进步最快。
  3. 异常处理是程序的“安全防护”,完善的异常处理能让程序更稳定、用户体验更好。
  4. 代码托管(码云)是非常好的开发习惯,可以保存代码、方便分享,也为后续团队项目打下基础。
  5. 编程不只是完成功能,还可以加入创意,让程序更好玩、更有个性。
posted @ 2026-04-14 14:05  这是昵称。。。  阅读(5)  评论(0)    收藏  举报