Python通过for循环从列表生成公交模拟表格输入的问题排查
现存代码的逻辑偏差
- 循环嵌套层级错配:代码在外层10次轮次迭代内,嵌套了3次站点遍历的内层循环,且将打印语句放在内层循环块中,导致每执行一次站点遍历就打印一行相同轮次的记录,10轮迭代累计生成3*10=30行输出,和预期10行的目标完全偏离。
- 上车率匹配逻辑错误:当前代码是每轮遍历取所有3个站点的上车率值,没有按轮次轮询匹配单个上车率的逻辑,无法实现“第1轮取站点1上车率、第2轮取站点2上车率、第3轮取站点3上车率、第4轮回流到站点1”的预期取值规则。
- 数据收集逻辑冗余:当前
mylist列表是每轮先存轮次编号,再依次存入3个站点的全部上车率值,最终返回的列表结构零散,无法对应逐行轮次记录的需求。
修正实现方案
- 移除多余的内层站点遍历循环,去掉无意义的嵌套结构,让每一轮迭代只处理1条记录。
- 用取模运算实现上车率轮询匹配:基于当前轮次的索引值对站点总数取余,按余数从
board_rates中取对应位置的上车率,公式为boarding = board_rates[i % numstops],可自动实现循环轮询的取值逻辑,无额外分支判断。 - 调整打印语句的位置:将打印逻辑放在外层循环的循环体中,保证每轮迭代仅执行一次打印,累计输出10行对齐的表格内容。
- 优化
mylist的存储结构:每轮迭代将轮次编号和对应上车率成对存入列表,保证返回值和逐行记录的结构匹配。
修正后的可运行代码
def run_sim(iterations, board_rates): mylist = [] numstops = len(board_rates) for i in range(iterations): stop = i + 1 # 轮询匹配对应轮次的上车率 boarding = board_rates[i % numstops] mylist.append((stop, boarding)) # 每轮仅打印一次,输出对齐的表格内容 print('{0:^10d}{1:^10d}'.format(stop, boarding)) return mylist
代码运行后,传入参数
iterations=10、board_rates=[8,10,8],将依次输出10行记录,轮次从1递增到10,上车率按8→10→8→8→10→8→8→10→8→8的序列匹配,完全符合预期效果。
内容的提问来源于stack exchange,提问作者Margeaux Johnson
相关产品推荐
相关产品推荐

