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版本的数据,如下:
姓名 | 学号 | 座位号 |
李四 | 2023100211 | 5 |
兮兮 | 2023100223 | 3 |
赵强 | 2023100212 | 1 |
张三 | 2023100123 | 2 |
王武 | 2023100321 | 4 |
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)