学生管理系统

# 定义功能界面函数
def info_print():
    print('--------------请选择功能--------------')
    print('1、添加学员')
    print('2、删除学员')
    print('3、修改学员')
    print('4、查询学员')
    print('5、显示所有学员')
    print('6、退出系统')
    print('-' * 20)


# 等待存储所有学员的信息
info = []

# 判断学生是否在info数组中
def findStu(stuName):
    for stu in info:
        if stuName == stu['name']:  # 用户存在
            return True
    else: # 用户不存在
        return False


# 添加学员信息的函数
def add_info():
    """添加学员函数"""
    # 1. 用户输入:学号、姓名、手机号
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_tel = input('请输入手机号:')

    # 2. 判断是否添加这个学员:如果学员姓名已经存在报错提示;如果姓名不存在添加数据
    global info
    # 2.1 不允许姓名重复:判断用户输入的姓名 和 列表里面字典的name对应的值 相等 提示
    if not findStu(new_name):
        # 2.2 如果输入的姓名不存在,添加数据:准备空字典,字典新增数据,列表追加字典
        info_dict = {}
    
        # 字典新增数据
        info_dict['id'] = new_id
        info_dict['name'] = new_name
        info_dict['tel'] = new_tel
        # print(info_dict)
    
        # 列表追加字典
        info.append(info_dict)
        print(info)

    


# 删除学员
def del_info():
    """删除学员"""
    # 1. 用户输入要删除的学员的姓名
    del_name = input('请输入要删除的学员的姓名:')

    # 2. 判断学员是否存在:存在则删除;不存在提示
    # 2.1 声明info是全局变量
    global info
    # 2.2 遍历列表
    if findStu(del_name):    
        # 2.3 判断学员是否存在:存在执行删除(列表里面的字典),break:这个系统不允许重名,删除了一个后面的不需要再遍历;不存在提示    
        for stu in info:
            if stu['name'] == del_name:
                info.remove(stu)
                break
        
    else:
        print("学生信息不存在")

    print(info)


# 修改函数
def modify_info():
    """修改学员信息"""
    # 1. 用户输入想要修改的学员您的姓名
    modify_name = input('请输入要修改的学员的姓名:')

    # 2. 判断学员是否存在:存在修改手机号;不存在,提示
    # 2.1 声明info是全局
    global info
    # 2.2 遍历列表,判断输入的姓名==字典['name']
    if findStu(modify_name): 
         # 将tel这个key修改值,并终止此循环
        for stu in info:
            if stu['name'] == modify_name:
                stu['tel'] = input('请输入新的手机号:')
    else:
        # 学员不存在
        print('该学员不存在')

    # 3. 打印info
    print(info)


# 查询学员信息函数
def search_info():
    """查询学员信息"""
    # 1. 用户输入目标学员姓名
    search_name = input('请输入要查询的学员的姓名:')

    # 2. 检查学员是否存在:存在打印这个学员的信息;不存在则提示
    # 2.1 声明info为全局
    global info
    # 2.2 遍历info,判断输入的学员是否存在
    if findStu(search_name): 
        for stu in info:
            if search_name == stu['name']:
                # 学员存在:打印信息并终止循环
                print('查询到的学员信息如下---------------')
                print(f"学员的学号是{stu['id']}, 姓名是{stu['name']}, 手机号是{stu['tel']}")
                break
        
    else:
        # 学员不存在的提示
        print('查无此人...')


# 显示所有学员信息
def print_all():
    """显示所有学员信息"""
    # 1. 打印提示字
    print('学号\t姓名\t手机号')
    # 2. 打印所有学员的数据
    for stu in info:
        print(f"{stu['id']}\t{stu['name']}\t{stu['tel']}")


# 系统功能需要循环使用,直到用户输入6,才退出系统
while True:
    # 1. 显示功能界面
    info_print()

    # 2. 用户输入功能序号
    user_num = int(input('请输入功能序号:'))

    # 3. 按照用户输入的功能序号,执行不同的功能(函数)
    # 如果用户输入1,执行添加;如果用户输入2,执行删除... -- 多重判断
    if user_num == 1:  # 添加
        add_info()
    elif user_num == 2:  # 删除
        del_info()
    elif user_num == 3:  # 修改
        modify_info()
    elif user_num == 4:  # 查询
        search_info()
    elif user_num == 5:  # 显示所有
        print_all()
    elif user_num == 6:  # 退出系统
        exit_flag = input('确定要退出吗?yes or no')
        if exit_flag == 'yes':
            break
    else:
        print('输入的功能序号有误')

随机分配办公室

# 导入随机数模块
import random

teachers = ['喜羊羊', '美羊羊', '懒羊羊', '沸羊羊',
            '灰太狼', '红太狼', '黑大帅', '小灰灰', '村长']  # 定义老师
officeTemp = [[], [], []]  # 定义一个临时存放分配办公室的数组
office = []  # 最后输出的办公室数组

while len(teachers) > 0:  # 只要teacher数组有长度,就说明还有老师没有分配
    roomNum = random.randint(0, len(officeTemp)-1)  # 产生一个介于0~目前房间数之间的随机数
    if len(officeTemp[roomNum]) < 3:  # 判断这个房间是否满员
        # 房间没满
        officeTemp[roomNum].append(teachers[0])  # 将老师添加到该房间
        teachers.pop(0)  # 老师得到分配后就从数组中删除

        # 当最后一名老师得到分配后,while循环不会进行,需要手动将临时分组全部添加到输出数组中
        if len(teachers) == 0:
            for arr in officeTemp:
                office.append(arr)

    else:
        # 房间满了
        office.append(officeTemp[roomNum])  # 将满了的房间添加到输出数组
        officeTemp.pop(roomNum)  # 从临时数组中剔除满了的房间

# 输出最后分配结果
print(office)
# print(officeTemp)

# for循环不能用,出现不可解决BUG
for name in teachers:
    roomNum = random.randint(0, allRoomNum-1)
    if len(officeTemp[roomNum]) < 3:
        # 房间没满
        officeTemp[roomNum].append(name)
    else:
        # 房间满了
        office.append(officeTemp[roomNum])
        officeTemp.pop(roomNum)
        allRoomNum -= 1

文件拷贝

# 获取用户输入路径
print('文件路径以\'/\'为分隔符')

# 尝试了几下,Python在windows环境中只能使用绝对路径(除非是在与此py文件相同的文件夹)
filePath = input('请输入文件路径:')
# filePath = 'demo/demo/demo.py'
# filePath = "D:\\python5.0课程\\课件资料V5.0\\阶段1-Python核心编程\\代码\\06-文件操作\\aa\\bb\\demo.py"


# 获取文件名称
splitSign = filePath.rfind('/')
if splitSign == -1:
    # 文件在当前文件夹下
    fileName = filePath[:filePath.rfind(".")]
    filePathShort = ''
else:
    # 文件不在当前文件夹
    fileName = filePath[splitSign+1:filePath.rfind(".")]
    filePathShort = filePath[:splitSign]+'/'

# 获取文件后缀
fileSuffix = filePath[filePath.rfind(".")+1:]

# 构建一个新的文件名称
newFilePath = filePathShort + fileName+'_[Python备份].'+fileSuffix

# 打开文件
file = open(filePath, 'rb')

# 创建备份新文件
writeFile = open(newFilePath, 'wb')

# 向新文件写入
while True:
    fileContent = file.read(1024)
    if len(fileContent) == 0:
        break
    writeFile.write(fileContent)

# 关闭文件
file.close()
writeFile.close()