我想用列表把单词变成代码

2024-06-01 11:44:24 发布

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

就像标题所说的,我想基本上创建一个使用列表的代码生成器。我现在正在做的是尝试用一个单词来做一个小规模的测试。你知道吗

letterlist = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p','q','r','s','t','u','v','w','x','y','z']
primes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101]

name = 'robert'
ii=0
nn = list(name)
code=1
while ii<=len(name)-1:
    for nn in letterlist:
        code *= zip(letterlist,primes)[1]
    ii+=1
print 'robert has a code equal to %f' %code

但是我得到了TypeError:不能将序列乘以类型为“tuple”的非int

而不是

robert has a code equal to 409760241

所以现在我已经用了一本字典,它在很大程度上是有效的,但我得到和错误

键错误:''


Tags: toname标题列表错误codennequal
2条回答

您可以创建dict并使用^{}进行乘法:

>>> d = dict(zip(letterlist, primes))
>>> d
{'a': 2, 'c': 5, 'b': 3, 'e': 11, 'd': 7, 'g': 17, 'f': 13, 'i': 23, 'h': 19,
 'k': 31, 'j': 29, 'm': 41, 'l': 37, 'o': 47, 'n': 43, 'q': 59, 'p': 53, 's': 67,
 'r': 61, 'u': 73, 't': 71, 'w': 83, 'v': 79, 'y': 97, 'x': 89, 'z': 101}

>>> reduce(lambda i, p: i*p, [d[c] for c in name])
409760241

你的问题有三个方面:

  1. 总是使用1ped列表中的第zip项,而不管当前字符是什么
  2. 每一项都是一个二元组(str , int);并且
  3. letterlist中的每个字符执行一次此操作(从未实际使用索引ii)。你知道吗

相反,使用一个列表的索引来访问name中每个字母的另一个列表:

code = 1
for c in name:
    code *= primes[letterlist.index(c)]

相关问题 更多 >