Python随机抽查部分学生,手把手教你学会random

liftword5个月前 (02-05)技术文章87

疫情期间的网课上

你有被熊孩子气到炸吗

网线的两端,是不是这样巧合呢

复课后的课堂上

你有被熊孩子气到疯吗


等下,跑题了,下面言归正传

关键知识点: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  # 打印到屏幕的每个姓名前面的序号,初始化为0
while 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到这个技巧了呢?其实,这个程序除了可以随机抽取任意数量的学生姓名外,也适用于任何随机筛选内容的场景。聪明如你,快发挥强大的发散思维能力,动手试一试吧。

相关文章

Python 随机字符串_python 生成随机字符

在很多时候我们可能需要生成一些随机字符串。Python 也为我们提供了生成随机字符串的方法和函数。这个函数是在 random 库中定义的函数 choice。通常 choice 将会从给定的字符串中挑选...

在PLC中生成随机数_在plc中生成随机数的代码

有时为了某些测试需求,需要仿真产生一些数据。这时,我们可以通过调取指令或自行编写程序来生成这些随机数据。以下以博途为例,简要说明了随机数产生的几种方式:一、读取系统时间的纳秒作为随机数以固定周期直接将...

用Python做个随机点名系统,禁止逃课

今天给大家分享一个随机点名的系统并把它打包成exe,压迫感来了没有~一、实现随机点名# -*- coding: UTF-8 -*-import tkinter as tkfrom pandas imp...

玩转 Python 中的随机数_python编程随机数

开发中我们经常遇到需要随机数的场景,比如为了用户密码更安全我们有时会加盐,也就是将用户原密码连接上一串随机字符然后加密保存,又比如我们可能需要随机展示某张图片等等。今天,我们就来理一理 Python...

一日一技:Python 中的random模块_python random模块详解

Python 中的random模块Python随机模块教程展示了如何在Python中生成伪随机数。随机数发生器随机数生成器(RNG)生成一组值,这些值在外观上不显示任何可区分的模式。随机数发生器分为两...

Python启航:30天编程速成之旅(第21天)- random

喜欢的条友记得关注、点赞、转发、收藏,你们的支持就是我最大的动力源泉。前期基础教程:「Python3.11.0」手把手教你安装最新版Python运行环境讲讲Python环境使用Pip命令快速下载各类库...