实验二报告
学号 2025-2026-2 《Python程序设计》实验二报告
课程:《Python程序设计》
班级: 202533
姓名: 靳淏童
学号:20253331
实验教师:王志强
实验日期:2026年3月23日
必修/选修: 公选课
1.实验内容
(1)编写计算器程序
设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
考核基本语法、判定语句、循环语句、逻辑运算等知识点。
(2)用LLM生成一个计算器程序
介绍相关功能,并分析生成的程序代码含义。
对比分析自写程序与生成程序的区别(好与坏)。
2. 实验过程及结果
import math
def sum(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:
print("错误:除数不能为零")
return None
return a / b
def quotien(a, b):
if b == 0:
print("错误:除数不能为零")
return None
return a // b
def mod(a, b):
if b == 0:
print("错误:除数不能为零")
return None
return a % b
def log(a, b):
if a <= 0 or b <= 0 or b == 1:
print("错误:对数要求真数>0,底数>0且底数≠1")
return None
return math.log(a, b)
def pow(a, b):
return a ** b
a = int(input("请输入一个数:\n"))
b = int(input("请输入另外一个数:\n"))
operator = input("选择运算符号:+、-、、/、%、log、pow\n")
while True:
if operator not in ["+","-","","/","//","log","pow"]:
print("输入操作符有误,请重新输入")
operator = input("选择运算符号:+、-、、/、%、log、pow")
else:
break
if operator == "+":
print(f"{a}{operator} {b}",sum(a,b))
elif operator == "-":
print(f"{a}{operator} {b}",sub(a,b))
elif operator == "":
print(f"{a}{operator} {b}",mul(a,b))
elif operator == "/":
print(f"{a}{operator} {b}",div(a,b))
elif operator == "//":
print(f"{a}{operator} {b}",quotien(a,b))
elif operator == "log":
print(f"{a}{operator} {b}",log(a,b))
elif operator == "pow":
print(f"{a}{operator} {b}",pow(a,b))

AI代码:

- 实验过程中遇到的问题和解决过程
问题1:最初编写的代码中,直接调用了 math.sum()、math.sub() 等函数,运行时提示 module 'math' has no attribute 'sum'。
问题1解决方案:查阅 Python 官方文档后发现,math 模块并不包含这些基本算术函数。修正方法是将它们改为直接使用 +、-、*、/ 等运算符,并自定义对应的函数(如 def sum(a,b): return a+b)。
问题2:运算符输入验证时,if operator not in ["+","-","*","/","//","log","pow"] 语句缺少冒号,导致语法错误。
问题2解决方案:在条件判断语句末尾添加冒号 :,并修正缩进,使代码符合 Python 语法规范。
问题3:除法、整数除法和取余运算中,当除数为 0 时程序直接崩溃,抛出 ZeroDivisionError。
问题3解决方案:在 div()、quotien()、mod() 函数内部增加条件判断:if b == 0: print("错误:除数不能为零"); return None,同时在主程序中检查返回值是否为 None,避免异常终止。
问题4:对数运算中,当输入的真数 ≤0 或底数 ≤0 或底数 =1 时,math.log() 会抛出 ValueError,用户无法理解错误原因。
问题4解决方案:在 log() 函数中添加定义域检查,若输入非法则打印明确的错误提示(“对数要求真数>0,底数>0且底数≠1”),并返回 None,提升用户体验。
问题5:原程序只计算一次就退出,无法满足连续计算的需求。
问题5解决方案:将整个计算逻辑放入 while True 循环中,并增加退出条件(输入 q 时 break),同时提示用户如何退出,实现多次计算功能。
其他(感悟、思考等)
通过本次简易计算器的编写,我深刻体会到以下几点:
基础语法的重要性:一个缺失的冒号或错误的缩进就会导致程序无法运行,严谨的编码习惯是写出正确程序的前提。
模块并非万能:math 模块提供了丰富的数学函数,但基本算术运算仍需依赖 Python 自身的运算符。在使用任何模块前应先查阅文档,避免“想当然”地调用不存在的函数。
异常处理提升健壮性:用户的输入不可预测(如除零、非数字、非法运算符等),程序必须主动检查并给出友好提示,而不是直接崩溃。这体现了“防御式编程”的思想。
循环与交互设计:一个实用的工具往往需要支持重复使用。通过引入 while 循环和退出条件,将一次性脚本改造为可交互的程序,大大提升了实用性。
从错误中学习:调试过程中遇到的每一个报错都是学习的机会。理解错误信息、定位问题、查找资料、修正代码,这一循环能有效提升解决问题的能力。

浙公网安备 33010602011771号