ここで Python を学ぶ: 文字列内の文字を切り替えようとしているだけです。例: 「A」から「C」。文字列は何もしていません。これが私がこれまでに持っているものです:
import string
dummy = "beans"
for i in xrange(len(dummy)):
chr(ord(dummy[i])+5)
print(dummy)
文字列は不変であるため、元の文字列を再割り当てする必要があることに注意してください。次の行に沿って何かを試すことができます。
dummy = "beans"
newdummy = ""
for i in xrange(len(dummy)):
newdummy += chr(ord(dummy[i])+5)
dummy = newdummy
print(dummy)
これは、よりPythonicなアプローチになります。
dummy = ''.join(chr(ord(c) + 5) for c in dummy)
print(dummy)
string.maketrans は、ここでよりエレガントになるはずです:
import string
src = string.ascii_letters
dst = string.ascii_letters[5:] + string.ascii_letters[:5]
trans = string.maketrans(src, dst)
new_dummy = dummy.translate(trans)
詳しくはstring.maketransのドキュメントを参照してください。
Python の文字列は不変です。これは、それらを変更できないことを意味するため、代わりに変数を新しい文字列に再割り当てする必要があります。
次に例を示します。
import string
dummy = "beans"
for i in xrange(len(dummy)):
dummy = dummy[:i] + chr(ord(dummy[i])+5) + dummy[i+1:]
print(dummy)
またはより短い方法:
dummy = "beans"
dummy = "".join([chr(ord(c)+5) for c in dummy])
これを行うには、次のようにします。
mystring="hello"
newstring=""
for x in range(len(mystring)):
newstring+=chr(ord(mystring[x])+5)
ただし、これを行って ASCII 値が最大 251 になると、5 を追加するとエラーが発生するので、次のような if ステートメントで使用している値を確認する必要があります。
if ord(character)+value<255:
##your ok
else:
##uh oh...