我找到问题了,当时你这个变量搞的我头昏眼花,一开始我以为是22行和27行的变量覆盖重置问题,但想了想并不是,而是代码的下半部分
- if x == '正面' and y == '正面':
- b0 += 1
- if x == '反面' and y == '反面':
- b1 += 1
- else:
- if b0 > c0:
- c0 = b0
- if b1 > c1:
- c1 = b1
- b0 = 1
- b1 = 1
- y = x
- i = i + 1
复制代码
当 (x,y) 是“正正”时,第一个 if 执行,第二个 if 不执行,所以 else 不执行,但循环末尾仍然会强制把 连续正面 和 连续反面 重置为 1,这就把刚累加的连续值给覆盖掉了!
当 (x,y) 是“反反”时,第二个 if 执行,else 跳过,末尾同样强制重置为 1,也丢失了连续值。
只有当 (x,y) 不是“反反”时,才会进入 else 更新最大值,但更新完后末尾又强制重置为 1,这导致连续统计永远无法累积超过 1(除非在一次循环中连续两次都是正面,但重置后又归零,所以最大只能到 2)。
2. 循环结束没有最后更新最大值
如果最后一次连续(比如最后连续 5 次正面)没有遇到相反的来触发 else,那么最大值就不会被更新,仍然停留在之前的旧值。
3. 连续正 和 连续反 在每次循环末尾被强制重置为 1
无论当前连续状态如何,每次循环最后都执行 连续正 = 1; 连续反 = 1,这相当于每次循环都把当前连续计数归零,完全破坏了连续统计的逻辑
因此,你的这段代码应该改为
- if x == '正面' and y == '正面':
- b0 += 1
- if x == '反面' and y == '反面':
- b1 += 1
- if b0 > c0:
- c0 = b0
- if b1 > c1:
- c1 = b1
- y = x
- i = i + 1
复制代码
另外,你的程序还有一个致命错误,那就是如果用户输入的不是int字符,那你的程序就炸了,建议将原来的
- counts = int(input('请输入抛硬币的次数:'))
复制代码
替换为
- while True:
- try:
- counts = int(input('请输入抛硬币的次数:'))
- if counts <= 0:
- print('请输入一个正整数!')
- continue
- break
- except ValueError:
- print('输入无效,请输入一个整数!')
复制代码
另外你的代码已经违背DRY原则,可以尝试自定函数,将变量改为字典等等方式简化或美化,总之待有想法后这个方案可以完全重做