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.pyvim 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文本编辑器的命令

参考资料

posted @ 2025-04-09 20:03  熵非时  阅读(34)  评论(0)    收藏  举报