20243410 实验二 《Python程序设计》实验报告
20243410 2025-2026-2 《Python程序设计》实验二报告
课程:《Python程序设计》
班级: 2434
姓名: 陈懿慜
学号: 20243410
实验教师:王志强
实验日期:2026年4月13日
必修/选修: 公选课
1.实验内容
(1)编写计算器程序
设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
考核基本语法、判定语句、循环语句、逻辑运算等知识点。
(2)用LLM生成一个计算器程序
介绍相关功能,并分析生成的程序代码含义。
对比分析自写程序与生成程序的区别(好与坏)。
2. 实验过程及结果
1)我编写的代码展示,能实现+、-、*、/、mod、//、log、pow、gcd、lcm、abs、sin、cos、tan的基本计算机功能,运用了Python的基本语法、if判定语句、while循环语句等编写程序。
i)通过自定义函数来实现计算机的基本功能。

ii)使用while语句达到一直循环输入的目的,elif语句选择对应功能。

iii)输入y继续,n退出(同时兼容大小写)

iv)运行的样例

2)用LLM生成一个计算器程序
ai的代码(标注了代码的具体含义)
点击查看代码
# 导入必要库:tkinter做GUI,math提供科学计算函数
import tkinter as tk
from tkinter import font
import math
# 卡西欧科学计算器主类
class CasioCalculator(tk.Tk):
def __init__(self):
super().__init__()
# 窗口基础配置(模拟实体计算器尺寸)
self.title("卡西欧科学计算器")
self.geometry("320x420") # 宽x高
self.resizable(False, False) # 禁止拉伸窗口
self.config(bg="#2C3E50") # 计算器主体背景色
# 自定义字体(按键/显示区字体)
self.display_font = font.Font(family="Arial", size=20, weight="bold")
self.btn_font = font.Font(family="Arial", size=12, weight="bold")
self.sci_btn_font = font.Font(family="Arial", size=10, weight="bold")
# 存储输入表达式的变量
self.expression = ""
# 1. 创建显示区域(卡西欧顶部大屏)
self.create_display()
# 2. 创建按键区域(科学键+数字键+功能键)
self.create_buttons()
# -------------------------- 显示区创建 --------------------------
def create_display(self):
# 显示框:右对齐、只读、深色背景
self.display_var = tk.StringVar()
display = tk.Entry(
self, textvariable=self.display_var, font=self.display_font,
bg="#ECF0F1", fg="#2C3E50", justify=tk.RIGHT, bd=10, relief=tk.FLAT
)
display.grid(row=0, column=0, columnspan=5, padx=10, pady=15, sticky="nsew")
# 禁止手动输入,只能按键输入
display.config(state="normal")
# -------------------------- 按键区创建 --------------------------
def create_buttons(self):
# 按键布局:按卡西欧实体按键排列(行=科学键→功能键→数字键→运算键)
# 按键格式:(文本, 行, 列, 列跨度, 按键类型[科学/普通])
button_layout = [
# 第一行:科学计算键(sin、cos、tan、log、ln)
("sin", 1, 0, 1, "sci"), ("cos", 1, 1, 1, "sci"), ("tan", 1, 2, 1, "sci"),
("log", 1, 3, 1, "sci"), ("ln", 1, 4, 1, "sci"),
# 第二行:幂运算、根号、平方、立方、阶乘
("x^y", 2, 0, 1, "sci"), ("√", 2, 1, 1, "sci"), ("x²", 2, 2, 1, "sci"),
("x³", 2, 3, 1, "sci"), ("n!", 2, 4, 1, "sci"),
# 第三行:常数π、e、括号、清除(AC)、退格(DEL)
("π", 3, 0, 1, "num"), ("e", 3, 1, 1, "num"), ("(", 3, 2, 1, "num"),
(")", 3, 3, 1, "num"), ("AC", 3, 4, 1, "func"),
# 第四行:数字7-9 + 除法 + 取余
("7", 4, 0, 1, "num"), ("8", 4, 1, 1, "num"), ("9", 4, 2, 1, "num"),
("/", 4, 3, 1, "opt"), ("%", 4, 4, 1, "opt"),
# 第五行:数字4-6 + 乘法 + 倒数
("4", 5, 0, 1, "num"), ("5", 5, 1, 1, "num"), ("6", 5, 2, 1, "num"),
("*", 5, 3, 1, "opt"), ("1/x", 5, 4, 1, "sci"),
# 第六行:数字1-3 + 减法 + 正负号
("1", 6, 0, 1, "num"), ("2", 6, 1, 1, "num"), ("3", 6, 2, 1, "num"),
("-", 6, 3, 1, "opt"), ("+/-", 6, 4, 1, "func"),
# 第七行:0、小数点、加法、等于
("0", 7, 0, 2, "num"), (".", 7, 2, 1, "num"),
("+", 7, 3, 1, "opt"), ("=", 7, 4, 1, "equal")
]
# 循环创建所有按键
for (text, row, col, colspan, btn_type) in button_layout:
self.create_button(text, row, col, colspan, btn_type)
# -------------------------- 单个按键创建 --------------------------
def create_button(self, text, row, col, colspan, btn_type):
# 按按键类型设置颜色(卡西欧配色:功能键蓝、运算键橙、数字键灰、科学键浅蓝)
colors = {
"sci": {"bg": "#3498DB", "fg": "white"}, # 科学键
"num": {"bg": "#95A5A6", "fg": "white"}, # 数字/括号/常数
"opt": {"bg": "#E67E22", "fg": "white"}, # 运算键
"func": {"bg": "#E74C3C", "fg": "white"}, # 功能键(AC/DEL)
"equal": {"bg": "#27AE60", "fg": "white"} # 等于键
}
bg, fg = colors[btn_type]["bg"], colors[btn_type]["fg"]
font = self.sci_btn_font if btn_type == "sci" else self.btn_font
# 创建按钮并绑定点击事件
btn = tk.Button(
self, text=text, font=font, bg=bg, fg=fg, relief=tk.FLAT,
command=lambda t=text: self.on_button_click(t)
)
btn.grid(row=row, column=col, columnspan=colspan, padx=3, pady=3, sticky="nsew")
# 按钮自适应拉伸
self.grid_rowconfigure(row, weight=1)
self.grid_columnconfigure(col, weight=1)
# -------------------------- 核心:按键点击事件 --------------------------
def on_button_click(self, text):
# 1. 清除键:清空所有输入
if text == "AC":
self.expression = ""
self.display_var.set(self.expression)
# 2. 退格键:删除最后一个字符
elif text == "DEL":
self.expression = self.expression[:-1]
self.display_var.set(self.expression)
# 3. 等于键:计算表达式结果
elif text == "=":
self.calculate_result()
# 4. 正负号键:切换正负
elif text == "+/-":
if self.expression:
if self.expression[0] == "-":
self.expression = self.expression[1:]
else:
self.expression = "-" + self.expression
self.display_var.set(self.expression)
# 5. 科学计算/数字/运算键:追加字符到表达式
else:
self.append_expression(text)
# -------------------------- 表达式追加(自动转换科学函数) --------------------------
def append_expression(self, text):
# 把计算器按键文本转换为math库可识别的函数
sci_map = {
"sin": "math.sin(", "cos": "math.cos(", "tan": "math.tan(",
"log": "math.log10(", "ln": "math.log(", "√": "math.sqrt(",
"x²": "**2", "x³": "**3", "x^y": "**", "n!": "math.factorial(",
"π": "math.pi", "e": "math.e", "1/x": "1/"
}
# 追加转换后的表达式
self.expression += sci_map.get(text, text)
self.display_var.set(self.expression)
# -------------------------- 计算结果(容错处理) --------------------------
def calculate_result(self):
try:
# 计算表达式(eval执行数学运算)
result = eval(self.expression)
# 结果格式化(避免科学计数法,保留8位小数)
result = round(result, 8) if isinstance(result, float) else result
self.display_var.set(result)
self.expression = str(result) # 结果可继续运算
except ZeroDivisionError:
self.display_var.set("除零错误")
self.expression = ""
except (SyntaxError, NameError):
self.display_var.set("输入错误")
self.expression = ""
except ValueError:
self.display_var.set("数值错误")
self.expression = ""
except:
self.display_var.set("计算错误")
self.expression = ""
# 启动计算器
if __name__ == "__main__":
calculator = CasioCalculator()
calculator.mainloop()


代码分析
i)class CasioCalculator(tk.Tk):把计算器所有功能封装在一起。
借用Python 内置标准库 tkinter实现图形化交互
比如:

super().init():调用父类(tk.Tk)的初始化,创建窗口。
title:窗口标题。
geometry("320x420"):窗口宽 320,高 420。
resizable(False,False):禁止用户拉伸窗口。
bg="#2C3E50":窗口背景颜色(深蓝灰)
ii)calculate_result(self):计算结果 + 错误处理
比如:

iii)on_button_click(self):点击逻辑处理
由if-elif判断语句实现点击选择
比如:

self.expression = self.expression[:-1]删掉最后一位数。
self.display_var.set()把删除最后一位后的新计算式,更新显示到计算器的屏幕上。
3)对比分析自写程序与生成程序的区别(好与坏)。
i)我的代码
优点:代码量少、结构简单,无多余界面代码,运行高效,核心聚焦计算逻辑本身。
缺点:未做完善的异常处理,输入错误内容(除数为 0、字母、符号)会直接报错崩溃。相较之下,功能单一,纯黑框控制台交互,操作不直观。
ii)ai代码
优点:功能丰富专业,代码规范完整,图形交互体验好。
缺点:代码冗余繁琐,想改动界面、功能时,因代码结构复杂,容易引发连锁错误,难以独立调整。
3. 实验过程中遇到的问题和解决过程
-
问题1:对math的函数库不太熟悉,不知道有哪些函数可以使用
-
问题1解决方案:通过上网查询math的所有函数,以及询问同学解决了问题。
-
问题2:进行除法(/)、取余(mod)、整除(//)运算时,输入除数为 0,程序直接触发报错并崩溃
-
问题2解决方案:在除法、取余、整除的代码中添加条件判断 if b != 0,当除数为 0 时,不执行运算,直接返回中文错误提示,避免程序异常终止
-
...
其他(感悟、思考等)
通过本次计算器编程实验,我不仅巩固了 Python 函数、循环与判断等基础语法,还深刻理解了程序逻辑与异常处理的重要性。自主编写的控制台程序虽界面简单、功能有限,但每一步逻辑均由我独立设计,有效锻炼了编程思维与问题解决能力。与 AI 生成的图形化计算器对比后,我认识到 AI 代码功能丰富、界面美观、开发高效,但结构复杂,初学者难以完全理解。这让我明白,自主编程是夯实基础、掌握核心的关键,而 AI 只是辅助工具。只有亲手编写、调试,才能真正理解编程本质。今后我会立足自主学习,合理借助 AI 拓展视野,扎实提升编程能力。
浙公网安备 33010602011771号