我有像'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中完成?
答案 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
开始。
这可能听起来很复杂,但应该不再需要创建我们必须查看的任何difference
或12
...
我刚才描述的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)
。
希望这有帮助!的:)强>