鱼C论坛

 找回密码
 立即注册
查看: 1813|回复: 1

[技术交流] 关于抛硬币连续计数正反问题的优化算法(第16讲 分支和循环III)

[复制链接]
发表于 2021-1-28 17:41:26 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 漫天疯语 于 2021-1-28 18:05 编辑

关于小甲鱼老师给出的算法中
# 利用 ignore 变量来判断是否打印每次的结果
if counts > 100:
    ignore = True
else:
    ignore = False

heads = 0 # 统计正面的次数
tails = 0 # 统计反面的次数

last = 0 # 记录上一次的状态,如果是正面设置为1, 反面则设置为2
c_heads = 0 # 统计连续正面的次数
c_tails = 0 # 统计连续反面的次数
max_heads = 0 # 统计连续正面的最多次数
max_tails = 0 # 统计连续反面的最多次数

其中ignore和last我觉得可以省略,整个算法可以优化如下
from random import *
cs = input('请输入抛几次硬币:')
while cs != 'stop': #输入stop退出
    while cs =='' or cs.isdigit() == False:  #如果是空值或者不是整数则重新输入
        cs = input('输入有误,请输入抛几次硬币:')
    print("开始抛硬币实验:\n")
    count = 0 #反面计数器
    k = 0 #循环增量
    cs = int(cs) #将字符串转换整型(总共抛硬币次数)
    zcount = 0 #设置连续正面计数器
    fcount = 0 #设置连续反面计数器
    maxf = 1 #设置最大连续正面计数值存储器
    maxz = 1 #设置最大连续反面计数值存储器
    while k != cs:
        x = randrange(2) #注意这里返回的随机数不包括结束值,即start <= x < stop
        # 上句也可写成 x = int(randint(0,1)) #注意这里返回的整数值包括结束值,即0 <= x <= 1
        # 上句也可写成 x = int(random.choices(range(2)) #注意这里返回的整数值不包括结束值,即0 <= x < 2
        y = 0
        if x == 0:
            print('反面',end=' ')
            fcount += 1 #如果连续反面则计数
            zcount = 0  #重置连续正面计数器
            if maxf < fcount:  # 如果最大连续反面计数小于此次连续负计数
                maxf = fcount  # 将最大的连续反面计数存储至maxf
        else:
            print('正面',end=' ')
            zcount += 1 #如果连续正面则计数
            fcount = 0 #重置连续反面计数器
            count += 1 #连续反面计数器计数
            if maxz < zcount:  # 如果最大连续正计数小于此次连续正计数
                maxz = zcount # 将最大的连续正面计数存储至maxf
        k += 1
        if k % 10 ==0: #一行写十个
            print(' 这是第',k//10,'行')
    print('抛硬币',cs,'次实验结束,其中正面',count,'次,反面',(cs-count),'次')
    print('最多连续正面', maxz, '次','最多连续反面', maxf, '次')
    cs = input('请输入抛几次硬币:')
是不是更容易读懂呢,哈哈,欢迎批评指正!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-28 17:54:05 | 显示全部楼层
同意。高手的精简,有时候就是文言文,不容易看懂。白话文,啰嗦归罗嗦,瞟一眼就明白了,好理解。所以,生活中,我们用白话文,经典名著里,文言文好多。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 02:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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