鱼C论坛

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

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

[复制链接]
发表于 2021-5-29 16:13:25 | 显示全部楼层 |阅读模式
2鱼币
和小甲鱼的答案不一样,po上自己写的,目前没发现跑起来有什么问题,如果有小伙伴愿意的话可以帮看看哈哈~有问题的话感谢指出!
  1. import random
  2. counts = int(input('请输入抛硬币的次数:'))
  3. i = 0
  4. a = 0
  5. b = 0
  6. c = 0
  7. mc = 0
  8. d = 0
  9. md =0
  10. print("开始抛硬币实验...")
  11. if counts < 100:
  12.     while i < counts:
  13.         num = random.randint(1,10)
  14.         if num % 2:
  15.             print('正面',end = ' ')
  16.             a += 1
  17.             c += 1
  18.             d = 0
  19.             if mc <= c:
  20.                 mc = c
  21.             else:
  22.                 mc = mc
  23.         else:
  24.             print('反面',end = ' ')
  25.             b += 1
  26.             c = 0
  27.             d += 1
  28.             if md <= d:
  29.                 md = d
  30.             else:
  31.                 md = md
  32.         i = i + 1
  33. else:
  34.     while i < counts:
  35.         num = random.randint(1,10)
  36.         if num % 2:
  37.             a += 1
  38.             c += 1
  39.             d = 0
  40.             if mc <= c:
  41.                 mc = c
  42.             else:
  43.                 mc = mc
  44.         else:
  45.             b += 1
  46.             c = 0
  47.             d += 1
  48.             if md <= d:
  49.                 md = d
  50.             else:
  51.                 md = md
  52.         i = i + 1
  53. print('\n一共模拟了',counts,'次抛硬币,结果如下:',sep = ' ')
  54. print('正面:',a,'次')
  55. print('反面:',b,'次')
  56. print('最多连续正面:',mc,'次')
  57. print('最多连续反面:',md,'次')
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-29 19:19:58 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-30 14:48:14 | 显示全部楼层
dd
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

獻醜了,我的代碼:
  1. import random

  2. def games(n: int):
  3.     maxFlip = {"head": 0, "tail": 0}
  4.     now, count, flip = None, 0, []
  5.     for i in range(n):
  6.         res = random.choice(["head", "tail"])
  7.         flip.append(res)
  8.         if now == res:
  9.             count += 1
  10.         else:
  11.             maxFlip[res], count, now = max(count, maxFlip[res]), 0, res
  12.     return (flip.count("head"), flip.count("tail"), maxFlip["head"], maxFlip["tail"])

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

  17. if __name__ == "__main__":
  18.     main()
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-2-25 09:18:43 | 显示全部楼层
三年了还没解决,我也是服气啊,这论坛算是凉了
小甲鱼最新课程 -> https://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次以下显示过程),增强了可维护性和可读性。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-5 20:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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