实验二 计算器设计

学号 20253318 《Python程序设计》实验二报告

课程:《Python程序设计》
班级: 3318
姓名: 刘培德
学号: 20253318
实验教师:王志强
实验日期:2026年4月13日
必修/选修: 公选课

1.实验内容

此处填写实验的具体内容;
(1)编写计算器程序
设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
考核基本语法、判定语句、循环语句、逻辑运算等知识点。
(2)用LLM生成一个计算器程序

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

2. 实验过程及结果

此处填写实验的过程及结果
(1)直接展示代码
学生手写

  import math
  def jisuan(i):
      char = input("请输入想要进行的运算(+,-,*,/,%,//,log,pow,sqrt,三角函数)\n")

      # 处理三角函数
      if char == "三角函数":
          sita = float(input("请输入你要进行三角函数的角度(弧度制)\n"))
          fuhao = input("请输入你要进行的三角运算(sin,cos,tan,asin,acos,atan)\n")

          if fuhao == "sin":
              result = math.sin(sita)
          elif fuhao == "cos":
              result = math.cos(sita)
          elif fuhao == "tan":
              result = math.tan(sita)
          elif fuhao == "asin":
              if -1 <= sita <= 1:
                  result = math.asin(sita)
              else:
                  print("asin的定义域是[-1,1]哦!!!!")
                  return
          elif fuhao == "acos":
              if -1 <= sita <= 1:
                  result = math.acos(sita)
              else:
                  print("acos的定义域是[-1,1]哦!!!!")
                  return
          elif fuhao == "atan":
              result = math.atan(sita)
          else:
              print("你在耍我吗,好好输入三角运算")
              return

          print(f"第{i + 1}次计算的结果是{result}\n")
          return

      # 处理其他运算
      a = eval(input("请输入第一个数字\n"))
      b = eval(input("请输入第二个数字\n"))

      if char == '+':
          result = a + b
      elif char == '-':
          result = a - b
      elif char == '*':
          result = a * b
      elif char == '/':
          if b != 0:
              result = round(a / b, 4)
          else:
              print("分母不能为零哦!!!!!!\n")
              return
      elif char == '%':
          result = a % b
      elif char == "//":
          result = a // b
      elif char == "log":
          if a <= 0 or b <= 0 or b == 1:
              print("真数和底数必须大于0,且底数不能为1哦!!!!")
              return
          result = math.log(a, b)  # log_b(a)
      elif char == "pow":
          result = pow(a, b)
      elif char == "sqrt":
          if a < 0:
              print("负数不能开平方根哦!!!!")
              return
          result = math.sqrt(a)
      else:
          print("你在耍我吗,好好输入")
          return

      print(f"第{i + 1}次计算的结果是{result}\n")


  print("欢迎来到dky版计算机")

  while True:
      t = int(input("请输入你要计算的个数\n"))
      for i in range(t):
          jisuan(i)
      i_f = input("你还要继续运算吗?(T or F)\n")
      if i_f == 'F':
          print("加纳,记得给五星好评\n")
          break

LLM生成

# 存储历史记录
history = []

print("=" * 50)
print("简易计算器".center(50))
print("=" * 50)
print("支持运算:+  -  *  /  %")
print("输入 'history' 查看历史记录")
print("输入 'quit' 退出程序")
print("=" * 50)

while True:
    print("\n" + "-" * 30)

    # 获取输入
    num1 = input("请输入第一个数字:")

    if num1 == 'quit':
        print("\n谢谢使用!")
        break
    elif num1 == 'history':
        if history:
            print("\n历史记录:")
            for i, record in enumerate(history, 1):
                print(f"{i}. {record}")
        else:
            print("暂无历史记录")
        continue

    op = input("请输入运算符(+ - * / %):")

    if op == 'quit':
        break
    elif op == 'history':
        if history:
            print("\n历史记录:")
            for i, record in enumerate(history, 1):
                print(f"{i}. {record}")
        else:
            print("暂无历史记录")
        continue

    num2 = input("请输入第二个数字:")

    if num2 == 'quit':
        break

    # 转换数字
    try:
        a = float(num1)
        b = float(num2)
    except ValueError:
        print("❌ 请输入有效的数字!")
        continue

    # 计算
    if op == '+':
        result = a + b
        expr = f"{a} + {b} = {result}"
    elif op == '-':
        result = a - b
        expr = f"{a} - {b} = {result}"
    elif op == '*':
        result = a * b
        expr = f"{a} × {b} = {result}"
    elif op == '/':
        if b == 0:
            print("❌ 除数不能为0!")
            continue
        result = a / b
        result = round(result, 2)  # 保留2位小数
        expr = f"{a} ÷ {b} = {result}"
    elif op == '%':
        if b == 0:
            print("❌ 除数不能为0!")
            continue
        result = a % b
        expr = f"{a} % {b} = {result}"
    else:
        print("❌ 不支持的运算符!")
        continue

    # 显示结果并保存历史
    print(f"\n✅ 计算结果:{expr}")
    history.append(expr)

    # 询问是否继续
    print("\n" + "-" * 30)
    again = input("继续计算?(直接回车继续 / n退出):")
    if again.lower() == 'n':
        print("\n谢谢使用!")
        if history:
            print("\n本次计算历史:")
            for i, record in enumerate(history, 1):
                print(f"{i}. {record}")
        break`

(2)对我代码功能的介绍:
主要是让用户来决定进行输入的次数并进行计算
主要可以进行加减乘除,取模向下除法,三角函数,次方运算
(3)对LLM代码和我个人所写代码的对比:
LLM甚至记录了用户的历史计算情况,这一点天牛逼了
并且这个代码可以随时退出,我的代码需要提前了解自己所需要计算的次数
不过我觉得LLM对于特殊情况的处理太过复杂,代码太长了

3. 实验过程中遇到的问题和解决过程

  • 问题1:在课上对于print函数使用的方法没记清楚(括号和f)
  • 问题1解决方案:用ai进行解答并总结
  • 问题2:在调试的时候发现除法后面位数太多,但是有不会进行保留小数
  • 问题2解决方案:自己试出来了(doge)
  • 问题3:我没有考虑到分母为0的情况
  • 问题3解决方案:最后看ai的代码发现了这个问题

其他(感悟、思考等)

确实是学习到了ai的一些思路,并且由于个人大竞赛的原因总是需要提前告诉我数据的组数,这样就会让我从来不思考如何随时停下代码功能

参考资料

代码网址

posted @ 2026-04-13 19:51  秋风悲扇L  阅读(53)  评论(0)    收藏  举报