python IO Demo

点名功能,带记忆化的,班级所有人都被点名之后,就会重置班级状态。

使用方法:程序目录新建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])



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值