如何在Python中合并字符串相邻数字生成正确FEN串?
解决FEN字符串连续空格数字合并问题
问题背景
我基于以下棋盘数组开发FEN计算器:
boardPeices = ['br', 'bn', 'bb', 'bq', 'bk', 'bb', 'bn', 'br', 'bp', 'bp', 'bp', 'bp', 'bp','bp', 'bp', 'bp', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',' ', ' ', ' ', 'wp', 'wp', 'wp', 'wp', 'wp','wp', 'wp', 'wp', 'wr', 'wn', 'wb', 'wq', 'wk','wb', 'wn', 'wr', ]
目前已生成8个对应FEN行的字符串,执行拼接代码后输出为:
rnbqkbnr/pppppppp/11111111/11111111/11111111/11111111/PPPPPPPP/RNBQKBNR
问题在于FEN规则要求连续的空格(当前用1表示)需合并为对应数量的数字,比如8个连续1要变成8,同时要适配非连续场景(比如e4走子后某行是1111P111,需转为4P3),但目前所有内容都是字符串,不知道怎么实现相邻数字的求和合并。
解决方案
可以写一个专门处理单行FEN字符串的函数,遍历字符并统计连续数字的数量,最后合并成正确的格式:
def merge_consecutive_numbers(row): result = [] count = 0 for char in row: if char.isdigit(): count += int(char) else: if count > 0: result.append(str(count)) count = 0 result.append(char) # 处理行末尾的连续数字 if count > 0: result.append(str(count)) return ''.join(result) # 示例使用:假设fenRow1到fenRow8是已生成的行字符串 fen_rows = [fenRow1, fenRow2, fenRow3, fenRow4, fenRow5, fenRow6, fenRow7, fenRow8] processed_rows = [merge_consecutive_numbers(row) for row in fen_rows] correct_fen = '/'.join(processed_rows) print(correct_fen)
代码说明
- 遍历每行的每个字符,遇到数字时累加计数
- 遇到非数字字符时,先把累计的数字(如果有)转为字符串加入结果,再添加当前非数字字符
- 遍历结束后,检查是否还有未处理的累计数字(比如行末尾全是数字的情况),加入结果
- 最后将处理后的所有行用
/拼接成符合规则的FEN字符串
执行后,原输出中的11111111会被合并为8,最终得到正确的FEN串:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
对于非连续场景,比如某行是1111P111,处理后会变成4P3,完全符合FEN规则要求。
内容的提问来源于stack exchange,提问作者Owen Griffin
相关产品推荐
相关产品推荐

