python - 查找 x-y 坐标

标签 python python-3.x

我正在尝试制作一个单词搜索代码。到目前为止,我现在可以找到给定网格中所有单词的方向。现在我的问题是如何仅找到第一个字母的 x-y 坐标。

我这里有一段代码:

words=['hello','hola','hella','heya','heyo','hill','halo','hall','hail','hay','hale','holy']
rows= ['eahaehh','allehoh','gohloau','rhelloy','iayoyiu','iiaelah','hlhallo']
row_length=len(rows[0])
column_length=len(rows)

for row_number, row in enumerate(rows):
    final_word = next((word for word in words if word in row), None)
    if final_word:
        print(f"{final_word} right")

for row_number, row in enumerate(rows):
    candidate = ''.join(reversed(row))
    final_word = next((word for word in words if word in candidate), None)
    if final_word:
        print(f"{final_word} left")

negative_slopes=[[rows[column_length-1-q][p-q]
        for q in range(min(p, column_length-1), max(0, p-row_length+1)-1, -1)]
       for p in range(column_length+row_length-1)]

positive_slopes=[[rows[p - q][q]
             for q in range(max(p-column_length+1,0), min(p+1, row_length))]
            for p in range(column_length + row_length - 1)]

for word in negative_slopes:
    candidate=''.join(word)
    final_word = next((word for word in words if word in candidate), None)
    if final_word:
        print(f"{final_word} down-right")

for word in positive_slopes:
    candidate=''.join(reversed(word))
    final_word = next((word for word in words if word in candidate), None)
    if final_word:
        print(f"{final_word} down-left")

很明显它只是打印最终的单词及其方向。我尝试在每个循环中嵌套一个 for 循环,但这基本上破坏了整个代码。所以我尝试制作一个单独的代码,理论上可以找到第一个字母的坐标,我只是不知道如何将它集成到我现有的代码中。这是可能的解决方案:

for row_number, row in enumerate(rows):
    for column_number, letter in enumerate(row):
        for word in words:
                if word[0]==letter: 
                    coordinates.append[column_number, row_number]

所以我会有两个包含这些元素的字典:

coordinates={'hello': (2, 6), 'hola': (2, 6), 'hella': (2, 6), 'heya': (2, 6), 'heyo': (2, 6), 'hill': (2, 6), 'halo': (2, 6), 'hall': (2, 6), 'hail': (2, 6), 'hay': (2, 6), 'hale': (2, 6), 'holy': (2, 6)}

solution={'hello': 'right', 'hall': 'right', 'hella': 'left', 'hale': 'left', 'hail': 'down', 'heya': 'down', 'holy': 'down', 'hola': 'up', 'hay': 'down-right', 'hill': 'up-left', 'heyo': 'up-right', 'halo': 'down-left'}

嗯,一开始这是一个好主意,但我忘记考虑到它只会从字面上找到字母并给出它的坐标。正如您所看到的,坐标都是 (2,6),因为这是 h 第一次出现的坐标。

我希望得到以下输出:

字(x,y)方向

我该如何解决这个问题。任何帮助将不胜感激。

最佳答案

不要再次搜索该词。相反,坚持使用局部变量来保存起始位置的坐标。 如果您找到了该单词,则也返回该位置。

更详细一点...

您的三重嵌套循环(for row_number ... for column_number ... for Words) (1) 过度杀伤,(2) 容易出错。只需添加代码即可在找到单词后立即保存位置。例如:

for row_number, row in enumerate(rows):
    final_word = next((word for word in words if word in row), None)
    if final_word:
        print(f"{final_word} right")
        ^ YOU ARE HERE ...

...此时 ^ 点,您已经有了 row_numberindex 方法将为您提供该列。

对于其他每个方向,您可以构建一个人工“行”字母来进行搜索。该构造是一个简单的线性变换;只需对索引应用反向计算,您将再次获得所需的 (x, y) 坐标。对此进行数学计算。例如,如果您构建了一个从 (0, 5) 开始并沿着西南对角线向下延伸的“行”;然后您会发现您的单词从该“行”的位置 2 开始;那么如何计算该起始字母的坐标呢?

推导留给读者作为练习。 :-)

关于python - 查找 x-y 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58103993/

相关文章:

Python - 根据内部列表的第一个元素对列表列表中的元素求和

python - 找出哪个列表包含字典中的值

jquery - 比较两大组属性

python - 区分大小写的列表排序,但只是重复的值?

javascript - 对 Flask 中创建的表中的列进行排序

python - 如何在 Python 中正确使用 try/except

Python/美汤find_all()没有找到全部

python - 两个变量变成1个变量

python-3.x - C 扩展 - 如何将 printf 重定向到 python 记录器?

python - 逐步创建异步任务并等待所有任务完成