就像标题所说,我想基本上使用列表创建代码生成器。我目前正在做的是尝试用一个单词进行小规模的操作。
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:'%'
答案 0 :(得分:2)
你的问题有三个:
1
ped列表中的zip
项,无论当前角色如何; (str , int)
;和letterlist
中的每个字符执行此操作一次(从未实际使用您的索引ii
)。 相反,使用一个列表的索引访问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