基于Python3.*版本将学生姓名、学号进行随机排序后生成新的序号,适用于随机生成考试座位表等场景。

1、项目目录及运行结果如下:

项目目录:

运行结果:

                                                

=

2、需要将学生的原始姓名和学号分别复制后放入name.txt与num.txt(最好在windows的文件中完成,避免出现乱码情况),注意最后一行的空行需要手动删除。

3、生成的resultTxt.txt是生成一个随机座位表的txt文本文档版本,而resultXls.txt是生成一个随机座位表的Excel版本,根据需要选择适用即可。

4、将RandomSeating.py与name.txt与num.txt三个文件放在同一个文件目录下即可运行.py文件生成resultTxt.txt与resultXls.xls文件。

5、若提示“打开学生姓名文件出错!”,那多数情况是由于编码不统一导致的,处理方法是:

        5.1 将原来的name.txt与num.txt删除,进入windows的文件中去创建这两个文件并且将内容复制进去,复制完成后不要用Pycharm等编程工具去打开,不要用Pycharm等编程工具去打开,不要用Pycharm等编程工具去打开!!!

        5.2 代码中统一使用的是"UTF-8"编码,若允许,将项目改为“GBK”或“GBK2312”等对中文支持更友好的编码方式,然后重复5.1即可。

6、提供我的测试数据及运行结果数据文件(因无法上传,只能贴出具体内容,自行取用)。懒人可以点这个链接直接下载,无需积分。随机座位表数据集。

更懒的人可以之间下载源码及测试数据集。

完整源码及测试数据集。

name.txt中的数据为姓名,如下:

张三
李四
王武
赵强
兮兮
瓜瓜

num.txt中的数据为学号,如下:

2023100123
2023100211
2023100321
2023100212
2023100223

resultTxt.txt中的数据为随机生成的txt版本的数据,如下:

座位号:2,姓名:李四,学号:2023100211
座位号:5,姓名:兮兮,学号:2023100223
座位号:4,姓名:赵强,学号:2023100212
座位号:1,姓名:张三,学号:2023100123
座位号:3,姓名:王武,学号:2023100321

resultXls.xls中的数据为随机生成的Excel版本的数据,如下:

姓名学号座位号
李四20231002115
兮兮20231002233
赵强20231002121
张三20231001232
王武20231003214

7、完整源码如下:

import random as r
import xlwt

fnname = "name.txt"
fnnum = "num.txt"
zw = "resultTxt.txt"

'''
随机抽取学号下标
begin开始的下标范围
eng结束的下标位置
n学生个数
'''


def getStudentNumber(begin, end, n):
    # 随机生产不重复的随机数
    n = r.sample(range(begin, end), n)
    return n


'''
获取文件内容的条数,主要给生产随机数的结束值和个数值使用
'''


def lengths(filename):
    studentList = []
    try:
        studentsContents = open(filename, 'r', encoding='utf-8')
        # print(studentsContents)
        for i in studentsContents:
            # print(i)
            # print(type(i))
            studentList.append(i)
    except:
        print("文件读取出错,未找到文件!")
    return len(studentList)


def stdTable(datalist):
    book = xlwt.Workbook(encoding='utf-8', style_compression=0)  # 创建excel文件
    sheet = book.add_sheet('期中考试随机座位表', cell_overwrite_ok=True)  # 创建sheet

    col = ('姓名', '学号', '座位号')  # 列名
    # 将列属性元组col写进sheet表单中
    for i in range(len(col)):
        sheet.write(0, i, col[i])  # 写入列名
    # datalist = [['吴越凌', '20181200837', '21'], ['张继成', '20181201422', '34']]
    # datalist = []
    # datalist.append(namelist)
    # datalist.append(numlist)
    # datalist.append(zuoweilist)

    for i in range(0, len(datalist)):
        data = datalist[i]
        # print(data)
        # print(type(data))
        for j in range(0, len(data)):
            sheet.write(i + 1, j, data[j])

    # datalist = ['20', '小灰灰', '20221212']  # 需要保存的数据
    # datalist = []  # 需要保存的数据
    # datalist.append(zw)
    # datalist.append(name)
    # datalist.append(xuehao)

    savepath = 'resultXls.xls'
    book.save(savepath)  # 保存
    print("随机座位表生存完毕!")


def result(f1, f2, f3):
    allStudnet = []
    # allList = []
    n = lengths(f2)
    # 随机座位号
    randomIndex = getStudentNumber(0, n, n)
    # 根据随机姓名选择的随机姓名
    randomName = []
    # 根据随机号取值姓名
    try:
        # print(randomIndex)
        stdNames = open(f1, 'r', encoding='utf-8')
        stdNums = open(f2, 'r', encoding='utf-8')
        stdNamesList = []
        stdNumsList = []
        # 从文件中读取的学生姓名存入stdNamesList
        for i in stdNames:
            stdNamesList.append(i.replace("\n", ""))
        # 从文件中读取的学生学号存入stdNumsList
        for i in stdNums:
            stdNumsList.append(i.replace("\n", ""))
        # allList.append(stdNamesList)
        # allList.append(stdNumsList)
        # allList.append(randomIndex)
        # print(allList)
        # allStudnet = [
        #     ["张三",2022,23],
        #     ["李四"],2023,26,
        #     ["王五",2911,51]
        # ]
        newRandomIndex = []
        for i in randomIndex:
            newRandomIndex.append(i + 1)

        for i in randomIndex:
            astd = []
            astd.append(stdNamesList[i])
            astd.append(stdNumsList[i])
            astd.append(newRandomIndex[i])
            allStudnet.append(astd)
        # print(allStudnet)
        stdTable(allStudnet)
        # 根据随机数组装随机座位号、姓名、学号
        try:
            z = open(zw, 'w', encoding='utf-8')
            result = []
            for i in randomIndex:
                oneR = "座位号:" + str(i + 1) + ",姓名:" + \
                       stdNamesList[i] + ",学号:" + stdNumsList[i]
                z.write(oneR + "\n")
                result.append(oneR)
            # print(result)
        except:
            print("操作座位表出错!")

    except:
        print("打开学生姓名文件出错!")
    # print(n)
    # print(len(randomIndex))
    # print(type(randomIndex))
    # randomIndex.sort()
    # print(randomIndex)


result(fnname, fnnum, zw)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰灰老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值