我想使用列表将单词转换为代码

时间:2014-03-01 20:14:14

标签: python list for-loop while-loop

就像标题所说,我想基本上使用列表创建代码生成器。我目前正在做的是尝试用一个单词进行小规模的操作。

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

所以现在我已经使用了一本字典,它大部分都在工作,但我收到了错误

keyerror:'%'

2 个答案:

答案 0 :(得分:2)

你的问题有三个:

  1. 您始终使用1 ped列表中的zip项,无论当前角色如何;
  2. 每个项目都是两元组(str , int);和
  3. 您为letterlist中的每个字符执行此操作一次(从未实际使用您的索引ii)。
  4. 相反,使用一个列表的索引访问name中每个字母的另一个列表:

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

答案 1 :(得分:1)

您可以制作字典并使用reduce进行乘法运算:

>>> 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