利用 Python 进行数据分析实验(四)

一、实验目的

使用Python解决简单问题

二、实验要求

自主编写并运行代码,按照模板要求撰写实验报告

三、实验步骤

本次实验共有4题:

  1. 汉诺塔问题:有3根柱子,第一根有N个盘子,从上往下越来越大。要求把第一根柱子的N个盘子全部移到第三根柱子上,在移动过程中,始终只能小盘子压着大盘子,而且每一次只能移动一个盘子。
  2. 编写程序,实现输入任意金额,可以由100、50、10、1、0.1这几种面额组成。比如123.5可以由一张100+2张10+3张1+5张0.1组成。
  3. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到5报数),凡报到5的人 退出圈子,问最后留下的是原来的第几号。
  4. 某网站要求对用户设置的密码进行检查,密码长度介于6到12个字符,且必须同时包含大小写字母、数字、及@,#,\*三个特殊符号中的一种。输入:一系列以逗号分隔的密码,输出:符合要求的以逗号分隔的密码。

四、实验结果

T1

python 复制代码
"""
汉诺塔问题:有3根柱子,第一根有N个盘子,从上往下越来越大。
要求把第一根柱子的N个盘子全部移到第三根柱子上,
在移动过程中,始终只能小盘子压着大盘子,每一次只能移动一个盘子。
"""
import random


def func(n, x, y, z):  # 一个关于递归的经典示例

    if n == 1:
        print(x, '移动至', z)
    else:
        func(n - 1, x, z, y)
        func(1, x, y, z)
        func(n - 1, y, x, z)


num = random.randint(2, 5)
print('初始状态共有' + str(num) + '层')
func(num, 'x', 'y', 'z')

T2

python 复制代码
"""
编写程序,实现输入任意金额,
可以由100、50、10、1、0.1这几种面额组成
比如123.5可以由:
一张100+2张10+3张1+5张0.1组成
"""
print('输入金额:')
value = float(input())

hundred = int(value / 100)
value = value % 100
half_h = int(value / 50)
value = value % 50
ten = int(value / 10)
value = value % 10
one = int(value / 1)
value = value % 1
left = int(value / 0.1)

print('百元' + str(hundred) + '张,五十元' + str(half_h) + '张,十元' + str(ten) + '张,一元' + str(one) + '张,一角' + str(left) + '张')

T3

python 复制代码
"""
有n个人围成一圈,顺序排号。
从第一个人开始报数(从1到5报数)
凡报到5的人退出圈子
问最后留下的是原来的第几号
"""
print('输入人数:')
n = int(input())
count = -1

# 0开始,报4的退出
list = []
for i in range(0, n):
    list.append(i)  # 记录初始编号

"""
利用Python的特性,可以直接删除指定元素
一共要淘汰n-1个人
"""
for i in range(0, n - 1):
    count = count + 5
    if (count < n - i):
        del list[count]
    else:
        count = (count % (n - i)) - 1
        del list[count]

print('最后留下的人的初始编号是:' + str(list[0] + 1))

T4

py 复制代码
"""
某网站要求对用户设置的密码进行检查,
密码长度介于6到12个字符,且必须同时包含大小写字母、数字、及
[@,#,*]三个特殊符号中的一种。
输入:一系列以逗号分隔的密码,输出:符合要求的以逗号分隔的密码。
"""
import re

res = ""


def check(s):
    if (len(s) > 12 or len(s) < 6):
        return False
    cap = 0
    low = 0
    num = 0
    char = 0

    regex_num = re.finditer(r'[0-9]', s)
    for match in regex_num:
        num += 1

    regex_cap = re.finditer(r'[A-Z]', s)
    for match in regex_cap:
        cap += 1

    regex_low = re.finditer(r'[a-z]', s)
    for match in regex_low:
        low += 1

    regex_char = re.finditer(r'[@#*]', s)
    for match in regex_char:
        char += 1

    if (cap != 0 and low != 0 and num != 0 and char != 0):
        return True
    else:
        return False


str = input('输入多组密码,以逗号分隔以回车结束:')
num = 0
list = []

for i in range(0, len(str)):
    if str[i] == ',':
        list.append(i)

for i in range(0, len(list) + 1):
    if i == 0:
        str_cut = str[0: list[0]]
        if (check(str_cut)):
            res = res + str_cut
    elif i == len(list):
        str_cut = str[list[i - 1]: len(str)]
        if (check(str_cut)):
            res = res + str_cut
    else:
        str_cut = str[list[i - 1]: list[i]]
        if (check(str_cut)):
            res = res + str_cut

print(res)

五、实验体会

相关推荐
jianxuan10 小时前
Spring Boot + Maven 接入 Allatori:从普通打包到可选混淆发布
spring boot·python·maven
德迅云安全-上官10 小时前
服务器遭攻击如何快速响应?从技术原理到接入防御架构的实战指南
运维·服务器·架构
不一样的故事12610 小时前
Prompt 工程(Prompt Engineering)
前端·人工智能·python
我命由我1234510 小时前
6-2.Python 异常处理 - 异常捕获(捕获指定异常、常见异常类型、异常信息)
java·运维·开发语言·python·http·https·java-ee
MindUp10 小时前
AI 能帮我做数据分析吗?从使用场景看三类辅助方式
人工智能·数据挖掘·数据分析
zh路西法10 小时前
【模型式强化学习】(三):MBPO——短轨迹生成与模型数据驱动的策略优化
python·强化学习·pe·sac·pets·mbpo·mbrl
倔强的石头10610 小时前
【Linux指南】进程通信系列(四):命名管道 FIFO —— 让陌生进程按名字见面
linux·服务器·网络
Angeldream12310 小时前
第 9 章 医学影像项目实战
大数据·图像处理·人工智能·python·医学影像处理
ZhengEnCi10 小时前
一亿条数据取前100条完全指南:从全量排序到分块流式最小堆的4种解法实测
python·算法·排序算法
2601_9679791210 小时前
AccessControl 5.4 macOS Python 3.9 版本安装包
python·macos·security·accesscontrol·permissions