作为一个新手,写的关于Python的一个小功能
import random
n1 = open('name','r',encoding='utf-8')
n2 = open('name_did','r+',encoding='utf-8')
n3 = open('name_leave','r',encoding='utf-8')
name = n1.read().splitlines()
name_did = n2.read().splitlines()
name_leave = n3.read().splitlines()
while name:
n = random.choice(name)
if len(name) == len(name_did) + len(name_leave):
print("所有的同学都回答了")
n2.seek(0)
n2.truncate(0)
if n in name and (n not in name_did )and( n not in name_leave):
print(n)
n2.write(n+'\n')
break
这是总体代码
n1,n2,n3分别是对三个不同的文件进行读取,r表示read只读,r+表示可读可写。
我这里n1文件是名单,n2是已被点名的人,被点名的人是需要修改的所以是r+,n3表示请假的人。
n1 = open('name','r',encoding='utf-8')
n2 = open('name_did','r+',encoding='utf-8')
n3 = open('name_leave','r',encoding='utf-8')
name = n1.read().splitlines()
name_did = n2.read().splitlines()
name_leave = n3.read().splitlines()
到这里其实就是一个前期准备工作,准备好了三个文件,分别代表的含义。
主体代码部分是一个while循环,采用了random模块来完成随机的效果。
while name:
n = random.choice(name)
if len(name) == len(name_did) + len(name_leave):
print("所有的同学都回答了")
这是当名单文件name的长度与点过的人name_did文件加上name_leave请假的人长度一致时,说明在场的所有人已被点过。输出“所有同学都回答了”,n代表随机从名单中抽取。
n2.seek(0)
n2.truncate(0)
seek是将n2的指针从头开始,n2是以及回答问题的人, n2.truncate(0)覆盖文件中的数据,这里表示将文件归零。
if n in name and (n not in name_did )and( n not in name_leave):
print(n)
n2.write(n+'\n')
break
最后一段是简单的if语句判断,只要不在name_did和name_leave,点过和请假的名单中,那么就随机输出,同时在name_did中加上这个人的名字。