20224323徐志力 《Python程序设计》实验2报告

该问题来自社区帖: https://bbs.csdn.net/topics/614226700.为符合问答规范, 该问题经过ChatGPT优化

学号 20224323徐志力 《Python程序设计》实验2报告

课程:《Python程序设计》
班级: 2243
姓名: 徐志力
学号:20224323
实验教师:王志强
实验日期:2023年3月23日
必修/选修: 公选课

1.实验内容

自己设计计算机系统

其中含有加减乘除阶乘三角函数指数对数的运算

代码如下:

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):
    return (a/b)
def power(a,b):
    return (a**b)
def log1(a,b):
    return math.log(b,a)
def factorial2023(n):
    result = 1
    for i in range(1,n+1):
        result = result*i
    return result
def sin1(n):
    return math.sin(n)
def cos1(n):
    return math.cos(n)
def tan1(n):
    return math.tan(n)
flag = 1
while True:
    a = int(input("请输入一个整数a:"))
    b = int(input("请输入一个整数b: "))
    operation = input("请问您需要什么操作:!+-*/ ** log sin cos tan")
    if operation == '+':
        print("a+b=",sum(a,b))
    elif operation == '-':
        print("a-b=",sub(a,b))
    elif operation == '*':
        print("a*b=",mul(a,b))
    elif operation == '/':
        if b == 0:
            print("除数不能为0")
        else:
            print("a/b=",div(a,b))
    elif operation == '**':
        print("a**b=",power(a,b))
    elif operation == 'log':
        print("log a b=",log1(b,a))
    elif operation == '!':
        print("a!=", factorial2023(a), "b!=", factorial2023(b))
    elif operation == 'sin':
        print("sin(a)=", sin1(a), "sin(b)=", sin1(b))
    elif operation == 'cos':
        print("cos(a)=", cos1(a), "cos(b)", cos1(b))
    elif operation == 'tan':
        print("tan(a)=", tan1(a), "tan(b)=", tan1(b))
    flag = int(input("请问你是否继续?继续:1,结束:0\n"))
    if flag == 0:
        break

2. 实验过程及结果

在这次实验中,我们学习了函数的写法和运用

我们先从加法开始出发,然后增加了循环系统,在此基础上,再加上了减减乘除阶乘三角函数指数对数的运算

加法:

循环部分:

 

def main():
    flag = 1
    while True:
        a = int(input("请输入一个整数a:"))
        b = int(input("请输入一个整数b:"))
        operation = input("请问您需要什么操作?! - * / ** log sin cos tan")
        if operation == '+':
            print("a + b =", sum(a, b))
        elif operation == '-':
            print("a - b =", sub(a, b))
        elif operation == '*':
            print("a * b =", mul(a, b))
        elif operation == '/':
            if b == 0:
                print("除数不能为0")
            else:
                print("a / b =", div(a, b))
        elif operation == '**':
            print("a ** b =", power(a, b))
        elif operation == 'log':
            print("log a b =", log1(b, a))
        elif operation == '!':
            print("a! =", factorial2023(a), "b! =", factorial2023(b))
        elif operation == 'sin':
            print("sin(a) =", sin1(a), "sin(b) =", sin1(b))
        elif operation == 'cos':
            print("cos(a) =", cos1(a), "cos(b) =", cos1(b))
        elif operation == 'tan':
            print("tan(a) =", tan1(a), "tan(b) =", tan1(b))
        flag = int(input("请问你是否继续?继续:1,结束:0\n"))
        if flag == 0:
            break

if __name__ == '__main__':
    main()

循环部分运用flag的值来选择是否继续

自己建立的函数运算:

def log1(a,b):
    return math.log(b,a)
def factorial2023(n):
    result = 1
    for i in range(1,n+1):
        result = result*i
    return result
def sin1(n):
    return math.sin(n)
def cos1(n):
    return math.cos(n)
def tan1(n):
    return math.tan(n)

再次过程中,主要运用了math库中的函数来解决

最后,将文件上传到gitee

如图:

3. 实验过程中遇到的问题和解决过程

  • 问题1:如何让计算重复使用
  • 问题1解决方案:写函数来实现重复使用

其他(感悟、思考等)

运用函数可以实现重复使用

参考资料

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7679208
  • 除此之外, 这篇博客: python中的抽象类中的 1.首先知道python中的抽象类其实就是一种代码规范,和前面两篇文章python中的单继承和python中的多继承说的都是一个道理归根到底都是为了代码规范,同样也是从Java中继承的思想,抽象类一般都是单继承,由于多个子类都需要继承同一个类,所以可以在抽象类中实现具体的方法,但是子类中还是要实现具体的方法,看下面的例子,抽象类中实现了文件打开和关闭操作,但是子类中还是定义了 读写功能,为了理解的简便还是可以直接理解成抽象类中不实现具体的方法,子类中必须实现具体的方法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    import abc #利用abc模块实现抽象类
    
    class All_file(metaclass=abc.ABCMeta):
        all_type='file'
        @abc.abstractmethod #定义抽象方法,无需实现功能
        def read(self):
            '子类必须定义读功能'
            with open('filaname') as f:
                pass
    
        @abc.abstractmethod #定义抽象方法,无需实现功能
        def write(self):
            '子类必须定义写功能'
            pass
    
    class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('文本数据的读取方法')
        def write(self):
            print('文本数据的读取方法')
    
    class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('硬盘数据的读取方法')
    
        def write(self):
            print('硬盘数据的读取方法')
    
    class Process(All_file): #子类继承抽象类,但是必须定义read和write方法
        def read(self):
            print('进程数据的读取方法')
    
        def write(self):
            print('进程数据的读取方法')
    
    wenbenwenjian=Txt()
    
    yingpanwenjian=Sata()
    
    jinchengwenjian=Process()
    
    #这样大家都是被归一化了,也就是一切皆文件的思想
    wenbenwenjian.read()
    yingpanwenjian.write()
    jinchengwenjian.read()
    
    print(wenbenwenjian.all_type)
    print(yingpanwenjian.all_type)
    print(jinchengwenjian.all_type)
    
    # 抽象类 : 规范
    # 一般情况下 单继承 能实现的功能都是一样的,所以在父类中可以有一些简单的基础实现
    # 多继承的情况 由于功能比较复杂,所以不容易抽象出相同的功能的具体实现写在父类中
    
    
    # 抽象类还是接口类 : 面向对象的开发规范 所有的接口类和抽象类都不能实例化
    # java :
    # java里的所有类的继承都是单继承,所以抽象类完美的解决了单继承需求中的规范问题
    # 但对于多继承的需求,由于java本身语法的不支持,所以创建了接口Interface这个概念来解决多继承的规范问题
    
    # python
    # python中没有接口类  :
      #  python中自带多继承 所以我们直接用class来实现了接口类
    # python中支持抽象类  : 一般情况下 单继承  不能实例化
      #  且可以实现python代码
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^