点名功能,带记忆化的,班级所有人都被点名之后,就会重置班级状态。
使用方法:程序目录新建record文件夹,里面放置班级txt(例如:class1file.txt class2file.txt class3file.txt
)
不限制班级数量,没做不存在该班级的异常处理
文本文档内部格式 姓名,0
或姓名,1
import os
import random
from queue import Queue
def resetclass(classnumber):
f1 = open("record/" + "class" + str(classnumber) + "file.txt", 'r', encoding='UTF-8')
f2 = open("tempfile.txt", 'w', encoding='UTF-8')
for i in f1:
j = i.replace('\n','') # 去除字符串末尾换行符
arr = j.split(",")
f2.write(arr[0] + "," + "0\n")
f1.close()
f2.close()
str1 = 'tempfile.txt'
str2 = "record/"+"class"+str(classnumber)+"file.txt"
os.remove(("record/"+"class"+str(classnumber)+"file.txt"))
os.renames(str1,str2)
print(""+str(classnumber)+"班已重置!")
def fass(classnumber):
num_list = [] #存该班未被点名的人,的名字
# 返回可选学号
f1 = open("record/"+"class"+str(classnumber)+"file.txt", 'r', encoding='UTF-8')
f2 = open("tempfile.txt", 'w', encoding='UTF-8')
for i in f1:
j = i.replace('\n','')
arr = j.split(",")
if arr[1][0] == '0':
num_list.append(arr[0]) # 没被点过就存进去
ssize = len(num_list) # 没被点过的人数
if ssize == 0: # 如果所有人都被点过了,那就重置这个班级,再手动点名和终止
# 重置该班级被点名记录
f1.close()
f2.close()
resetclass(classnumber) # 重置这个班级
fass(classnumber) # 手动点名
return # 终止
name = num_list[random.randint(0,ssize-1)] # 幸运儿名字
f1.seek(0) # 把文件指针重置到开头
for i in f1:
j = i.replace('\n', '') # 去除字符串末尾换行符
vis1 = False # 记录这个人是不是幸运儿
arr = j.split(",")
if arr[0] == name:
vis1 = True # 是
if vis1 == False: # 不是幸运儿,那么默认信息就是0,直接写入临时文件即可
f2.write(i);
else: # 是幸运儿,就要手动把信息改成1,再写入临时文件
f2.write(""+arr[0]+","+"1\n")
# 替换两个文件
f1.close()
f2.close()
str1 = 'tempfile.txt'
str2 = "record/"+"class"+str(classnumber)+"file.txt"
os.remove(("record/"+"class"+str(classnumber)+"file.txt"))
os.renames(str1,str2)
print("点到的人是:"+name)
if __name__ == '__main__':
print("输入 本次上课 共有几个班级 :")
n = input()
n = int(n)
arr = []
print("依次输入"+str(n)+"个班级的班级号(1~n)空格隔开:")
for i in range(n):
m = input()
arr.append(int(m))
for i in range(n):
print("点名" + str(arr[i]) + "班的人")
fass(arr[i])