鱼C论坛

 找回密码
 立即注册
查看: 3537|回复: 5

[作品展示] 萌新写的第16讲改进抛硬币的代码

[复制链接]
发表于 2021-5-29 16:13:25 | 显示全部楼层 |阅读模式
2鱼币
和小甲鱼的答案不一样,po上自己写的,目前没发现跑起来有什么问题,如果有小伙伴愿意的话可以帮看看哈哈~有问题的话感谢指出!
import random
counts = int(input('请输入抛硬币的次数:'))
i = 0
a = 0
b = 0
c = 0
mc = 0
d = 0
md =0
print("开始抛硬币实验...")
if counts < 100:
    while i < counts:
        num = random.randint(1,10)
        if num % 2:
            print('正面',end = ' ')
            a += 1
            c += 1
            d = 0
            if mc <= c:
                mc = c
            else:
                mc = mc
        else:
            print('反面',end = ' ')
            b += 1
            c = 0
            d += 1
            if md <= d:
                md = d
            else:
                md = md
        i = i + 1
else:
    while i < counts:
        num = random.randint(1,10)
        if num % 2:
            a += 1
            c += 1
            d = 0
            if mc <= c:
                mc = c
            else:
                mc = mc
        else:
            b += 1
            c = 0
            d += 1
            if md <= d:
                md = d
            else:
                md = md
        i = i + 1
print('\n一共模拟了',counts,'次抛硬币,结果如下:',sep = ' ')
print('正面:',a,'次')
print('反面:',b,'次')
print('最多连续正面:',mc,'次')
print('最多连续反面:',md,'次')

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

使用道具 举报

发表于 2021-5-29 19:19:58 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-30 14:48:14 | 显示全部楼层
dd
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-4 23:50:11 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-9-4 23:51 编辑

樓主,你的代碼已經很好了,不錯

獻醜了,我的代碼:
import random

def games(n: int):
    maxFlip = {"head": 0, "tail": 0}
    now, count, flip = None, 0, []
    for i in range(n):
        res = random.choice(["head", "tail"])
        flip.append(res)
        if now == res:
            count += 1
        else:
            maxFlip[res], count, now = max(count, maxFlip[res]), 0, res
    return (flip.count("head"), flip.count("tail"), maxFlip["head"], maxFlip["tail"])

def main():
    times = int(input("輸入拋硬幣次數:\n"))
    head, tail, x, y = games(times)
    print(f"一共模擬了 {times} 次拋硬幣,輸出結果:\n正面:{head} 次,反面:{tail} 次\n正面最多連續次數為:{x} 次\n反面最多連續次數為:{y} 次")

if __name__ == "__main__":
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-2-25 09:18:43 | 显示全部楼层
三年了还没解决,我也是服气啊,这论坛算是凉了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-3-10 15:13:24 | 显示全部楼层
这段代码实现了抛硬币统计功能,但存在可优化点:1. 重复代码段可合并(小于100次的分支)2. 最大连续统计逻辑可简化为max(mc,c) 3. random.choice([0,1])更直观 4. 建议添加输入校验确保counts为正整数。当前概率基于1-10奇偶判断,实际与常规硬币模拟存在微小差异。

已优化抛硬币模拟代码:

1. 合并重复循环逻辑,通过条件判断实现不同输出模式
2. 使用random.choice([True, False])替代原随机数生成
3. 简化连续计数逻辑为max(mc, c)
4. 添加输入验证确保正整数输入
5. 优化变量命名(head/tail替代a/b)
6. 增加异常处理模块确保程序健壮性
7. 修正概率偏差确保严格50%概率
   优化后的代码同时保留了原作者的两种显示模式(100次以下显示过程),增强了可维护性和可读性。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-2 02:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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