用 Python 搞事情,想要点刺激?那就离不开 随机数。想想看,游戏里的怪物刷新,抽奖程序的幸运儿,甚至机器学习模型里的初始化权重,哪个不是随机数在背后默默支持?说白了,没有随机数,程序就少了点灵魂,缺了那么点不确定性带来的惊喜。
Python 里面 random
模块就是专门用来生成 随机数 的。它就像一个魔术盒子,你告诉它要什么样的 随机数,它就能变出来。最基础的,也是最常用的,就是 random.random()
。 这个函数能生成一个 0.0 到 1.0 之间的随机浮点数,注意,是左闭右开区间,也就是说,包括 0.0,但不包括 1.0。
比如,你想要模拟抛硬币,正面朝上概率 50%,反面朝上也是 50%。就可以这么写:
“`python
import random
if random.random() < 0.5:
print(“正面朝上!”)
else:
print(“反面朝上!”)
“`
简单吧?但光有 random()
还不够,有些时候,我们需要整数,比如掷骰子。这时候,random.randint(a, b)
就派上用场了。这个函数会返回一个 a
到 b
之间的随机整数,包括 a
和 b
。 举个例子,模拟掷一个六面骰子:
“`python
import random
dice_roll = random.randint(1, 6)
print(f”你掷出了:{dice_roll}”)
“`
如果你只需要从一个列表中随机选择一个元素,random.choice(seq)
就是你的好帮手。 seq
可以是列表,元组,字符串等等。 例如:
“`python
import random
colors = [“红色”, “绿色”, “蓝色”, “黄色”]
chosen_color = random.choice(colors)
print(f”幸运颜色是:{chosen_color}”)
“`
有时候,我们需要打乱一个列表的顺序,让列表里面的元素随机排列,那就要用到 random.shuffle(x)
了。这个函数会直接修改原列表,不会返回新的列表。 比如,洗扑克牌:
“`python
import random
poker = [“红桃A”, “黑桃K”, “方块Q”, “梅花J”]
random.shuffle(poker)
print(f”洗牌后的顺序:{poker}”)
“`
random.sample(population, k)
则可以从 population
中随机抽取 k
个独立的元素,返回一个新的列表。 原来的 population
不会被改变。 想象一下,从一堆人里面随机抽取几个人中奖:
“`python
import random
participants = [“张三”, “李四”, “王五”, “赵六”, “田七”, “周八”]
winners = random.sample(participants, 3)
print(f”恭喜以下中奖者:{winners}”)
“`
生成 随机数 还有个很重要的概念,叫做“随机数种子”(seed)。 默认情况下,每次运行程序,生成的 随机数 序列都是不同的。 但如果你设置了相同的随机数种子,那么每次运行程序,生成的随机数序列就会完全相同。
这有什么用呢? 最大的用处就是:可重复性。 调试程序,或者进行科学实验的时候,我们需要保证结果的可重复性。 否则,每次运行结果都不一样,还怎么分析问题? 使用 random.seed(a)
可以设置随机数种子。 a
可以是一个整数,也可以是一个字符串。
“`python
import random
random.seed(42) # 设置随机数种子为 42
print(random.random())
print(random.randint(1, 10))
random.seed(42) # 再次设置随机数种子为 42
print(random.random()) # 生成的随机数和第一次一样
print(random.randint(1, 10)) # 生成的随机数和第一次一样
“`
你瞧,只要种子一样,生成的 随机数 就一模一样。
另外,random
模块其实并不是真正的“随机”,它生成的是伪随机数。 也就是说,它通过一个算法来模拟 随机数,并不是真正的物理随机。 但对于绝大多数的应用场景来说,伪随机数已经足够用了。 如果你需要更高质量的 随机数,可以考虑使用 secrets
模块。 这个模块是专门用来生成密码学安全的 随机数 的。 但一般来说,我们很少用到它。
关于 Python 的 随机数,我觉得最有趣的地方在于,它能让程序变得更加生动,更加不可预测。 这种不确定性,也正是编程的魅力所在。 无论是开发游戏,还是做数据分析,掌握 随机数 的使用,都能让你的程序更加强大,更加有趣。 记住,要灵活运用 random
模块里面的各种函数,根据实际需求选择合适的 随机数 生成方法,还要善用随机数种子,保证结果的可重复性。 掌握了这些技巧,你就能在 Python 的世界里玩转 随机数,创造出更多精彩的应用!
评论(0)