- 时长: 90 分钟
- 教学目标:
- 理解程序中“随机性”的概念,知道为什么需要随机数。
- 学习如何导入和使用 Python 的
random
模块。 - 掌握
random
模块中生成整数随机数 (random.randint()
) 和浮点数随机数 (random.random()
) 的方法。 - 学会从序列(列表、元组等)中随机选择一个元素 (
random.choice()
)。 - 初步了解如何使用
random
模块结合循环和条件判断进行简单的随机模拟(如模拟扔硬币、掷骰子)。 - 通过练习,提升运用随机性解决问题的能力。
课程内容
1. 复习与引入 (10 分钟)
- 复习: 快速回顾前一节课的错误处理
try-except
,以及我们学过的数据结构(列表、字典、元组、集合)和控制结构(循环、条件判断)。 - 提出问题: 老师提问:“我们写的程序到目前为止,每次运行结果都是一样的,只要输入一样,输出就一样。这很好,因为程序要准确。但是,如果我想做一个扔骰子的游戏,每次运行都掷出一样的点数就没意思了。如果我想做一个扑克牌游戏,发牌时顺序不能固定。如果我想让电脑猜一个数字让我来猜,电脑怎么‘想’一个随机的数字呢?”
- 引出随机性: 在很多情况下,我们需要程序表现出一定的“不确定性”或者“随机性”,就像大自然中的很多现象一样。 Python 提供了一个专门的“工具箱”——
random
模块,来帮助我们实现这些随机的功能。
2. 导入“随机工具箱” – import random
(5 分钟)
- 概念:
random
是 Python 的一个标准模块,里面包含了很多和生成随机数、随机选择相关的功能。 - 使用方法: 和使用其他模块一样,首先需要导入它。
import random # 导入整个 random 模块
导入后,就可以使用 `random.功能名()` 来调用里面的函数了。
3. 生成随机浮点数 – random.random()
(10 分钟)
random.random()
的作用: 这个函数会生成一个随机的浮点数。- 范围: 生成的数字总是大于等于 0.0,但小于 1.0 (也就是
[0.0, 1.0)
这个区间)。import random print(random.random()) # 每次运行,结果都可能不一样 print(random.random()) print(random.random())
- 应用: 虽然它只生成 0 到 1 之间的小数,但我们可以用它来生成其他范围的浮点数。
- 生成 0 到 10 之间的随机浮点数:
random.random() * 10
- 生成 5 到 10 之间的随机浮点数:
random.random() * 5 + 5
- 生成 0 到 10 之间的随机浮点数:
- 动手实践: 学生尝试多次运行
random.random()
,观察结果的变化。 尝试生成 0 到 100 之间的随机小数。
4. 生成随机整数 – random.randint(a, b)
(15 分钟)
random.randint(a, b)
的作用: 这个函数会生成一个随机的整数。- 范围 (重点!): 生成的数字范围是
a
到b
,包含a
和b
! (闭区间[a, b]
)。import random # 模拟掷骰子 (生成 1 到 6 的整数) print(random.randint(1, 6)) print(random.randint(1, 6)) # 生成 1 到 100 的整数 print(random.randint(1, 100)) # 生成 0 到 1 的整数 (只能是 0 或 1) print(random.randint(0, 1)) # 可以用来模拟硬币正反面 (0代表反,1代表正)
- 对比:
randint()
生成的是整数,并且范围是包含两端。random()
生成的是浮点数,范围是[0.0, 1.0)
. - 动手实践: 学生尝试使用
random.randint()
生成不同范围的整数,比如生成一个随机的两位数(10 到 99)。
5. 随机选择一个 – random.choice(sequence)
(10 分钟)
random.choice()
的作用: 从一个序列(列表、元组、字符串等)中随机选择一个元素。import random # 从列表中随机选择一个名字 students = ["小明", "小红", "小刚", "小丽", "小强"] lucky_student = random.choice(students) print("今天谁来回答问题?", lucky_student) # 从元组中随机选择一个选项 options = ("剪刀", "石头", "布") computer_choice = random.choice(options) print("电脑出拳:", computer_choice) # 从字符串中随机选择一个字符 word = "Python" random_char = random.choice(word) print("随机字母:", random_char)
- 动手实践: 学生创建一个自己喜欢的颜色的列表,然后使用
random.choice()
随机选择一个颜色并打印。 创建一个表示一天中活动(学习、玩耍、运动)的元组,随机选择一个活动并打印。
6. 结合循环和条件判断 – 简单模拟 (20 分钟)
- 模拟扔硬币: 使用
random.randint(0, 1)
在for
循环中模拟扔硬币 100 次,并统计正反面的次数。import random print("--- 模拟扔硬币 100 次 ---") heads_count = 0 # 正面次数 tails_count = 0 # 反面次数 for _ in range(100): # 循环 100 次,_ 表示循环变量的值不重要 # 随机生成 0 (反面) 或 1 (正面) coin_flip = random.randint(0, 1) # 使用条件判断统计次数 if coin_flip == 1: heads_count = heads_count + 1 else: tails_count = tails_count + 1 print("总共扔了 100 次硬币。") print("正面朝上次数:", heads_count) print("反面朝上次数:", tails_count)
- 模拟掷骰子游戏 (简单版): 让用户猜测一个 1 到 6 的数字,电脑随机掷骰子,判断用户是否猜对。可以结合
while
循环,让用户猜多次。import random print("--- 掷骰子小游戏 ---") # 让用户输入猜测的数字 guess_str = input("请猜一个 1 到 6 的数字:") try: guess = int(guess_str) # 检查用户输入是否在有效范围 if guess >= 1 and guess <= 6: # 电脑随机掷骰子 dice_roll = random.randint(1, 6) print(f"你猜的数字是:{guess}") print(f"骰子掷出的点数是:{dice_roll}") # 判断是否猜对 if guess == dice_roll: print("恭喜你,猜对了!") else: print("很遗憾,没猜对。") else: print("输入无效,请猜 1 到 6 之间的数字。") except ValueError: print("输入错误,请只输入数字!") print("游戏结束。")
- 动手实践: 学生修改扔硬币代码,模拟扔 50 次硬币。 修改掷骰子游戏,让用户有 3 次猜测机会(可以使用
for
循环和break
)。
7. 课堂练习 (10 分钟)
让学生独立完成以下练习:
- 练习 1: 编写一个程序,使用
random.randint()
生成一个 1 到 100 之间的随机整数,并打印出来。import random # TODO: 生成 1 到 100 之间的随机整数 # TODO: 打印结果
- 练习 2: 编写一个程序,创建一个包含你喜欢的水果、蔬菜、零食的列表。使用
random.choice()
从列表中随机选择一样食物并打印:“今天吃点 [随机选择的食物] 吧!” - 练习 3: 编写一个程序,模拟抽奖。假设有 10 个编号(1 到 10)。随机抽取 3 个不同的编号作为中奖号码。(提示:可以创建一个包含 1 到 10 的列表,使用
random.choice()
循环抽取 3 次,但需要确保每次抽到的号码是之前没抽到过的。或者使用random.sample()
方法,但这个可能稍微复杂,可以先用简单方法实现,或者作为挑战)。
8. 总结与提问 (5 分钟)
- 回顾: 回顾本节课内容:
random
模块的作用,如何导入,生成随机浮点数random.random()
([0.0, 1.0)
),生成随机整数random.randint(a, b)
([a, b]
),随机选择元素random.choice(sequence)
,以及如何用随机数结合循环和条件判断进行简单模拟。 - 提问:
- 生成 0 到 1 之间的随机小数用哪个函数?
- 生成 1 到 10 之间的随机整数(包含 1 和 10)用哪个函数?怎么写?
- 如何从列表
["红", "黄", "蓝"]
中随机选择一个颜色? - 模拟扔硬币时,我们用了
random
模块的哪个函数?为什么?
- 答疑: 回答学生问题。
9. 布置课后作业 (5 分钟)
- 作业 1: 编写一个程序,模拟掷两个骰子。生成两个 1 到 6 的随机整数,计算它们的总和,并打印出来。
- 作业 2: 编写一个简单的点名程序。创建一个学生姓名的列表。使用
random.choice()
从列表中随机抽取一个学生姓名并打印,表示该学生被点到。 - 作业 3: (猜数字游戏升级) 编写一个更完整的猜数字游戏。程序随机生成一个 1 到 100 之间的秘密数字。让用户不断输入猜测的数字,程序提示“猜大了”或“猜小了”,直到猜对为止。统计并打印用户猜了多少次。(提示:使用
while
循环和random.randint()
)。 - 作业 4: (选做) 编写一个程序,模拟一副扑克牌的发牌。创建一个包含所有 52 张扑克牌(可以用字符串表示,如 “红桃A”, “黑桃2”, …)的列表。使用
random.shuffle()
函数将列表打乱,然后给两个玩家各发 5 张牌,打印出每个玩家的牌。(提示:random.shuffle(列表)
会直接打乱原列表)。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)