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
相关产品推荐
相关产品推荐

