Python单区块内R/B/G出现次数统计问题及选举模拟实现
解决选举模拟程序的区块统计问题
核心问题修正
当前代码中red.count(red)的逻辑完全错误——它只是统计单个字符'R'里的'R'数量(结果永远为1),根本没有遍历当前区块的网格数据。要统计当前区块的R、B、G数量,需要遍历整个world二维列表,逐个统计元素类型。
修正后的完整代码
import random # 定义队伍标识 red = 'R' blue = 'B' undecided = 'G' teams = [red, blue, undecided] world = [] # 获取网格大小 WORLDSIZE = int(input('请输入世界尺寸(y x y):')) def createWorld(): for i in range(WORLDSIZE): row = [] for j in range(WORLDSIZE): voter = random.choice(teams) row.append(voter) world.append(row) def countCurrentBlock(): # 初始化当前区块的计数器 red_cnt = 0 blue_cnt = 0 undecided_cnt = 0 # 遍历整个网格统计当前区块数据 for row in world: red_cnt += row.count(red) blue_cnt += row.count(blue) undecided_cnt += row.count(undecided) return red_cnt, blue_cnt, undecided_cnt def printWorld(): print('\n当前选举情况:') for row in world: print(row) # 获取并打印当前区块的统计结果 r, b, g = countCurrentBlock() print('\n当前统计结果:') print(f'红方选民:{r}') print(f'蓝方选民:{b}') print(f'未决定选民:{g}') print(' ') # 初始化并打印初始区块 createWorld() printWorld()
关键说明
countCurrentBlock函数专门负责统计当前区块的各队伍数量:通过遍历每一行,用列表count方法统计每行对应字符数,累加得到全局总数,完全不涉及历史区块数据。- 后续可以基于这个统计函数,进一步实现区块更新逻辑(比如判断多数队伍、按规则变更选民类型等)。
内容的提问来源于stack exchange,提问作者Mars
相关产品推荐
相关产品推荐

