在我们的学生时代,上课总会经历过被老师抽号次或者抽名字抽到自己起来背书或者回答问题吧。那时候我就恨死这个抽号次的程序了。然而就在今天,我头脑一热就自己想写一个抽号次的程序了,也算是回味下当年的学生时代吧。哈哈哈哈
本篇文章介绍的是 根据指定数据生成不重复的数字
其实想要生成不重复的随机数很简单,思路就是:
- 准备原始数据,用于随机数的产生
- 用random库中的choice()方法随机从指定的数据中生成数据
- 再将随机生成的数据从原始数据中删除掉
- 然后进入下一次循环,也就是执行第二和第三步骤
- 直到列表为空的时候,再依次执行第一二三四步骤
废话不说,直接上代码
import random
# 根据指定需求 随机生成不重复的数字
class Main:
def __init__(self,cycles=0):
# 循环次数 设置默认值为0
self.cycles = cycles
# 设置想要产生多少数
self.number_count = 49
# 创建一个空列表,用于存储生成的指定数字
self.number_list = []
# 设置次数
self.count = 0
# 调用方法,生成指定的数组
self.get_number_list()
def random_number(self):
# 如果 self.cycles 为0时,就进入无限死循环
if self.cycles == 0:
while True:
self.count += 1
if len(self.number_list) != 0:
# 调用 删除已经随机生成的数字 方法
self.remote_number(self.count)
else:
print("已经没有数字了")
print("重新开始了")
self.get_number_list()
else:
# 根据用户指定的次数 进行循环
for i in range(1,self.cycles+1):
self.count += 1
# 如果原始数据还有数据
if len(self.number_list) != 0:
# 调用 删除已经随机生成的数字 方法
self.remote_number(self.count)
# 设计一个方法,用于生成指定的数据
def get_number_list(self):
# 将count值设为0,重新开始生成新数据
self.count = 0
for i in range(1, self.number_count+1):
self.number_list.append(i)
print(f"开始的数据:{self.number_list}")
print("*"*100)
# 设计一个方法,用于删除已经随机生成的数字
def remote_number(self,count):
# 根据已有的列表 随机生成数
number = random.choice(self.number_list)
# 根据随机生成的数 从 原始数据中 删除
self.number_list.remove(number)
print(f"删除了:{number}")
print(f"第【{count}】次删除后的数据:{self.number_list}")
# 判断原始数据中是否还包含删除过的数据
is_contain = number in self.number_list
print(f"(number_list是否包含{number}:{is_contain})")
m = Main(10)
m.random_number()
该思路可用于学生抽号机的设计,界面你们可以自己设计,逻辑可以参照上面的的代码。
当然了,这里也有本人自己手写设计的带有界面的随机抽号机,有需要的可以访问以下网址下载:
https://gitee.com/guo-yuyuan/randomMachine,虽然说界面有点丑,但是功能实现的个人感觉还是可以的
当然了,如果没有码云账号的小伙伴试试在本站下载:基于python3.7+pyside2搭建的简单的随机抽号机-Python文档类资源-优快云下载