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

Python实现ACSL 2008-2009少年组Reversi题:字母映射数字及数组处理求助

ACSL Reversi问题代码修正方案

1. 字母映射错误修正

你原来的写法"A" = 1是非法语法,Python不允许给字符串字面量赋值,应该用字典实现A-H到1-8的映射:

# 生成A-H对应1-8的映射字典,自动适配大小写输入
char_to_num = {chr(ord('A') + i): i+1 for i in range(8)}
char_to_num.update({chr(ord('a') + i): i+1 for i in range(8)})

调用方式:如果要转换坐标5D的字母部分,用char_to_num["D"]即可得到数值4,完整坐标转换示例:

coord = "5D"
row = int(coord[:-1])
col = char_to_num[coord[-1]]
# 转换后得到row=5,col=4的数字坐标

2. o_array、x_array处理优化

优化后直接将棋子坐标转换为数字元组存储,方便后续黑白棋翻转逻辑调用,同时优化文件读取逻辑避免资源泄漏。

完整修正后代码

# 生成字母到数字的映射
char_to_num = {chr(ord('A') + i): i+1 for i in range(8)}
char_to_num.update({chr(ord('a') + i): i+1 for i in range(8)})

o_array = []
x_array = []
locarray = []

# 用with语句自动管理文件关闭
with open('reversi.txt','r') as rev:
    rev1 = [line.replace("\n","").replace(" ","").split(",") for line in rev.readlines()]

# 处理o方棋子:转成(行,列)数字元组存储
for coord in rev1[0][1:]:
    row = int(coord[:-1])
    col = char_to_num[coord[-1]]
    o_array.append((row, col))

# 处理x方棋子:转成(行,列)数字元组存储
for coord in rev1[1][1:]:
    row = int(coord[:-1])
    col = char_to_num[coord[-1]]
    x_array.append((row, col))

# 处理位置数组:同样转成数字元组存储,可根据你的业务需要调整结构
for loc_line in rev1[2:7]:
    for coord in loc_line:
        if coord[-1].isalpha(): # 判断是否为坐标值
            row = int(coord[:-1])
            col = char_to_num[coord[-1]]
            locarray.append((row, col))
        else: # 存储非坐标的数字参数
            locarray.append(int(coord))

关键改动说明

  • 映射字典支持大小写字母转换,鲁棒性更强
  • 数组直接存储结构化数字坐标,不需要后续二次转换
  • 用列表推导式简化文件读取逻辑,with语句自动关闭文件避免资源泄漏
  • 位置数组自动区分坐标和数值参数,适配你给出的输入文件格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:03:03