鱼C论坛

 找回密码
 立即注册
查看: 4900|回复: 8

零基础入门学习Python P17 最新版 了不起的分支和循环(III) 抛硬币课后作业 最后...

[复制链接]
发表于 2021-9-5 23:23:33 | 显示全部楼层 |阅读模式

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

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

x

问题是小甲鱼《零基础入门学习Python》最新版 P17 了不起的分支和循环(III) 最后一题 抛硬币问题 求连续向上或者向下的次数。题目地址: https://fishc.com.cn/thread-159296-1-1.html

本人小白,有些数学知识,但编程完全0基础,之前的作业感觉还可以,基本都能自己写出来,个别看下答案也就理解了。

但感觉最后一题的最后一问 抛硬币问题 求连续向上或者向下的次数,个人感觉真的难。自己看答案,思考半天了,还是想不通。真是难受啊! bfe39b39c1ad8769b154a82f6b3037b.png 跪求大神们指点迷津。我把我的问题详细叙述如下。当然也不是全部不懂。

主要是这一段: 906abf536cf5fdc4cf4791f9b77b075.png   中间的那个取而代之能理解。上下的两句不理解。上面一句,意思上能理解,“如果上一次是反面:将连续正面的次数设置为1”,(就是说,上一次是反面的话,如果这次是正面,那么连续正面次数就是1,所以设置为1。这样理解应

该对吧?)但是这个last为何能变化,我却十分不理解。前面先开始是让last=0了不是?这块用==判断last是否为2,last怎么可能为2呢?程序里面也没有用“=”去给last赋值,怎么这块儿last就有可能是2呢?

总而言之 一句话,last是怎么赋值 1或者2的。我最后写了一个print(last),试了好几次,last应该表示倒数第二个值吧?但倒数第二个值是反面,print(last)却显示1,请看图。 大神.png 。。。。

总之,一句话,last是怎么赋值1或者2的,last=1如何代表正面,last=2如何代表反面。这个逻辑我真的很糊涂。#后面的语句是有说,但这个自然不是讲给python听得吧。谢谢大家啦!!!!!
bfe39b39c1ad8769b154a82f6b3037b.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-6 00:04:49 | 显示全部楼层
感觉last 的取值你可以自定义,设置1 2 没有什么特别的意思,就只是表示上次的结果而已,last赋值出现在if语句和else语句的最后一段
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-9-6 08:20:49 | 显示全部楼层
先去求余数
如果余数为1,那么我们认定为他是正面,将last设置为1
如果余数为2,那么我们认定为他是反面,将last设置为2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-16 20:16:28 | 显示全部楼层
确实 这道题我也不是很理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-17 10:49:54 | 显示全部楼层
先赋值变量last=0
可以把1/2理解为正面和反面,
当抛出结果为正面的时候last=正面,
记录正面次数一次
因为变量的初始值不是正面,所以第二个条件分支,正面最大次数是1次
然后重新循环,第二次结果是反面的话,判断上次记录的结果是正面,直接给反面结果直接计为1次
然后重新循环,第三次结果是反面的话,判断上次记录的结果是反面,直接给反面连续次数加1次
这样能不能理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-8 15:52:26 | 显示全部楼层
请问这个明白了吗,我在这也卡住了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-10 06:32:30 | 显示全部楼层
修改了一下,看是否便于理解。
将记录上次状态变量弃用,硬币换面时可以用清0方法更简洁;同面连续计数打印出来更直观:
#coding=gbk
import random
counts = int(input("请输入一个正整数:"))
#利用ignore判断是否打印
if counts > 100:
    ignore = True
else:
    ignore = False
heads = 0#正面计数
tails = 0#反面计数
#last = 0#记录上次状态,硬币换面时可以用清0方法更简洁
c_heads = 0#连续正面次数
max_heads  = 0#正面最大值
c_tails = 0#连续反面次数
max_tails = 0#反面最大值
i = 0#用于while函数计数器
print("开始抛硬币实验...")
while i < counts:
    num = int(random.randint(1,2)) #1正面,2反面
    if num == 1:#等价于num % 2
        heads += 1#正面计数
        c_heads += 1#正面连续次数
        if not ignore:
            print("正面",end = "-")
            print(c_heads,end = " | ")#连续计数值,省得去数了  
        c_tails = 0#反面连续次数清零
    else:
        tails += 1#反面计数
        c_tails += 1#反面连续次数
        if not ignore:
            print("反面",end = "-")
            print(c_tails,end = " | ")#连续计数值,省得去数了
        
       
        c_heads =0 #正面连续次数清零
    if c_heads != 0:#连续正面取最大值
        if c_heads >= max_heads :
            max_heads = c_heads
            
        
    if c_tails != 0:#连续反面取最大值
        if c_tails >= max_tails:
           max_tails = c_tails
        
    i += 1#用于while函数计数器
print()#增加一个换行
print("正面的个数:",heads)
print("反面的个数:",tails)
print("正面最多次数:",max_heads )
print("反面最多次数:",max_tails)
运行结果:
请输入一个正整数:30
开始抛硬币实验...
反面-1 | 正面-1 | 正面-2 | 正面-3 | 正面-4 | 反面-1 | 正面-1 | 反面-1 | 正面-1 | 反面-1 | 反 面-2 | 反面-3 | 反面-4 | 正面-1 | 反面-1 | 正面-1 | 正面-2 | 反面-1 | 反面-2 | 反面-3 | 反面-4 | 正面-1 | 反面-1 | 反面-2 | 正面-1 | 反面-1 | 反面-2 | 反面-3 | 反面-4 | 反面-5 |
正面的个数: 11
反面的个数: 19
正面最多次数: 4
反面最多次数: 5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-20 22:59:19 | 显示全部楼层
在程序后面
#将上一次状态设置为反面
那条注释下面不是把last赋值成2了吗?

其实1,2代表啥完全由你决定,用啥去代表也是你的自由,只要自己看的懂,程序不会出错就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-24 18:13:44 | 显示全部楼层
这题对于零基础的伙伴们确实有些难!深有体会 !可以一步步拆解,把每个if循环嵌套里面print出连续次数值,连续最大次数值,一步步去看怎么循环和取值,就不难发现,last的取值主要目的是为了实现硬币投掷过程中正反面的交替,再通过判定后的c_heads或者c_tails赋值计算后续每一个循环的连续取值(如果不交替),是否赋值给前次循环中的max_heads或者max_tails(条件已经著名要大于),至于last取值可以任意,也就是可以正面自定义一个值,反面自定义一个值,初始值自定义一个值!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 09:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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