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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:50:20