从网格返回坐标

2024-04-28 04:50:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个6x6的网格,我试图从字符串返回网格中每个字符的坐标。你知道吗

我的想法是:

  1. 将字符串转换为字符列表。你知道吗
  2. 在网格中枚举以检查字符是否存在。你知道吗
  3. 打印所有字符的坐标??你知道吗

这是我的代码(不起作用):

grid = [
        ["A","B","C","D","E","F"],
    ["A","8","3","P","S","2","Z"],
    ["B","7","T","O","R","1","Y"],
    ["C","6","Q","N","M","0","X"],
    ["D","5","G","L","K","U","W"],
    ["E","4","9","I","H","J","V"],
    ["F","C","E","B","F","A","D"]
    ]

print("Please enter a message to encode:")
message = raw_input()

lst = list(message)

search = lst

for rownum, row in enumerate(grid):
    for colnum, value in enumerate(row):
        if value == search:
            print "(%d,%d)" % (rownum, colnum)

我想实现的是,如果你输入“你好”,它会返回ED FC DC BC。你知道吗

任何帮助都将不胜感激。你知道吗


Tags: 字符串in网格messageforsearchvalue字符
1条回答
网友
1楼 · 发布于 2024-04-28 04:50:57

与其在整个grid中搜索每个字符,不如对网格进行预处理以获取位置,创建一个将每个字符映射到其位置的字典:

locations = {}
for x in range(1, len(grid)): # note offset for label row
    for y in range(1, len(grid[x])-1): # and label column
        locations[grid[x][y]] = (grid[0][y-1], grid[x][0])

注意最后一行中的grid[0][y-1];列表中的第一行比其他行短。或者,您可以用None或空字符串""填充它并删除-1

grid = [[None, "A", "B", ...], ...]

这将以{character: (column, row)}的形式创建一个字典:

 locations == {'P': ('C', 'A'), 'Q': ('B', 'C'), ...}

然后可以很容易地获得行和列:

for c in lst:
    col, row = locations[c]

值得注意的是,您需要将输入的字符转换为大写,否则会得到KeyError(因为小写字符不在网格中):

lst = list(raw_input("Please enter a message to encode: ").upper())

相关问题 更多 >