20242215 实验二《Python程序设计》实验报告
学号 2024-2025-2 《Python程序设计》实验二报告
课程:《Python程序设计》
班级: 2422
姓名: 贾瑞宁
学号:20242215
实验教师:王志强
实验日期:2025年3月26日
必修/选修: 公选课
一、实验内容
设计并完成一个完整的应用程序,完成加减乘除模等运算,功能多多益善(考核基本语法、判定语句、循环语句、逻辑运算等知识点)
1.在物理机(Windows系统)上使用Pycharm工具创建工程项目,使用Python语言实现具体的操作运算,并完成程序调试和运行,代码托管到码云;
2.在华为ECS服务器(OpenOuler系统)实现。
二、实验过程及结果
(一)在物理机上使用Pycharm编写一个计算器程序,并进行调试
1.完整代码
'''
20242215 贾瑞宁
计算器 v4.0
支持运算:复数/实数的加减乘除及对数运算
'''
'''
更新日志
v1.0 老师上课演示的程序
v2.0 加入数学运算方面的错误检验,提升健壮性
v2.1 加入输入错误方面的错误检验,提升健壮性
v3.0 拆分函数,增加可维护性
v4.0 增加对浮点数的支持,功能2从整数扩展到实数
'''
import math # 导入math模块
#加
def Csum(num1, num2):
return num1 + num2
#减
def Csub(num1, num2):
return num1 - num2
#乘
def Cmul(num1, num2):
return num1 * num2
#除
def Cdiv(num1, num2):
if num2 == 0:
print("除数不能为0")
return 0.0
return num1 / num2
#对数
def Clog(num1, num2):
if num1 <= 0 or num2 <= 0:
print("对数函数的参数必须为正数")
return 0.0
return math.log(num1, num2)
#输入数字函数
def get_numbers():
while True:
flag2 = input("请问:需要复数(1)还是实数(2)运算?\n")
if flag2 == "1":
num1 = complex(input("请输入一个数:"))
num2 = complex(input("请输入另一个数:"))
break
elif flag2 == "2":
num1 = float(input("请输入一个数:"))
num2 = float(input("请输入另一个数:"))
break
else:
print("输入错误,请重新输入:")
return num1, num2
#输入运算符函数
def get_operator():
while True:
choice = input("请选择运算符(+,-,*,/,log):")
if choice in ["+", "-", "*", "/", "log"]:
break
else:
print("输入错误,请重新输入:")
return choice
flag = True
while flag:
num1, num2 = get_numbers() #输入数字
choice = get_operator() #输入运算符
#运算符判断
if choice == "+":
print(num1, choice, num2, "=", Csum(num1, num2))
elif choice == "-":
print(num1, choice, num2, "=", Csub(num1, num2))
elif choice == "*":
print(num1, choice, num2, "=", Cmul(num1, num2))
elif choice == "/":
print(num1, choice, num2, "=", Cdiv(num1, num2))
elif choice == "log":
print("log以", num1, "为底", num2, "的对数 =", Clog(num1, num2))
#询问是否开始新的运算
while True:
flag = input("是否开始一个新的运算(y/n):")
if flag == "n":
flag = False
break
elif flag == "y":
flag = True
break
else:
print("输入错误,请重新输入:")
2.测试该程序的在不同输入下的运行结果

- 测试正常的复数、实数运算(如图)

- 测试选择运算时的错误输入(如图)

- 测试不符合数学规则的运算(除数为零)(如图)
(二)在华为ECS服务器(OpenOuler系统)实现
1.购买弹性公网IP

2.购买弹性云服务器

3.登录Linux弹性云服务器

4.检查python版本
- 输入
python3检查 - 检查完后输入
exit()退出
![]()
5.使用python运行代码
- 使用vim创建calculator.py
vim calculator.py - 粘贴程序代码
- 输入
:wq保存退出 - 运行该程序
python3 calculator.py
![]()
三、实验过程中遇到的问题和解决过程
- 问题1:程序只能执行一遍
- 问题1解决方案:主函数加入循环以及标志变量flag,在每次计算结束后询问使用者是否再次使用,并根据输入给flag赋值False或True。
flag = True
while flag:
num1, num2 = get_numbers() #输入数字
choice = get_operator() #输入运算符
…………
#询问是否开始新的运算
while True:
flag = input("是否开始一个新的运算(y/n):")
if flag == "n":
flag = False
break
elif flag == "y":
flag = True
break
else:
print("输入错误,请重新输入:")
- 问题2:程序不能判断某些非法情况
- 问题2解决方案:加入判断,如“除数不能为0”的判断:
if num2 == 0:
print("除数不能为0")
- 问题3:判断出非法情况后,程序只会退出
- 问题3解决方法:加入循环结构
def get_operator():
while True:
choice = input("请选择运算符(+,-,*,/,log):")
if choice in ["+", "-", "*", "/", "log"]:
break #只有输入正确运算符才退出循环
else:
print("输入错误,请重新输入:")
return choice
- 问题4:不会使用云服务器的Linux系统运行程序,
- 问题4解决方法:查找资料学习命令行知识(如vim命令),详见本文“在华为ECS服务器(OpenOuler系统)实现”部分及“参考资料”
四、感悟思考
1.学到了利用循环检验输入正确性、增强代码健壮性的方法
2.学到了利用标志变量flag控制循环的方法
3.学习了一些Linux系统中vim文本编辑器的命令
参考资料
- 《零基础学Python》(2018 明日科技编著)
- Linux基础-vim命令详解(理论+实战)

