如何用不同的方式更改python中的字母

时间:2012-11-18 08:27:45

标签: python

我想学习python,我想在没有任何模块或库的情况下更换字母我试过这样的东西,但它不起作用:

d=list('banana')
a=list('abcdefghijklmnopqrstuvwxyz')

for i in range:
    d[i]=a[i+2]
print d

我收到了这个错误:

TypeError: 'builtin_function_or_method' object is not iterable

如果你帮助我,我将不胜感激。

3 个答案:

答案 0 :(得分:3)

您忘了为range function指定参数:

d=list('banana')
a=list('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')

for i in range(len(d)):
    d[i]=a[i+2]
print d

来自python文档:

  

范围(开始,停止[,步骤])这是一个多功能的创建功能   包含算术进度的列表。它最常用于   循环。参数必须是普通整数。如果步骤参数是   省略,默认为1.如果省略start参数,则为   默认为0.完整表单返回普通整数列表[start,   开始+步骤,开始+ 2 *步骤,...]。如果步骤为正,则为最后一步   元素是最大的开始+ i *步骤少于停止;如果步骤是   否定,最后一个元素是最小的开始+ i *步骤更大   而不是停止。 step不能为零(否则引发ValueError)。   例如:

>>>
>>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)

按请求编辑:

d = list('banana')
a = ['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']
mappings = dict((ch, a[idx+2]) for idx, ch in enumerate(set(d)))

for idx in range(len(d)):
    d[idx] = mappings[d[idx]]
#OR:
d = [mappings[d[idx]] for idx in range(len(d))]

print d

答案 1 :(得分:1)

string.translate是理想的...我不确定这是否算作图书馆......

>>> import string
>>> tab = string.maketrans("abcdefghijklmnopqrstuvwxyz","mnopqrstuvwxyzabcdefghi
jkl")
>>> print "hello".translate(tab)
tqxxa

交替

>>> print  "".join([chr(ord(c)+13) if ord(c) + 13 < ord('z') else chr(ord('a')+(ord(c)+13)%ord('z')) for c in "hello"])
'uryyc'

答案 2 :(得分:1)

In [63]: d=list('aabbcc')

In [64]: a='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'.split(",")

In [65]: for i,x in enumerate(d):
    d[i]=a[(a.index(x)+3)%26]

In [66]: d
Out[66]: ['d', 'd', 'e', 'e', 'f', 'f']