问题描述
我是编程新手。我想慢慢写一个程序,根据查普曼的代码对句子进行编码和解码。
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