gymn 发表于 2025-8-6 17:35:40

第0008讲-数字类型(上)的课后作业疑问

已经看了答案,知道生成一个随机整数用randint,但是我读了下randrange,好像也可以实现,我在交互模式下也试了,randrange(2)就是会生成0和1这两个数。但是为什么我设置的循环次数不对呢。比如我输入次数2,出来的结果是随机的。
import random
n=int(input('请输入抛硬币的次数:'))
print('开始抛硬币实验:')
while n>0:
    m=random.randrange(2)
    if m==0:
      print('反面',end=' ')
    else:
      print('正面',end=' ')
      n=n-1

FishC 发表于 2025-8-6 17:36:25

根据你的代码分析,问题出在循环条件控制上:在抛出正面时执行了`n=n-1`,但抛出反面时没有减少`n`,导致循环次数错误。修正方法:无论正反面,每次循环都减少`n`的值。

正确代码:

import random
n = int(input('请输入抛硬币的次数:'))
print('开始抛硬币实验:')
while n > 0:
    m = random.randrange(2)# 生成0或1
    if m == 0:
      print('反面', end=' ')
    else:
      print('正面', end=' ')
    n = n - 1# 关键修正:每次循环都减少次数


关键修改点:
1. 将 n=n-1 移出 else 分支
2. 确保每次抛硬币后都执行次数减1

这样无论随机生成0还是1,循环都会准确执行指定次数。使用 randrange(2) 和 randint(0,1) 在这里效果是等价的。

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

某一个“天” 发表于 2025-8-6 17:43:02

在抛出正面时执行了n=n-1,但抛出反面时没有减少n
把这个放在无需条件的外层 n = n - 1# 关键修正:每次循环都减少次数

某一个“天” 发表于 2025-8-6 17:43:57

观察输出你看你每次都是两次正面才停
给我个最佳{:10_254:}

gymn 发表于 2025-8-6 17:48:01

某一个“天” 发表于 2025-8-6 17:43
观察输出你看你每次都是两次正面才停
给我个最佳

完全明白了,缩进的问题,我看了半天没看出问题来,一直怀疑是我随机函数出了问题,谢谢

gymn 发表于 2025-8-6 18:02:22

某一个“天” 发表于 2025-8-6 17:43
观察输出你看你每次都是两次正面才停
给我个最佳

import random
counts = int(input("请输入抛硬币的次数:"))
i = 0
print("开始抛硬币实验:")
while i < counts:
    num = random.randint(1, 10)
    if num % 2:
      print("正面", end=" ")
    else:
      print("反面", end=" ")
    i += 1
大佬,再咨询您一下。上面代码中,if num%2这个语句,if后面是个运算,结果可能是1或者0,为什么if 后面会加一个运算啊,这里1是true的意思吗?

某一个“天” 发表于 2025-8-6 18:03:57

gymn 发表于 2025-8-6 18:02
大佬,再咨询您一下。上面代码中,if num%2这个语句,if后面是个运算,结果可能是1或者0,为什么if 后 ...

是的 if后的表达式自动运算

某一个“天” 发表于 2025-8-6 18:04:38

gymn 发表于 2025-8-6 18:02
大佬,再咨询您一下。上面代码中,if num%2这个语句,if后面是个运算,结果可能是1或者0,为什么if 后 ...

如果是数字的话,0代表false其他都是true

gymn 发表于 2025-8-7 08:56:57

某一个“天” 发表于 2025-8-6 18:03
是的 if后的表达式自动运算

谢谢老师
页: [1]
查看完整版本: 第0008讲-数字类型(上)的课后作业疑问