20224103《Python程序设计入门》实验四报告

2201_75514094 2023-05-31 13:07:13


课程:《Python程序设计入门》
班级: 2241
姓名: lyt

学号:20224103
实验教师:WZQ
实验日期:2023年5月20日
必修/选修: 专选课

一、实验内容
在简单计算机的基础上突发奇想,融合复习很头疼的数学部分,加入了线性代数之中的矩阵与行列式计算以及概率论之中的数学期望与方差计算,从而达到实验应用化,更好的备考

二、实验过程与结果
1.下载引入数据库之中的numpy ,sympy, Matrix以用于线性代数与概率论的计算

 

img

img

 

 

2.编写简单部分

分别使用add,substract,multiply,divide,square公式,完成加减乘除与平方的计算

img

 

3.使用while,if,continue,break实现计算的进行与循环与退出

img

 

4.根据引入的函数,编写矩阵与期望方差部分

 

img

 

 

5.运行起来发现太麻烦了,重新编写了代码,制作了选择栏,简化了运算过程与输入过程,改为分别输入

 

img

img

 

6.附上源代码:

def add(a, b):

    return a + b

 

def substract(a, b):

    return a - b

 

def multiply(a, b):

    return a * b

 

def divide(a, b):

    return a / b

 

def square(a):

    return a ** 2

 

def calculate_mean(numbers):

    s = sum(numbers)

    n = len(numbers)

    mean = s / n

    return mean

 

def calculate_variance(numbers):

    mean = calculate_mean(numbers)

    differences = [x - mean for x in numbers]

    sq_differences = [d ** 2 for d in differences]

    variance = sum(sq_differences) / len(numbers)

    return variance

 

print("欢迎使用计算器!可以进行加、减、乘、除、平方、数学期望和方差的计算。在进行数学期望和方差计算时,请输入数字列表,以逗号分隔。")

while True:

    operation = input("请输入要执行的操作和相应的数字(如:+ 2 3)或者按 Q 退出:")

    if operation.lower() == 'q':

        break

    operation_list = operation.split()

    operator = operation_list[0]

    if operator == "+":

        result = add(float(operation_list[1]), float(operation_list[2]))

        print("计算结果为:", result)

    elif operator == "-":

        result = substract(float(operation_list[1]), float(operation_list[2]))

        print("计算结果为:", result)

    elif operator == "*":

        result = multiply(float(operation_list[1]), float(operation_list[2]))

        print("计算结果为:", result)

    elif operator == "/":

        if float(operation_list[2]) == 0:

            print("除数不能为零!请重新输入")

            continue

        else:

            result = divide(float(operation_list[1]), float(operation_list[2]))

            print("计算结果为:", result)

    elif operator == "square":

        result = square(float(operation_list[1]))

        print("计算结果为:", result)

    elif operator == "mean":

        numbers = [float(x) for x in operation_list[1:]]

        result = calculate_mean(numbers)

        print("数学期望为:", result)

    elif operator == "variance":

        numbers = [float(x) for x in operation_list[1:]]

        result = calculate_variance(numbers)

        print("方差为:", result)

    else:

        print("非法的操作符,请重新输入!")

重写后:

import numpy as np

def basic_arithmetic_operation():
    print("请输入两个数字:")
    num1 = float(input("第一个数字:"))
    num2 = float(input("第二个数字:"))

    print("请选择要进行的运算符:")
    print("1.加")
    print("2.减")
    print("3.乘")
    print("4.除")

    choice = int(input("请选择您的选择(1/2/3/4): "))

    if choice == 1:
        result = num1 + num2
        print("结果为:", result)
    elif choice == 2:
        result = num1 - num2
        print("结果为:", result)
    elif choice == 3:
        result = num1 * num2
        print("结果为:", result)
    elif choice == 4:
        result = num1 / num2
        print("结果为:", result)
    else:
        print("无效的选择!")

def matrix_operation():
    print("请输入矩阵长度和宽度:")
    rows = int(input("矩阵长度:"))
    cols = int(input("矩阵宽度:"))
    print("请分别输入矩阵1中的所有元素:")
    matrix1 = np.zeros((rows, cols))
    for i in range(rows):
        for j in range(cols):
            matrix1[i][j] = float(input())
    print("请分别输入矩阵2中的所有元素:")
    matrix2 = np.zeros((rows, cols))
    for i in range(rows):
        for j in range(cols):
            matrix2[i][j] = float(input())

    print("请选择要进行的运算符:")
    print("1.加")
    print("2.减")
    print("3.乘")

    choice = int(input("请选择您的选择(1/2/3): "))

    if choice == 1:
        result = np.add(matrix1, matrix2)
        print("结果为:")
        print(result)
    elif choice == 2:
        result = np.subtract(matrix1, matrix2)
        print("结果为:")
        print(result)
    elif choice == 3:
        result = np.dot(matrix1, matrix2)
        print("结果为:")
        print(result)
    else:
        print("无效的选择!")

def determinant_calculation():
    print("请输入矩阵的长度:")
    n = int(input("长度:"))

    print("请分别输入矩阵中的所有元素:")
    matrix = np.zeros((n, n))
    for i in range(n):
        for j in range(n):
            matrix[i][j] = float(input())

    result = np.linalg.det(matrix)
    print("结果为:", result)

def mathematical_expectation_and_variance_calculation():
    print("请以空格分隔,一行输入所有数值:")
    nums = list(map(float, input().split()))

    mean = np.mean(nums)
    variance = np.var(nums)

    print("平均数为:", mean)
    print("方差为:", variance)

def calculator():
    print("欢迎使用Python计算器!")
    print("请选择您要进行的运算:")
    print("1. 基本算术运算")
    print("2. 矩阵运算")
    print("3. 行列式计算")
    print("4. 数学期望和方差的计算")

    choice = int(input("请选择您想要使用的计算法则(1/2/3/4): "))

    if choice == 1:
        basic_arithmetic_operation()
    elif choice == 2:
        matrix_operation()
    elif choice == 3:
        determinant_calculation()
    elif choice == 4:
        mathematical_expectation_and_variance_calculation()
    else:
        print("无效的选择,请重新选择!")
        calculator()

calculator()
实验视频:
 ​

三、实验过程中的问题与解决过程
1.问题:计算输入非常复杂

解决过程:重新编写编码,改变输入方式,变为分别输入,降低修改时间成本,提升使用简洁度

2.问题:缺乏选择菜单,在计算时容易造成混乱

解决过程:加入选择栏,将基本算术运算,矩阵运算,行列式计算,数学期望和方差的计算分为四个部分

四、实验四感想体会

   选择什么题材让我感觉非常奔溃,但是我还是很想做一个计算器,从最开始的计算检验器,在猜数字基础上融合简单的运算,融合在实验一与实验二,但是发现,没什么用的样子,我就在想作为一名文科生,能不能真正的用好Python,正好在复习数学,灵光一现就想到了线性代数与概率论,于是我摆脱去网上寻找小游戏的路,更坚定的修改计算器。 在这个过程之中问了很多理科同学,他们也给了我很多可靠的建议,这才让我制作选择栏与分别输入变得简单了一点点。在制作完之后成就感十足,数学复习也可以用这个了,感觉太棒了!

五、课程总结
       不得不说,王老师真的太好啦!在上了大学之后,很少有这种认真做事情的感觉,可是在实验的过程之中实现了高效。第二件坚持的事情就是英语单词打卡!给我带来了很多启发。然后就是王老师做事情的态度,非常非常非常耐心,一次次的温习与指导,以至于真的学会了计算器怎么制作!

         最后是一些反思,没有好好的用好Python的教材,讲的非常生动,之后要花时间去学好这门技术!再次谢谢老师!

 

...全文
92 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

42

社区成员

发帖
与我相关
我的任务
社区描述
技术交流
教育电商 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧