怎么用python制作随机点名软件_基于Python的课堂点名器V2

本文介绍了Python实现的随机点名器V2,增加了错误处理和未到名单导出功能。通过读取CSV文件获取学生名单,利用random模块随机点名,并在用户输入错误时进行处理。未到学生名单会被写入新的CSV文件。整个程序通过函数模块化,提高了可扩展性。
摘要由CSDN通过智能技术生成

前言

继续之前的简单课堂点名器V1,我们现在有了新的需求。

需求分析

我们的需求是:

?i=2020031017140193.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Fuc19taW4=,size_16,color_FFFFFF,t_70然后我们想想大概的思路。

在项目源文件目录下创建csv格式文件students_list并录入所有学生信息(创建excel文件,然后另存为csv格式)

在python中导入csv模块(若没有就打开cmd,使用pip命令下载csv),利用open()、csv中的reader()等函数搭配,得到数据,然后通过项目1的思路(这里不再赘述),达到项目2的目的。

随机点名可以先得出一个含所有学生姓名的list,然后使用random模块中的sample()函数,得到含打乱的学生姓名的list,利用for循环实现随机点名;

将未到同学的信息输出且导入新的csv文件可以使用csv的writer()函数和open()等函数搭配,将未到的同学写入csv文件中;

点名环节需要处理不按要求输入的用户,可以单独定义一个list,然后最后再进行点名;若同一个学生答道再次输入错误,该同学将会被导入未到学生名单。

代码实现

然后我们可以开始写代码来实现V2了。

# 点名器V2

import csv

import random

'''

功能:读入csv文件学生名单

输入:文件名

返回值:学生名单(list),学生全部信息(dict)

'''

def file_in(file_name):

students_info = {}

students_name = []

with open(file_name, newline='') as info:

reader = csv.reader(info)

for row in reader:

students_info[row[0]] = row[1]

students_name.append(row[0])

return students_info, students_name

'''

功能:产生随机学生名单

输入:学生名单(list)

返回值:打乱的学生名单(list)

'''

def new_list(students_name):

student_upset_name = random.sample(students_name, len(students_name))

return student_upset_name

'''

功能:完成点名器的初始化

输入:学生名单(list)

返回值:学生信息(dict)和打乱的学生名单(list)

'''

def dmq_init(file_name):

student_info = file_in(file_name)[0]

# print(students_wg_dict)

student_upset_name = new_list(file_in(file_name)[1])

# print(students_wg_list)

return student_info, student_upset_name

'''

功能:点名

输入:打乱的学生名单(list)

返回值:未到学生名单(list)

'''

def dmq_dm(student_upset_name):

student_late = []

student_dm_wrong = []

for name in student_upset_name:

temp = input(name + "到了吗?(输入到或没到)")

if temp == "到":

continue

elif temp == "没到":

student_late.append(name)

else:

student_dm_wrong.append(name)

print("请按要求输入!该名字被放置最后点名。")

if student_dm_wrong:

for name in student_dm_wrong:

temp = input(name + "到了吗?(输入到或没到)")

if temp == "到":

continue

elif temp == "没到":

student_late.append(name)

else:

print("仍然未按照要求输入!算入未到名单!")

student_late.append(name)

return student_late

'''

功能:写入csv文件,输出未到名单

输入:未到学生名单(list)和学生全部信息(dict)

返回值:无

'''

def dmq_file_in(students_late, student_info, num):

students_late_info = []

for name in students_late:

students_late_info.append([name, student_info[name]])

print_info(students_late_info, num)

with open("late_students_info.csv", "w", newline="") as file_in:

file_writer = csv.writer(file_in, quotechar='|', quoting=csv.QUOTE_MINIMAL)

for info in students_late_info:

file_writer.writerow(info)

print("\n已导出未到学生名单!文件位置位于当前目录下late_students_info.csv")

'''

功能:输出传入的 特定 列表数据

输入:特定的list [[*, *], [*, *], [*, *], ...]

返回值:无

'''

def print_info(special_list, num):

count = 0

print("未到名单如下("+str(num)+"个一行):")

for i in special_list:

if (count % num == 0) & (count != 0):

print()

print(i[0]+","+i[1], end=' ')

count += 1

# 主函数

def main(file_name):

# 5代表5个名字一行输出

dmq_file_in(dmq_dm(dmq_init(file_name)[1]), dmq_init(file_name)[0], 5)

main("students_list.csv")

在这里的csv文件都是放在与py文件同一路径下的。

csv模块以及random模块的使用参考官方Python API:

https://docs.python.org/zh-cn/3.8/library/csv.html

https://docs.python.org/zh-cn/3.8/library/random.html

运行截图

因为目标csv文件里面有80个学生信息,测试的时候要输入80次。。。。太麻烦了,所以我创了一个10个学生信息的csv表,命名为test.csv,前两张测试图就是测试test.csv文件得出的;

?i=20200310172417132.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Fuc19taW4=,size_16,color_FFFFFF,t_70第二张测试了输入格式错误时,程序的输出;

?i=20200310172506445.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Fuc19taW4=,size_16,color_FFFFFF,t_70第三张我们测试全部的80个学生的csv表;

?i=20200310172635354.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Fuc19taW4=,size_16,color_FFFFFF,t_70

总结

相对于V1,V2的功能有很多的提升,我们还用到了random和csv两个模块,random模块是为了实现随机点名,只用到了sample();csv模块用到了reader()和writer(),搭配open()函数完成文件读入写出。另外,相对V1,V2最大的不同就是使用了函数,把程序分成了很多函数,这样也提高了程序的可扩展性。

标签:info,点名,name,Python,list,students,V2,student,csv

来源: https://blog.csdn.net/Ans_min/article/details/104778524

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值