如何在嵌套列表中替换数字为指定符号以生成棋盘样式?
解决棋盘字符替换与打印问题
你的代码有几个关键问题导致替换失效:
chess里的每个子列表只存了一个完整的空格分隔字符串,不是单个字符的列表,直接遍历子列表索引只能拿到整个字符串,没法逐个处理数字。- 循环索引逻辑错误:
if n[j] == "0"里的n[j]是整个chess的第j个子列表,不是要替换的数字字符。 - 只处理了0的替换,漏掉了1→o、2→*的逻辑,也没把替换后的字符重新拼接成棋盘行。
修正后的代码
chess = [ ["0 1 0 1 0 1 0 1 "], ["1 0 1 0 1 0 1 0 "], ["0 1 0 1 0 1 0 1 "], ["0 0 0 0 0 0 0 0 "], ["0 0 0 0 0 0 0 0 "], ["2 0 2 0 2 0 2 0 "], ["0 2 0 2 0 2 0 2 "], ["2 0 2 0 2 0 2 0 "] ] # 定义替换规则字典,清晰直观 replace_map = {"0": ".", "1": "o", "2": "*"} def prt(board): for row in board: # 取出子列表里的唯一字符串,按空格分割成数字列表(过滤掉末尾空字符串) parts = row[0].split() # 逐个替换字符,再用空格拼接成一行 replaced_row = " ".join([replace_map[num] for num in parts]) print(replaced_row) prt(chess)
代码说明
- 用
replace_map字典统一管理替换规则,后续修改规则只需调整字典,更易维护。 - 遍历每一行时,通过
row[0]取出子列表中的字符串,split()方法按空格分割成单个数字字符串(自动忽略原字符串末尾的多余空格)。 - 用列表推导式遍历每个数字,通过字典映射替换为目标字符,再用
" ".join()拼接成符合格式的棋盘行,最后打印输出。
运行输出
. o . o . o . o o . o . o . o . . o . o . o . o . . . . . . . . . . . . . . . . * . * . * . * . . * . * . * . * * . * . * . * .
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

