Python随机抽查,手把手教你探索random魔法
疫情期间的网课上
你有被熊孩子气到炸吗
网线的两端,是不是这样巧合呢
复课后的课堂上
你有被熊孩子气到疯吗
等下,跑题了,下面言归正传
关键知识点:random库、判断、循环、列表、异常处理、文件的读取等。
开发环境:Python 3.7(32位)、PyCharm 2020.1、Win 10(64位)。
测试环境:打包文件在Win 7(32位&64位)、Win 10(32位&64位)下测试正常运行。
1.场景概述
假如你是一名老师,平时是否有一种痛叫选择学生困难症?
随机抽查部分同学的周末作业
随机抽查部分学生的课文背诵情况
下课后随机抽查部分学生的当堂练习等等。不管你是教数学的体育老师、还是教语文的英语老师,平日都会频繁地提问学生、抽查学生
为了治愈选择困难症,为了去人为因素,公平、随机地抽取学生,一款“随机选”神器应运而生。用上后,保证你腰不酸了、背不痛了、腿也不抽筋了
2.需求分析
1.从固定姓名(数)的文件中,随机抽取任意数量的姓名,打印到屏幕。
2.继续从剩下的姓名中随机抽取任意数量的姓名,并打印到屏幕。
3.当所有姓名被选完后,姓名名单恢复初始值。
4.进入新一轮随机选状态。
3.实现步骤
首先,将所有的(学生)姓名进行保存(用记事本是为了文件的强兼容性、体量也小)。
按照每行一个姓名的格式,方便后续读取。
然后,导入random库。
import random
接着,将文件中的姓名进行读取、放入列表中。
names = [] # 创建空列表with open('names.txt', 'r') as f: '''对文件中的姓名进行读取并放入空列表中''' for i in f.readlines(): names.append(i[:-1]) # 记事本文件中,每行姓名后面隐藏着一个回车符,用这个切片方式,可以去掉random_names = names.copy() # 用列表的copy方法,对存放原始数据的列表names进行深拷贝,赋值给临时列表random_names,防止原始数据丢失
最后,下面的核心代码逻辑用来实现选取任意数量的姓名,打印到屏幕。当所有姓名被选完后,姓名名单恢复初始值,进入新一轮随机选状态。
num = 0 # 打印到屏幕的每个姓名前面的序号,初始化为0while True: '''实现选取任意数量的姓名(数),打印到屏幕。当所有姓名被选完后,姓名名单恢复初始值,进入新一轮随机选状态。''' try: '''为避免在输入姓名数量的时候可能会输入非数字值,这里用异常处理语句处理''' if len(random_names) == 0: '''当所有姓名被选完后,初始化各项数值,进入新一轮随机选状态。''' print('\n' + '+' * 100 + '\n上一轮随机抽取已经结束,下一轮开始了:\n' + '+' * 100 + '\n') num = 0 random_names = names.copy() random_number = int(input('请从' + str(len(random_names)) + '人中输入要随机抽取的数量:')) if random_number > len(random_names): '''当输入的姓名数值大于存量数值时,跳到下轮循环''' continue print('-' * 100) for i in range(random_number): '''选取指定数量的姓名,打印到屏幕''' index = random.randint(0, len(random_names) - 1) num += 1 print(num, random_names[index]) del random_names[index] # 上面被随机选中的姓名打印完后即从列表中删除,防止干扰下次随机选取 print('-' * 100) except ValueError: pass
4.完整代码
5.写在后面
假如你是一名老师,是否get到这个技巧了呢?其实,这个程序除了可以随机抽取任意数量的学生姓名外,也适用于任何随机筛选内容的场景。聪明如你,快发挥强大的发散思维能力,动手试一试吧。
本站内容搜集自互联网,版权归原作者所有。如有侵权,请来信告知,我们将删除相关内容。