# 第1种:导入整个库(新手推荐,不易出错,用法统一)import random# 第2种:导入指定函数(代码更简洁,适合熟练后使用)from random import randint, choice
# 生成1-100之间的随机整数,包含1和100num = random.randint(1, 100)print(num)# 经典猜数字游戏核心代码answer = random.randint(1, 100)print("猜数字游戏!数字范围1-100,快试试吧")
# 生成0-10之间的随机偶数(步长2)n = random.randrange(0, 11, 2)print(n)# 生成1-10之间的随机奇数m = random.randrange(1, 10, 2)print(m)
经常会被我用来在课堂上进行随机点名回答问题# 课堂随机点名name_lst = ["小明", "小红", "小刚", "小丽", "小亮"]name = random.choice(name_lst)print(f"被点到的同学是:{name}")# 随机抽取一个字母y = random.choice("abcdefghijklmn")print(f"随机字母:{y}")
)# 重复抽取3个中奖者,允许重复中奖name_lst = ["小明", "小红", "小刚", "小丽", "小亮"]name = random.choices(name_lst, k=3)print(f"重复中奖名单:{name}")# 带权重的抽奖:一等奖10%,二等奖30%,三等奖60%lst = ["一等奖", "二等奖", "三等奖"]weights = [10, 30, 60] # 权重为相对比例,无需总和为100result = random.choices(lst, weights=weights, k=1)print(f"抽奖结果:{result[0]}")
从序列中随机抽取多个不重复的元素,k 值不能超过序列的总长度,适合不重复抽奖、验证码生成等
(例如彩票站的机选,就是每一组里的7个数字等,都是不重复)
# 抽3个不重复的中奖者,每人仅能中奖1次lst = ["小A", "小B", "小C", "小D", "小E"]n = random.sample(lst, k=3)print(f"不重复中奖名单:{n}")# 随机生成4位不重复的数字验证码c = random.sample("0123456789", k=4)c1 = "".join(c) # 拼接字符print(f"4位数字验证码:{c1}")
random.seed(数字):设置随机数种子,种子数字固定后,后续生成的随机数序列就会完全固定,结果可复现的# 不设置种子,每次运行结果都不一样print(random.randint(1, 100))print(random.randint(1, 100))# 设置种子,每次运行结果完全一致random.seed(666) # 种子数字可自定义,固定数字就固定结果print(random.randint(1, 100)) # 每次运行都是固定值print(random.randint(1, 100)) # 每次运行都是固定值
⌨️好玩案例:✍️案例1:年会抽奖小程序(不重复中奖)import random# 参与抽奖的人员名单lst = ["A", "B", "C", "D", "E", "F", "G", "H", "J"]# 剩余抽奖名单(避免重复中奖)lst_1 = lst.copy()# 抽一等奖d1 = random.sample(lst_1, k=1)print(f"一等奖中奖名单:{d1}")# 从剩余名单中删除已中奖人员for name in d1:lst_1.remove(name)# 抽二等奖d2 = random.sample(lst_1, k=3)print(f"二等奖中奖名单:{d2}")for name in d2:lst_1.remove(name)# 抽三等奖d3 = random.sample(lst_1, k=5)print(f"三等奖中奖名单:{d3}")
✍️案例2:数字 + 字母 混合验证码生成import random# 验证码字符库:数字+大小写字母n = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"# 随机抽取4个不重复的字符sn = random.sample(n, k=4)# 拼接成字符串code = "".join(sn)print(f"4位混合验证码:{code}")
✍️案例3:随机8位强度密码生成import random# 密码字符库:数字+大小写字母+特殊符号m1 = "abcdefghijklmnopqrstuvwxyz"m2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"m3 = "0123456789"m4 = "!@#$%^&*()"# 密码规则:至少2个大写、2个小写、2个数字、2个特殊符号password = []password += random.sample(m1, 2)password += random.sample(m2, 2)password += random.sample(m3, 2)password += random.sample(m4, 2)# 打乱密码顺序random.shuffle(password)# 拼接最终密码password_new = "".join(password)print(f"8位强密码:{password_new}")
