计算访问字符串python的所有字母的旅行总距离

2024-06-16 11:22:32 发布

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

enter image description here

我有“妈妈”和“脑电图” 任务是从字符串的第一个字母开始,找出连续访问给定字符串的所有字母所需的总距离。 答案应该是36和108。你知道吗

我试着用两本字典来解决这个问题

row0 = {'A':0,'B':1,'C':2,'D':3,'E':4,'F':5,'G':6,'H':7,'I':8,'J':9,'K':10,'L':11,'M':12}
row1 = {'N':1,'O':2,'P':3,'Q':4,'R':5,'S':6,'T':7,'U':8,'V':9,'W':10,'X':11,'Y':12,'Z':13}

但当字母在不同的行中移动时,效果并不好。。你知道吗

如何在Python中实现它?你知道吗


Tags: 字符串答案距离字典字母row1效果脑电图
2条回答

对我们来说关键的函数是^{}。此函数接受string并返回其ASCII值的integer。从^{} table可以看出A位于65。在65之后,下一个26是字母表中的字母。。。你知道吗

知道了这一点,我们可以开始写一些code来找到字符之间的'distances'。首先,我们定义一个stringtest的with。接下来,我们将loop通过string中的indexes,直到string-1length,因为我们将计算这个index和之后的index之间的距离。你知道吗

然后我们想计算出这个ASCII处字符的index值和后面index处字符的ASCII值之间的差异。你知道吗

这将是'distance'(一旦我们用abs()取绝对值),但是由于我们使用的是2行,如果差值大于12(即在不同的行上),我们需要从difference中减去12。你知道吗

这听起来可能很复杂,但不需要创建任何我们必须查找的dictionarieslists。。。你知道吗

我刚才描述的code看起来像:

word = "MAMA"
distance = 0

for i in range(len(word) - 1):
    diff = abs(ord(word[i+1]) - ord(word[i]))
    if diff > 12:
        diff = diff - 12
    distance += diff

print(distance)

它将36作为distance。你知道吗

希望这有帮助!:)

一种解决方案如下:

import string

# built char to grid position dict
grid = {c: (i // 13, i % 13) for i, c in enumerate(string.ascii_uppercase)}
#   row   ^^^^^^^  ^^^^^^ - column

def distance(word):
    up = word.upper()
    def dis(c1, c2):  # distance of two chars
    #   row distance                   + column distance
        abs(grid[c1][0] - grid[c2][0]) + abs(grid[c1][1] - grid[c2][1]))

    # now sum all distances of neighbouring char pairs
    return sum(dis(c1, c2) for c1, c2 in zip(up, up[1:]))

distance('mama')
# 36

相关问题 更多 >