鱼C论坛

 找回密码
 立即注册
查看: 1397|回复: 18

[已解决]第16讲课后作业 动手第1题

[复制链接]
发表于 2021-2-4 15:23:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教下各位大神,下面的代码,为什么运行不出来正面和反面的次数呢,看起来,小甲鱼和我写的统计正面和反面的次数的代码好像没什么区别啊?
import random

counts = int(input("请输入抛硬币的次数:"))
i = 0
u = 0
m=0
print("开始抛硬币实验:")
while i < counts:
    num = random.randint(1, 10)
   
    if num % 2:
         u+=1
         if counts<100:
             print("正面", end=" ")
           
    else:
        m+=1
        if counts<100:
             print("反面", end=" ")
            
    i += 1
print("")
print("一共模拟了", counts, "次抛硬币,结果如下:")
print("正面:", heads, "次", sep="")
print("反面:", tails, "次", sep="")

这个是看了小甲鱼的答案后改的,原来是下面这样的:
import random

counts = int(input("请输入抛硬币的次数:"))
i = 0
u = 0
m=0
print("开始抛硬币实验:")
while i < counts:
    num = random.randint(1, 10)
   
    if num % 2:
        if counts<100:
            print("正面", end=" ")
            u+=1
    else:
        if counts<100:
            print("反面", end=" ")
            m=counts-u
    i += 1
print('一共模拟了',counts,'次抛硬币,结果如下:\n u,正面:\n m,反面:')

两个代码都是正面和反面的次数统计不能运行出来,打印出来就是U正面和M正面。

最佳答案
2021-2-4 17:24:13
本帖最后由 Daniel_Zhang 于 2021-2-4 17:25 编辑
2021hahaha 发表于 2021-2-4 17:14
请指教下,这个错误在哪里呢


问题很简单,你可以看一下我上面放的图片

有没有发现,两个图片里面,最后几次都是正面的结果

也就意味着,最后一次反面的时候,就再也没有更新过反面的次数了

满足了正面的条件,它就不会去运行 else 了
        if num % 2:
            if counts<100:
                print("正面", end=" ")
                u+=1
        else:
            if counts<100:
                print("反面", end=" ")
                m=counts-u

也就是这个地方,因为正面了,就不会去更新反面的次数,你这里就是一直都是之前几次 for 循环获得的 u,而不是最新的

u 每次正面的话就会改变,但是后期没有反面的话,m=counts-u 里面的 m就不会发生改变,因为运行不到 else 里面去

但是如果改成 m += 1 就不同了,每一次是反面,就会 + 1,正面就不变

如果非要 m=counts-u 这么写,可以放在大的 if 外面,每一次不论正反,都会更新一下反面的次数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-4 15:26:36 | 显示全部楼层
改成这样:
import random

counts = int(input("请输入抛硬币的次数:"))
i = 0
u = 0
m=0
print("开始抛硬币实验:")
while i < counts:
    num = random.randint(1, 10)
   
    if num % 2:
        if counts<100:
            print("正面", end=" ")
            u+=1
    else:
        if counts<100:
            print("反面", end=" ")
            m=counts-u
    i += 1
print('一共模拟了',counts,'次抛硬币,结果如下:\n %d,正面:\n %d,反面:' % (u, m))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 15:33:43 | 显示全部楼层

其实吧,上下两个都有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 15:35:59 | 显示全部楼层
看看我曾经解答的一个帖子吧,回复的还算比较详细

[已解决]新版Python16讲课后作业的最后一题
https://fishc.com.cn/thread-188669-1-1.html
(出处: 鱼C论坛)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 15:36:38 | 显示全部楼层
本帖最后由 Daniel_Zhang 于 2021-2-4 15:38 编辑

这是上面的,25 和 26 行 有问题
import random

counts = int(count)
i = 0
u = 0
m=0
print("开始抛硬币实验:")
while i < counts:
    num = random.randint(1, 10)

    if num % 2:
        u+=1
        if counts<100:
            print("正面", end=" ")
        
    else:
        m+=1
        if counts<100:
            print("反面", end=" ")
            
    i += 1
print("")
print("一共模拟了", counts, "次抛硬币,结果如下:")
print("正面:", u, "次", sep="")
print("反面:", m, "次", sep="")

这是下面的
import random
counts = int(counts)
i = 0
u = 0
m=0
print("开始抛硬币实验:")
while i < counts:
    num = random.randint(1, 10)

    if num % 2:
        if counts<100:
            print("正面", end=" ")
            u+=1
    else:
        if counts<100:
            print("反面", end=" ")
            m+=1
    i += 1
print("")
print('一共模拟了',counts,'次抛硬币,结果如下:\n' + str(u) +',正面:\n' + str(m) +',反面:')

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 15:37:47 | 显示全部楼层

就是把最后的print 内容改了一下,是吗?
print('一共模拟了',counts,'次抛硬币,结果如下:\n %d,正面:\n %d,反面:' % (u, m))

这里面,% 就可以统计出次数吗?%不是求余数吗?┭┮﹏┭┮
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 15:39:06 | 显示全部楼层
2021hahaha 发表于 2021-2-4 15:37
就是把最后的print 内容改了一下,是吗?
print('一共模拟了',counts,'次抛硬币,结果如下:\n %d,正面: ...

不光是那一处

17行 也要改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 15:41:31 | 显示全部楼层
2021hahaha 发表于 2021-2-4 15:37
就是把最后的print 内容改了一下,是吗?
print('一共模拟了',counts,'次抛硬币,结果如下:\n %d,正面: ...

给你看看这个

你下面那段的代码,17行 不改的话,偶尔正常,偶尔有问题

一开始还没注意,后面跑了好几次发现不对劲

截屏2021-02-04 15.39.25.png

截屏2021-02-04 15.40.01.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 15:42:48 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-4 15:33
其实吧,上下两个都有问题


我看他是按照小甲鱼的代码改的我就没看。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 15:43:30 | 显示全部楼层
qiuyouzhi 发表于 2021-2-4 15:42

我看他是按照小甲鱼的代码改的我就没看。。

下面那个 17 行也有问题,跑多几次就发现了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 15:48:08 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-4 15:43
下面那个 17 行也有问题,跑多几次就发现了

怪我,怪我,我本来想把小甲鱼的代码复制上来的,可是想想这个原本要花币买的,有版权啊,就没有复制上来,然后按照小甲鱼的结构改了下,没有完全改,^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 15:49:01 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-4 15:41
给你看看这个

你下面那段的代码,17行 不改的话,偶尔正常,偶尔有问题

第17行,是指这个吗?  m+=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 17:06:39 | 显示全部楼层
2021hahaha 发表于 2021-2-4 15:49
第17行,是指这个吗?  m+=1

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 17:07:34 | 显示全部楼层
2021hahaha 发表于 2021-2-4 15:48
怪我,怪我,我本来想把小甲鱼的代码复制上来的,可是想想这个原本要花币买的,有版权啊,就没有复制上来 ...

可以直接复制到论坛里的,你又不是商业用途,只是用于学习交流
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 17:13:48 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-4 17:07
可以直接复制到论坛里的,你又不是商业用途,只是用于学习交流

好的,以后知道了,谢谢大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 17:14:20 | 显示全部楼层

请指教下,这个错误在哪里呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 17:24:13 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Daniel_Zhang 于 2021-2-4 17:25 编辑
2021hahaha 发表于 2021-2-4 17:14
请指教下,这个错误在哪里呢


问题很简单,你可以看一下我上面放的图片

有没有发现,两个图片里面,最后几次都是正面的结果

也就意味着,最后一次反面的时候,就再也没有更新过反面的次数了

满足了正面的条件,它就不会去运行 else 了
        if num % 2:
            if counts<100:
                print("正面", end=" ")
                u+=1
        else:
            if counts<100:
                print("反面", end=" ")
                m=counts-u

也就是这个地方,因为正面了,就不会去更新反面的次数,你这里就是一直都是之前几次 for 循环获得的 u,而不是最新的

u 每次正面的话就会改变,但是后期没有反面的话,m=counts-u 里面的 m就不会发生改变,因为运行不到 else 里面去

但是如果改成 m += 1 就不同了,每一次是反面,就会 + 1,正面就不变

如果非要 m=counts-u 这么写,可以放在大的 if 外面,每一次不论正反,都会更新一下反面的次数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 20:03:49 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-4 17:24
问题很简单,你可以看一下我上面放的图片

有没有发现,两个图片里面,最后几次都是正面的结果

好的,明白了,谢谢大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 20:04:22 | 显示全部楼层
谢谢各位大神的指教,在此谢过<(* ̄▽ ̄*)/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 15:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表