You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python编写板球计分卡时overs列表仅显示最后一局数据问题

板球两局计分卡列表赋值bug原因说明

问题本质

你遇到的第一局得分丢失、最终输出出现空列表的问题,核心原因是重置单局列表和追加总列表的顺序写反了,导致你追加到总列表overs里的始终是空列表,而非已经录入完6个球得分的完整单局数据。

原代码执行逻辑拆解

我们以第一次触发单局结束条件(第6个球打完,ball=5,ball+1=6满足整除6的判断)为例,原代码if块内的执行顺序是:

  • 第一步:执行new_over = list(),直接把new_over变量绑定到一个全新的空列表,之前存了6个第一局得分的列表没有被任何变量引用,直接被内存回收,第一局数据就此丢失。
  • 第二步:执行overs.append(new_over),此时追加进去的是刚创建的空列表,不是第一局的得分数据。
  • 后续循环录入第二局得分时,所有得分都会被append到这个已经被放进overs的空列表里,所以你看到overs的第一个元素最后变成了第二局的6个得分。
  • 等第12个球打完第二次触发if判断时,同样先创建新空列表再追加,最终overs的第二个元素就是空列表,和你遇到的错误输出[[2,4,0,1,0,6],[]]完全吻合。

调换顺序后生效的原因

把new_over = list()移动到overs.append(new_over)之后,if块的执行逻辑就符合业务需求了:

  1. 单局6个球打完时,new_over里已经存满了当前局的所有得分,先执行追加操作,把完整的单局得分列表存入总列表overs。
  2. 再创建新的空列表赋值给new_over,用来存下一局的得分,这时候新的空列表和已经存入overs的上一局数据完全独立,不会互相影响。

修正后可正常运行的代码

import random
runs = random.choices([0, 1, 2, 3, 4, 5, 6], 
                      weights = [30, 30, 20, 5, 10, 0, 5], 
                      k = 12)
overs = list()
new_over = list()
for ball, run in enumerate(runs):
    new_over.append(run)
    if (ball + 1) % 6 == 0:
        overs.append(new_over)
        new_over = list()
print(overs)

运行后就会输出你预期的两局嵌套列表结构,格式类似[[1,0,0,4,2,6],[2,4,0,1,0,6]]。


内容的提问来源于stack exchange,提问作者Janardhan Kanisetti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 04:42:25