0

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

助けていただければ幸いです。

4

3 に答える 3

3

範囲関数のパラメーターを指定するのを忘れました:

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のドキュメントから:

range(start, stop[, step]) これは、等差数列を含むリストを作成するための汎用関数です。for ループで最もよく使用されます。引数は単純な整数でなければなりません。step 引数が省略されると、デフォルトで 1 になります。start 引数が省略されると、デフォルトで 0 になります。完全な形式は、単純な整数のリストを返します [start、start + step、start + 2 * step、...] . step が正の場合、最後の要素は最大の start + i * step より小さい stop です。step が負の場合、最後の要素は最小の start + i * stop より大きいステップです。step は 0 であってはなりません (さもなければ 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
于 2012-11-18T08:31:48.160 に答える
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'
于 2012-11-18T08:34:27.277 に答える
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']
于 2012-11-18T08:45:41.157 に答える