赛博红兔的科技博客

CyberHongTu shares news, insights, and musings on fascinating technology subjects.


和我一起玩Python:43. Python随机数处理random模块

大家好,我是赛博红兔!今天我们要学习Python的另一个常用模块——random模块。在编写程序时,随机数有很多应用场景,比如生成验证码、随机抽样,或者实现简单的游戏逻辑。这些都离不开随机数的生成。今天我们一起来看看如何用Python标准库自带的random模块实现这些需求。首先,random模块的主要功能是生成伪随机数。注意这里的“伪”字,随机数是通过某种算法生成的,虽然看似随机。如果需要真正的随机数,可以使用secrets模块,它更适合生成高安全性的随机数,比如密码和令牌。回到random模块,它提供了多种生成随机数的方法,可以生成整数、浮点数,甚至随机打乱列表。接下来,让我们逐一介绍。


1. 随机整数生成

import random
# 生成1到10之间的随机整数
random_int = random.randint(1, 10)
print("生成的随机整数:", random_int)

我们可以用randint(a, b)生成一个**闭区间[a, b]**的随机整数。例如,randint(1, 10)每次都会生成一个1到10之间的随机整数。这个方法非常适合生成范围内的随机整数。


2. 随机浮点数生成

# 生成5到15之间的随机浮点数
random_uniform = random.uniform(5, 15)
print("生成的随机浮点数(5-15):", random_uniform)

如果需要生成随机的浮点数,可以用uniform(a, b)生成一个范围在[a, b]之间的随机小数。例如,uniform(5, 15)会生成一个5到15之间的浮点数。


3. 随机选择元素

names = ["小红", "小明", "小强", "小花"]
random_name = random.choice(names)
print("随机选择的名字:", random_name)

当我们需要从一个列表或序列中随机挑选一个元素时,可以使用choice(seq)方法。例如,从学生名单里随机抽一个人。每次运行choice(names),都会随机返回一个名字。


4. 从序列中随机抽样

students = ["小红", "小明", "小强", "小花"]
random_students = random.sample(students, 2)
print("随机抽取的学生:", random_students)

如果需要从序列中抽取多个元素,使用sample(seq, k)方法非常方便。这里,sample(students, 2)会从学生名单中随机选出2个学生。sample保证结果不会重复,并且不会改变原始列表的顺序。


5. 加权随机选择

import random
# 设置水果列表和权重
fruits = ['苹果', '橙子', '香蕉']
weights = [1, 2, 3]
# 根据权重随机选择5个水果
result = random.choices(fruits, weights=weights, k=5)
print("加权随机选择的结果:", result)

choices(seq, weights, k)可以进行加权随机选择。权重通过weights参数设置,例如,这里香蕉的权重是3,所以它的出现概率最高。k表示选择次数,返回的结果允许重复。


6. 随机打乱序列

cards = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
random.shuffle(cards)
print("打乱后的牌:", cards)

使用shuffle(seq)方法可以随机打乱列表中的元素顺序,非常适合像扑克牌洗牌这样的场景。每次运行shuffle(cards),列表顺序都会不同。


7. 生成随机数种子

random.seed(42)
print("固定种子的随机数:", random.randint(1, 100))

random模块生成的随机数是伪随机,这意味着可以通过“种子”(seed方法)控制随机数序列。设置种子值后,随机数序列变得可重复。在调试代码或需要重复实验时,这非常有用。例如,设置seed(42),再调用randint生成随机数时,每次运行结果都是固定的。如果不设置种子,random模块会默认使用系统时间作为种子,从而使每次运行的结果不同。


8. 为什么是种子42?

最后聊聊一个有趣的话题:为什么很多代码示例用seed(42)作为种子?在科幻小说《银河系漫游指南》中,42被称为“生命、宇宙及一切的答案”。因此,42成为编程文化中的一个彩蛋,也成了种子值的惯用选择。


总结

Python的random模块为我们提供了丰富的随机数生成方法,支持整数、浮点数的生成,以及随机选择、抽样、打乱序列等操作。通过seed方法,还可以控制随机数的可重复性。好啦,本频道将在B站和油管同步更新。如果喜欢我的内容,请点赞、订阅和分享,这样你就不会错过我的更新。欢迎在评论区提出你的想法和建议!今天就到这里,我们下次再见!



Leave a comment