为单词中的字母分配数值

问题描述

我是编程新手。我想慢慢写一个程序,根据查普曼的代码对句子进行编码和解码。
https://1drv.ms/u/s!Ah-IzfOzjlZ_ungI4M_yjxY9_kig?e=e6Qzir
https://1drv.ms/u/s!Ah-IzfOzjlZ_unnDyEXct45dwu60?e=0oK49w

第一部分是为所选关键字“CONSTANTInopLE”的字母分配各自的数字。

C O N S T A N T N O P L E
2 9 6 12 13 1 7 14 4 8 10 11 5 3

A 是 1。
C 是 2,因为虽然它是字母表的第 3 个字母,但关键字中没有 B。

到目前为止,我已经能够为这些字母分配正确的数字,但是,如果关键字中的该字母超过 1 个,则打印出来会使它们不正确。

word = 'constantinople'
alphabet = 'abcdefghijklmnopqrstuvwxyz'

count = 1
list = [None] * len(word)

for letter in alphabet:
    for char in word:        
        if letter is char:
            list[(word.index(char))] = (count+1)
            count += 1       

print(tuple(word))
print(list)

结果:


('c','o','n','s','t','a','i','p','l','e')
[2,10,8,12,14,1,None,4,11,5,3]

这与

的期望答案很接近

[2,9,6,13,7,3]

不正确的值是关键字中的重复字符 (o,n,t)。与其将它们插入到正确的索引中,不如说是增加了值。

解决方法

您可以为此使用枚举:

m=[i for i in enumerate(sorted(listword),1)]

for k in m:
    print(k[1],' equals ',k[0])

输出:

a  equals  1
c  equals  2
e  equals  3
i  equals  4
l  equals  5
n  equals  6
n  equals  7
n  equals  8
o  equals  9
o  equals  10
p  equals  11
s  equals  12
t  equals  13
t  equals  14