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

围棋棋盘to_integer()函数问题:无法生成正确三元编码整数

修正围棋棋盘to_integer函数实现问题

需求明确:to_integer()函数需要把围棋棋盘的字符映射为数字(空.→0、白O→1、黑@→2),将所有行的映射结果拼接成一串数字后转为整数。示例输入["O.O", ".@.", "@O."]应输出101020210。

原代码的to_integer()函数存在多处错误,同时类内部分方法的缩进也不符合Python规范,以下是问题点和修正方案:

原代码错误点

  1. 调用了不存在的self.to_strings()方法,实际应该使用初始化时存储输入行的self.from_strings属性
  2. 给字符额外添加单引号(character = "'" + character + "'"),导致无法匹配to_int字典的键
  3. 错误使用self.to_integer.values(character)获取映射值,正确方式是通过self.to_int字典的键直接取值
  4. 类内部分方法(__init__、__str__、to_integer)存在缩进错误,违反Python类结构规范

修正后的完整代码

from string import ascii_uppercase as letters

class Board:
    # 颜色与对应符号的字典
    points = {'E': '.', 'B': '@', 'W': 'O'}
    to_int = {'.': '0', 'O': '1', '@': '2'}

    # 构造函数
    def __init__(self, size=19, from_strings=None):
        assert 2 <= size <= 26, "Illegal board size: must be between 2 and 26."
        assert type(from_strings) is list, "input is not a list"
        assert len(from_strings) == size, "length of input list does not match size"
        for idx, row in enumerate(from_strings):
            assert type(row) == str, f"row {idx+1} is not a string"
            assert len(row) == size, f"length of row {idx+1} does not match size"
        self.size = size
        self.grid = [['E'] * size for _ in range(size)]
        self.from_strings = [] if from_strings is None else from_strings
    
    def __str__(self):  # 生成棋盘字符串
        padding = ' '
        heading = '   ' + ' '.join(letters[:self.size])
        lines = [heading]
        for r, row in enumerate(self.grid):
            if len(self.grid) < 10:
                if self.from_strings:
                    line = " " + f'{self.size - r} ' + ' '.join(self.from_strings[r])
                else:
                    line = " " + f'{self.size - r} ' + ' '.join(self.points[x] for x in row)
                lines.append(line)
            else:
                if r > 9:
                    if self.from_strings:
                        line = f'{self.size - r} ' + ' '.join(self.from_strings[r])
                    else:
                        line = f'{self.size - r} ' + ' '.join(self.points[x] for x in row)
                    line = padding + line
                    lines.append(line)
                else:
                    if self.from_strings:
                        line = f'{self.size - r} ' + ' '.join(self.from_strings[r])
                    else:
                        line = f'{self.size - r} ' + ' '.join(self.points[x] for x in row)
                    lines.append(line)
        return '\n'.join(lines)

    # 修正后的to_integer函数
    def to_integer(self):
        digit_colour = ""
        # 遍历存储的输入行
        for line in self.from_strings:
            for character in line:
                # 直接通过to_int字典映射字符为数字字符串
                digit_colour += self.to_int[character]
        # 转为整数返回
        return int(digit_colour)

b = Board(
    3,
    ["O.O", ".@.", "@O."]
)
print(b.to_integer())  # 输出:101020210

关键修改说明

  • 替换self.to_strings()为self.from_strings,直接使用初始化时保存的输入行数据
  • 移除给字符添加单引号的错误代码,确保字典键匹配正确
  • 将self.to_integer.values(character)改为self.to_int[character],正确通过字典键获取对应数字字符串
  • 修复了类内所有方法的缩进问题,保证代码符合Python语法规范
  • 优化了原__init__中的断言提示信息,使用f-string让错误提示更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:55:55