20244321 实验二《Python程序设计》实验报告
20244321 2025-2026-2 《Python程序设计》实验二报告
课程:《Python程序设计》
班级: 2443
姓名: 李梓睿
学号:20244321
实验教师:王志强
实验日期:2026年4月13日
必修/选修: 公选课
1.实验内容
(1)编写计算器程序
设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善。
考核基本语法、判定语句、循环语句、逻辑运算等知识点。
(2)用LLM生成一个计算器程序
介绍相关功能,并分析生成的程序代码含义。
对比分析自写程序与生成程序的区别(好与坏)。
- 实验过程及结果
代码1:
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 square(a):
return a ** 2
def cube(a):
return a ** 3
def sqrt_num(a):
if a < 0:
return "错误:负数不能开平方!"
return math.sqrt(a)
def fact(a):
if not a.is_integer() or a < 0:
return "错误:阶乘只能计算非负整数!"
return math.factorial(int(a))
def is_odd_even(a):
if not a.is_integer():
return "错误:奇偶判断只能用于整数!"
num = int(a)
return f"{num} 是 偶数" if num % 2 == 0 else f"{num} 是 奇数"
while True:
print("\n--- 请选择运算类型 ---")
print("1. 加法运算")
print("2. 减法运算")
print("3. 乘法运算")
print("4. 除法运算")
print("5. 取模运算(求余数)")
print("6. 平方运算")
print("7. 立方运算")
print("8. 开平方运算")
print("9. 阶乘运算")
print("10. 判断数字奇偶")
print("0. 退出计算器")
try:
choice = int(input("\n请输入功能编号:"))
except ValueError:
print("输入错误!请输入数字编号!")
continue
if choice == 0:
print("\n感谢使用计算器,再见!")
break
elif choice in [1, 2, 3, 4, 5]:
try:
num1 = float(input("请输入第一个数字:"))
num2 = float(input("请输入第二个数字:"))
except ValueError:
print("输入错误!请输入有效数字!")
continue
if choice == 1:
print(f"{num1} + {num2} = {add(num1, num2)}")
elif choice == 2:
print(f"{num1} - {num2} = {sub(num1, num2)}")
elif choice == 3:
print(f"{num1} × {num2} = {mul(num1, num2)}")
elif choice == 4:
print(div(num1, num2))
elif choice == 5:
print(mod(num1, num2))
elif choice in [6, 7, 8, 9, 10]:
try:
num = float(input("请输入数字:"))
except ValueError:
print("输入错误!请输入有效数字!")
continue
if choice == 6:
print(f"{num} 的平方 = {square(num)}")
elif choice == 7:
print(f"{num} 的立方 = {cube(num)}")
elif choice == 8:
print(sqrt_num(num))
elif choice == 9:
print(fact(num))
elif choice == 10:
print(is_odd_even(num))
else:
print("无效的功能编号!请重新输入!")
运行结果1(部分):



代码2:
import math
import random
def show_menu():
print("1. 加法 (+)")
print("2. 减法 (-)")
print("3. 乘法 (*)")
print("4. 除法 (/)")
print("5. 取模/求余 (%)")
print("6. 幂运算 (x 的 y 次方)")
print("7. 开平方根")
print("8. 阶乘 (n!)")
print("9. 判断素数")
print("10. 生成随机整数")
print("0. 退出程序")
def get_number(prompt):
while True:
try:
return float(input(prompt))
except ValueError:
print("输入错误:请输入有效的数字!")
def get_integer(prompt):
while True:
try:
return int(input(prompt))
except ValueError:
print("输入错误:请输入有效的整数!")
def operation_add():
print("\n--- [加法] ---")
a = get_number("请输入第一个数: ")
b = get_number("请输入第二个数: ")
print(f"结果: {a} + {b} = {a + b}")
def operation_subtract():
print("\n--- [减法] ---")
a = get_number("请输入第一个数: ")
b = get_number("请输入第二个数: ")
print(f"结果: {a} - {b} = {a - b}")
def operation_multiply():
print("\n--- [乘法] ---")
a = get_number("请输入第一个数: ")
b = get_number("请输入第二个数: ")
print(f"结果: {a} * {b} = {a * b}")
def operation_divide():
print("\n--- [除法] ---")
a = get_number("请输入被除数: ")
b = get_number("请输入除数: ")
if b == 0:
print("错误:除数不能为零!")
else:
print(f"结果: {a} / {b} = {a / b}")
def operation_modulo():
print("\n--- [取模] ---")
a = get_number("请输入被模数: ")
b = get_number("请输入模数: ")
if b == 0:
print("错误:模数不能为零!")
else:
print(f"结果: {a} % {b} = {a % b}")
def operation_power():
print("\n--- [幂运算] ---")
base = get_number("请输入底数: ")
exp = get_number("请输入指数: ")
print(f"结果: {base} 的 {exp} 次方 = {math.pow(base, exp)}")
def operation_sqrt():
print("\n--- [开平方] ---")
num = get_number("请输入要开方的数: ")
if num < 0:
print("错误:负数不能进行实数范围内的开平方!")
else:
print(f"结果: √{num} = {math.sqrt(num)}")
def operation_factorial():
print("\n--- [阶乘] ---")
n = get_integer("请输入一个非负整数: ")
if n < 0:
print("错误:负数没有阶乘!")
else:
result = math.factorial(n)
print(f"结果: {n}! = {result}")
def operation_is_prime():
print("\n--- [判断素数] ---")
n = get_integer("请输入一个整数: ")
if n <= 1:
is_prime = False
elif n == 2:
is_prime = True
else:
is_prime = True
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
is_prime = False
break
if is_prime:
print(f"结果: {n} 是素数")
else:
print(f"结果: {n} 不是素数")
def operation_random():
print("\n--- [生成随机数] ---")
start = get_integer("请输入起始值: ")
end = get_integer("请输入结束值: ")
if start > end:
start, end = end, start # 自动交换,保证逻辑正确
print("提示:已自动修正范围")
result = random.randint(start, end)
print(f"结果: 生成的随机整数是 -> {result}")
def main():
while True:
show_menu()
choice = input("请输入选项 (0-10): ")
if choice == '1':
operation_add()
elif choice == '2':
operation_subtract()
elif choice == '3':
operation_multiply()
elif choice == '4':
operation_divide()
elif choice == '5':
operation_modulo()
elif choice == '6':
operation_power()
elif choice == '7':
operation_sqrt()
elif choice == '8':
operation_factorial()
elif choice == '9':
operation_is_prime()
elif choice == '10':
operation_random()
elif choice == '0':
print("\n感谢使用,程序已退出。")
break
else:
print("无效输入:请输入 0 到 10 之间的数字。")
input("\n按 [回车键] 继续...")
if name == "main":
main()
运行结果2(部分):



上传码云:


对比分析:
自写代码优势在于功能聚焦基础运算拓展,覆盖平方、立方、奇偶判断等特色功能,函数封装简洁且职责单一,核心运算逻辑清晰易懂;但输入校验分散在主循环,无通用校验函数,错误提示直接返回字符串,交互体验差,代码复用性与扩展性弱。
LLM生成代码模块化设计更优,封装通用输入校验函数,错误提示精准友好,新增素数判断、随机数生成等功能,交互流程更人性化;但缺少平方、立方等特色功能,主循环分支判断冗余,新增功能需修改分支逻辑,灵活性不足。
- 实验过程中遇到的问题和解决过程
问题1:除法与取模运算中除数为 0 导致错误
问题1解决方案:
在进行除法和取模前增加条件判断:
1、 判断 num2 是否等于 0
2、 若为 0,输出错误提示,不执行运算
3、 若不为 0,正常计算并输出结果
其他(感悟、思考等)
通过本次多功能计算器程序设计,我熟练掌握了Python基本语法、循环与条件判断语句的使用,也深刻体会到程序逻辑严谨性的重要性。编写过程中,输入异常、除数为零等问题让我认识到,完善的异常处理和边界判断是程序稳定运行的关键。每一个功能都需要细致规划,每一处判断都要考虑周全。这次实践不仅提升了我的编程能力,也培养了严谨的逻辑思维与解决实际问题的能力,让我明白代码不仅要实现功能,更要健壮易用。
浙公网安备 33010602011771号