web-dev-qa-db-ja.com

Python-文字列の文字を1つインクリメントします

pythonでこれを行う方法を検索しましたが、答えが見つかりません。文字列がある場合:

_>>> value = 'abc' 
_

文字列内のすべての文字を1ずつインクリメントするにはどうすればよいですか?したがって、私が探している入力は次のとおりです。

_>>> value = 'bcd' 
_

私はordとchrを使用して1つの文字でそれを行うことができることを知っています:

_>>> value = 'a'
>>> print (chr(ord(value)+1)) 
>>> b
_

ただし、ord()chr()は1文字しか使用できません。上記の同じステートメントを複数の文字の文字列で使用した場合。エラーが発生します:

_Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 3 found 
_

これを行う方法はありますか?

8
brazjul

次のように、''.join()でジェネレータ式を使用できます。

_In [153]: value = 'abc'

In [154]: value_altered = ''.join(chr(ord(letter)+1) for letter in value)

In [155]: value_altered
Out[155]: 'bcd'
_

ジェネレーターは、文字列letterの各valueを反復処理し、質問で提案されているchr(ord(letter)+1)方法論を使用して1つずつインクリメントします。次に、''.join()を使用して、ジェネレーター内の文字を文字列に変換し直します。

11
gtlambert

Gtllambertが私の元の答えに私を打ち負かしたので、私は別の解決策を投稿しています。 mapとラムダ式を使用して同じことを実現することもできます。ラムダ式は、chrordを使用して各文字を1つインクリメントし、chrを使用して文字に変換し直します。

value = 'abc'
''.join(map(lambda x:chr(ord(x)+1),value))
8
Alex

非常に単純な4行のコード:

finalMessage=""
for x in range (0,len(value)):
    finalMessage+=(chr(ord(value[x])+1))
print(finalMessage)

文字列内の各文字を調べて1つ追加しますが、これは「z」では機能しないため、次のことができます。

value="abc testing testing, or sdrshmf"
finalMessage=""
for x in range(0,len(value)):
    if ord(value[x]) in range(97,123):
        finalMessage+=(chr(((ord(value[x])-96)%26)+97))
    Elif ord(value[x]) in range(65,91):
        finalMessage+=(chr(((ord(value[x])-64)%26)+65))
    else:
        finalMessage+=value[x]
print(finalMessage)
value = 'abc'
newVar=(chr(ord(value[0])+1))
newVar1=(chr(ord(value[1])+1))
newVar2=(chr(ord(value[2])+1))
value=newVar+newVar1+newVar2
print(value)

これが私が思いついたものですpython 3を使用したチャレンジのおかげで、実際に機能したとは信じられません

1
mike S