计算访问字符串python

时间:2017-10-22 09:49:59

标签: python

enter image description here

我有像'MAMA'和'ELECTROENCEPHALOGRAPHIC'这样的输入 任务是找到行程的总距离,从字符串的第一个字母开始,连续访问给定字符串的所有字母。 答案应该是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中完成?

2 个答案:

答案 0 :(得分:1)

一个解决方案可能如下所示:

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

答案 1 :(得分:0)

对我们来说关键的功能是ord。此函数使用string并返回integer的{​​{1}}值。从ASCII table开始,我们可以看到ASCII位于A。在65之后,下一个65是字母表中的字母......

了解这一点,我们可以开始编写一些26来查找字符之间的code。首先,我们将'distances'定义为string。接下来,我们将test通过loop中的indexes,直至string length的{​​{1}}因为我们将计算距离介于此string-1之后。

然后,我们想要计算出此index处字符的index值与之后ASCII处字符之间的差异。

这将是index(一旦我们使用index获取绝对值),但由于我们正在处理'distance'行,因此我们需要减去abs()如果差异大于2(即在不同的行上),则从12开始。

这可能听起来很复杂,但应该不再需要创建我们必须查看的任何difference12 ...

我刚才描述的dictionaries看起来像是:

lists

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)

希望这有帮助!的:)