花花笑笑 发表于 昨天 14:57

Python课程最新版第八讲习题求助

Python课程最新版第八讲习题求助,其中,num = random.randint(1, 10)我很困惑,因为生成的是随机整数,所以生成内容其实是1~9,那正反的概率应该是4/9和5/9,不一样啊。

我知道硬币正反并不是百分百为1/2,因为刻画图案的差异,但此题情景假设均为1/2。第一次发帖,不太会排版,请见谅~

全部代码为:

import random

counts = int(input("请输入抛硬币的次数:"))
i = 0

print("开始抛硬币实验:")
while i < counts:
    # 生成1到10的一个随机数
    num = random.randint(1, 10)

    # 如果随机数可以被2整除,则代表正面,否则代表反面
    # num是随机的,所以正面和反面的概率也是随机的
    if num % 2:
      print("正面", end=" ")
    else:
      print("反面", end=" ")

    i += 1

FishC 发表于 昨天 14:58

在代码中使用 `random.randint(1, 10)` 生成的是 1 到 10 的随机整数。因此,生成的数可能是 1, 2, 3, ..., 10 这十个数中的一个。如果没有特别的干预,这些数中有五个是奇数 (1, 3, 5, 7, 9),五个是偶数 (2, 4, 6, 8, 10)。因此,代码中正反面的概率都是 5/10,也即是 1/2。

所以,在抛硬币的模拟中,正面和反面出现的概率应是相等的 (即 50%)。代码中的逻辑如下:
- 如果随机数 `num` 是奇数 (`num % 2` 得到 `True`),则打印 "正面"。
- 如果随机数 `num` 是偶数 (`num % 2` 得到 `False`),则打印 "反面"。

这样设计实际上模拟了公平的抛硬币实验,正面和反面都是 50% 的概率。

如果您想修改代码确保生成的是 1 到 9 的整数,只需将 `random.randint(1, 10)` 改为 `random.randint(1, 9)`。但这样会改变概率,因为1到9之间有4个偶数和5个奇数,因此概率会变成 4/9 和 5/9。

希望对您理解这段代码有所帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

花花笑笑 发表于 昨天 15:02

FishC 发表于 2024-12-20 14:58
希望对您理解这段代码有所帮助!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理 ...

我记得random的随机范围是一个半开半闭区间呀,为什么会包含10呢

FishC 发表于 昨天 15:02

花花笑笑 发表于 2024-12-20 15:02
我记得random的随机范围是一个半开半闭区间呀,为什么 ...

在 Python 中,`random.randint(a, b)` 函数用于生成一个(闭区间)范围内的随机整数,因此会包含 `b`。所以 `random.randint(1, 10)` 会生成1到10之间的随机整数,包括1和10。不是您所记得的半开半闭区间哦。

如果您需要不包含10的范围,可以使用 `random.randrange(1, 10)` ,这样生成的随机数范围就是1到9了。

如果还有疑问,请继续提问哦~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: Python课程最新版第八讲习题求助