Python随机数 random
中等10让程序学会“抽签”——Python随机数 random 模块详解
你有没有玩过“石头剪刀布”或者“抓阄”游戏?每次出拳或抽签,结果都是不确定的——这就是随机。在Python编程中,如果我们想让程序也拥有这种“不确定”的能力,比如掷骰子、抽奖、猜数字,就需要用到random模块。它就像一个神奇的魔术袋,里面装着各种随机数生成工具,你只要伸手一掏,就能得到意想不到的结果。
使用前,先打开魔法口袋
Python的random模块不是默认就能用的,需要先告诉Python:“我要用这个模块啦!”这就像你要进游乐园,必须先买票一样。在代码最前面写:
import random # 导入随机数模块
只要写了这一行,后面就能用random里的所有功能了。
三种最常用的“抽签”方式
1. 像掷骰子一样生成随机小数
random.random() 会返回一个0到1之间的小数,比如0.123、0.987。注意:它包含0,但不包含1(数学上记作 [0, 1))。这有什么用?比如你想模拟一个“幸运指数”,从0(完全不幸运)到0.999…(接近幸运满分)。
import random
lucky_value = random.random() # 生成一个0~1之间的随机小数
print("今天幸运指数是:", lucky_value) # 可能是0.634...
2. 像抽扑克牌一样生成随机整数
random.randint(a, b) 会返回一个在 [a, b] 之间的整数,包括两端的a和b。就像掷一个六面骰子,可能得到1、2、3、4、5、6中的任意一个。生活里,老师点名时用随机数选学号,或者玩“大富翁”游戏时决定走几步,都可以用这个。
import random
dice = random.randint(1, 6) # 生成1到6的随机整数,模拟掷骰子
print("你掷出了:", dice)
# 再比如,模拟抽一个班级里的座位号(1~40号)
seat_number = random.randint(1, 40) # 随机选一个座位号
print("幸运座位是:", seat_number)
3. 像抽名字一样随机选择一个元素
如果你的数据是一个列表(比如全班同学的名单),想随机选一个人,用 random.choice(列表) 最方便。它就像从一堆写着名字的纸条里随机抽一张。
import random
students = ["小明", "小红", "小刚", "小丽"] # 四个同学的名字
lucky_student = random.choice(students) # 随机选一个
print("今天被老师点名的同学是:", lucky_student)
# 再比如,从零食袋里随机选一个口味
flavors = ["原味", "番茄味", "烧烤味", "芝士味"]
today_snack = random.choice(flavors)
print("今天吃的薯片口味是:", today_snack)
更多实用的随机函数
除了上面三种,random模块还有几个常用的“进阶”工具,让随机变得更灵活。
random.uniform(a, b):生成指定范围内的随机小数
比如想生成一个1.5到3.8之间的小数(身高、价格、时间),用 uniform 很合适。它和 randint 类似,但返回的是小数,并且包含a和b任意一端(具体看浮点数精度)。
import random
price = random.uniform(10.0, 20.0) # 生成10.0到20.0之间的随机价格
print("今天的零食价格是:", round(price, 2), "元") # 保留两位小数
random.randrange(start, stop[, step]):按步长随机选整数
类似于 range,但随机返回其中一个整数。比如你想从0开始,每隔5取一个数(0,5,10,15,…)中随机选一个:
import random
# 在1、3、5、7、9(奇数)中随机选一个
odd_number = random.randrange(1, 10, 2) # 从1开始到9,步长为2
print("随机奇数:", odd_number)
random.shuffle(列表):把列表里的顺序打乱
就像洗牌一样,把列表中的元素随机重新排列。注意:它会直接修改原列表,不返回新列表。
import random
cards = ["A", "2", "3", "4", "5"] # 五张扑克牌
random.shuffle(cards) # 洗牌,原列表被改变
print("洗牌后:", cards) # 可能输出 ['3', 'A', '5', '2', '4']
random.sample(列表, k):从列表中随机抽取多个不重复的元素
比如老师要随机选3名同学打扫卫生,用 sample 就可以做到不重复抽取。
import random
students = ["小明", "小红", "小刚", "小丽", "小华"]
chosen = random.sample(students, 3) # 随机选3个人,不重复
print("被选中的值日生:", chosen)
新手最容易犯的三个错误
-
忘记导入模块
直接写random.randint(1,6)会报错NameError: name 'random' is not defined。必须先写import random。 -
randint的参数顺序搞反
random.randint(10, 1)是不允许的,因为第一个参数必须小于等于第二个参数。如果写反了,Python会报错ValueError: empty range。 -
以为random每次都一样
随机数每次运行都不同,但如果想让测试时每次结果相同,可以用random.seed()固定“种子”。否则不要担心,它真的随机。
完整可运行的示例:抽奖转盘游戏
下面是一个综合运用 random 的抽奖游戏。你可以输入自己的名字,然后程序模拟转盘,随机抽取一个奖品。运行看看,每次结果都不一样哦!
import random # 导入随机数模块
# 奖品列表(可以自由修改)
prizes = ["谢谢参与", "棒棒糖", "铅笔一支", "笔记本", "玩具小汽车", "免作业卡"]
# 输入玩家名字
player_name = input("请输入你的名字:")
# 模拟转盘旋转:随机选一个奖品
index = random.randint(0, len(prizes) - 1) # 随机生成奖品列表的下标
lucky_prize = prizes[index] # 根据下标取出对应奖品
# 输出结果
print("抽奖结果:", player_name, "获得了——", lucky_prize)
# 可选:再抽一次?由你决定!
让随机数“听话”:seed的妙用
有时候我们想调试程序,希望每次运行都出现同样的“随机”结果(比如验证代码逻辑是否正确)。这时可以用 random.seed(n) 给随机数生成器一个“种子”。相同的种子会产生相同的随机数序列。
import random
random.seed(42) # 设定种子为42
print(random.randint(1, 10)) # 每次运行,这一行都输出相同数字
print(random.random()) # 也是固定的
# 如果去掉 seed,每次结果都不同
注意:只在测试或演示时使用 seed,正常游戏不要加,否则就失去随机性啦。
下一步你可以探索什么?
math模块:与数学有关的函数(如求平方根、四舍五入),可以和random结合做更复杂的模拟。- 其他随机函数:
random.gauss()生成符合正态分布的随机数(比如模拟考试成绩分布)。 - 海龟画图 + random:用随机数让海龟随机移动,画出意想不到的图案。
- 游戏编程:用random控制敌人出现、攻击伤害、掉宝概率等。
现在,你已经掌握了Python随机数的核心用法。快去用random给你的游戏、小工具或者学习程序加点“不确定”的惊喜吧!
例题精讲
在Python中,以下哪个函数可以生成一个闭区间 [1, 10] 内的随机整数?
执行以下代码,输出结果不可能的是哪一个? import random fruits = ['苹果', '香蕉', '橘子', '葡萄'] print(random.choice(fruits))
在Python中,random.random() 函数可以生成一个 0 到 1 之间的随机浮点数,包括 0.0 和 1.0。
使用 random.shuffle() 函数可以原地打乱列表的顺序,该函数没有返回值。
模拟掷一个六面骰子(点数1~6),输出随机点数。请补全代码:
import random
print(___)