当前位置: 首页 > news >正文

Python大数据处理实验报告(二)

  • 实验目的

1. 通过编写程序实现矩阵操作,包括矩阵相减和遍历矩阵元素。

2. 练习使用计算机工具求解矩阵的逆,并验证逆矩阵的正确性。

3. 熟悉递归算法的应用,通过解决汉诺塔问题加深对递归的理解。

4. 实践使用循环结构解决约瑟夫问题,加强对循环的掌握。

5. 编写密码检查程序,加强对字符串处理和条件判断的能力。

  • 实验要求
  1. 随机生成两个4*4的矩阵X和Y,要求用for循环取出X,Y矩阵对应位置的值,将其相减后放入新的矩阵Z中
  2. 随机输入一个矩阵,求它的逆矩阵并验证
  3. 汉诺塔问题:有3根柱子,第一根有N个盘子,从上往下越来越大。要求把第一根柱子的N个盘子全部移到第三根柱子上,在移动过程中,始终只能小盘子压着大盘子,而且每一次只能移动一个盘子。
  4. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到5报数),凡报到5的人退出圈子,问最后留下的是原来的第几号。
  5. 某网站要求对用户设置的密码进行检查,密码长度介于6到12个字符,且必须同时包含大小写字母、数字、及[@,#,*]三个特殊符号中的一种。输入:一系列以逗号分隔的密码,输出:符合要求的以逗号分隔的密码。
  • 实验代码

题目一源代码:

import numpy as np

X = np.random.randint(0, 10, (4, 4))

Y = np.random.randint(0, 10, (4, 4))

Z = np.zeros((4, 4), dtype=int)

for i in range(4):

    for j in range(4):

        Z[i][j] = X[i][j] - Y[i][j]

print("X:")

print(X)

print("Y:")

print(Y)

print("Z:")

print(Z)

print("X-Y:")

print(X-Y)

题目二源代码:

import numpy as np

# 从键盘输入矩阵

n = int(input("请输入矩阵的阶数: "))

matrix = np.zeros((n, n))

print("请输入矩阵内的元素:")

for i in range(n):

    matrix[i] = input().split()

# 判断矩阵是否可逆

if np.linalg.det(matrix) != 0:

    # 求逆矩阵

    Ni_matrix = np.linalg.inv(matrix)

    # 验证

    result = np.dot(matrix, Ni_matrix)

    print("\n原始矩阵:\n", matrix)

    print("\n逆矩阵:\n", Ni_matrix)

    print("\n验证结果:\n", result)

else:

    print("\n该矩阵不可逆。")

题目三源代码:

def hanoi_tower(N, F, T, S):

    if N == 1:

        print(f"Move disc 1 from {F} to {T}")

        return

    hanoi_tower(N-1, F, S, T)

    print(f"Move disc {N} from {F} to {T}")

    hanoi_tower(N-1, S, T, F)

N = int(input("请输入有几个盘子:"))

F = 'A'

T = 'C'

S = 'B'

hanoi_tower(N, F, T, S)

题目四源代码:

def find_last_person(n):

    people = list(range(1, n+1))

    index = 0

    while len(people) > 1:

        index = (index + 4) % len(people)  #减少index增量考虑每次pop之后的长度变化

        people.pop(index)

    return people[0]

n = int(input("请输入总人数:"))

last_person = find_last_person(n)

print("最后留下的是原来的第", last_person, "号")

题目五源代码:

import re

def check_password(password):

    # 使用一个正则表达式同时匹配所有条件:长度6-12位,包含小写字母、大写字母、数字和特殊符号

    if re.match("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@#*])[a-zA-Z0-9@#*]{6,12}$", password):

        return True

    else:

        return False

def filter_passwords(passwords):

    valid_passwords = [password for password in passwords if check_password(password)]

    return valid_passwords

passwords = input("请输入一个或多个以逗号分隔的密码: ").split(",")

valid_passwords = filter_passwords(passwords)

print("符合要求的密码为: " + ",".join(valid_passwords))

  • 实验结果

图 1 题目一运行结果截图

图 2 题目二运行结果截图

图 3 题目三运行结果截图

图 4 题目四运行结果截图

图 5 题目五运行结果截图

  • 实验体会

1. 通过实现矩阵操作,我加深了对矩阵运算的理解,尤其是使用for循环逐元素操作的方法。这让我更熟练地处理矩阵数据。

2. 求解矩阵的逆矩阵并验证的过程中,我学会了如何使用计算机工具进行线性代数运算,这对我理解线性代数知识起到了很好的辅助作用。

3. 解决汉诺塔问题时,我深刻体会到了递归算法的思想和应用。这让我对递归有了更深入的认识,也提升了我的问题解决能力。

4. 解决围成一圈报数问题,我加强了对循环结构和约瑟夫问题的理解,锻炼了我的逻辑思维能力和编程技巧。

5. 编写密码检查程序让我更加熟练地运用条件判断和字符串处理,同时也提高了我对密码安全性检查的认识,对网络安全有了更深的了解。

总的来说,通过这些实验,我不仅学到了更多关于矩阵操作、递归算法、循环结构和密码安全性的知识,还提升了我的编程能力和问题解决能力。这些实验让我更加熟练地运用编程工具解决实际问题,为我的学习和职业发展打下了坚实的基础。

http://www.dtcms.com/a/47210.html

相关文章:

  • 2.数据结构:3.合并集合
  • C语言:51单片机 基础知识
  • 不能初始化photoshop,因为暂存盘已满
  • LeetCode 72 - 编辑距离 (Edit Distance)
  • 前端内存泄漏的几种情况及方案
  • 探索Spring Cloud Config:构建高可用的配置中心
  • 分类预测 | Matlab实现CPO-SVM冠豪猪算法优化支持向量机多特征分类预测
  • 【鸿蒙Next】 测试包 签名、打包、安装 整体过程记录
  • 力扣完全平方数279和力扣91解码方法的做题笔记
  • ARM Linux LCD上实时预览摄像头画面
  • VMware Ubuntu 共享目录
  • 【Go语言快速上手】第一部分:数据类型(数组、切片、映射)与控制语句
  • ​豪越科技:智慧园区后勤单位消防安全管理,实时告警与整改闭环
  • LeetCode 202. 快乐数 java题解
  • 【HTML学习笔记基础篇】
  • elpis全栈课程学习之elpis-core学习总结
  • Virtual Box虚拟机安装Mac苹果Monterey和big sur版本实践
  • UI设计——新拟态手机主题锁屏设计分享
  • vmware安装firepower ftd和fmc
  • 计算机毕业设计SpringBoot+Vue.js网上摄影工作室管理系统(源码+文档+PPT+讲解)
  • vector 面试点总结
  • 【Python机器学习】1.2. 线性回归理论:一元线性回归、最小化平方误差和公式(SSE)、梯度下降法
  • C++ 类和对象(上)
  • 使用 REINFORCE 算法强化梯度策略
  • AcWing 蛋糕游戏
  • CSS3(媒体查询、媒体类型、媒体特性、媒体运算符、BFC)
  • Pytest之parametrize参数化
  • 如何使用Spring Boot框架整合Redis:超详细案例教程
  • Java数据结构第十六期:走进二叉树的奇妙世界(五)
  • DeepSeek MLA(Multi-Head Latent Attention)算法浅析