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
_
これを行う方法はありますか?
次のように、''.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()
を使用して、ジェネレーター内の文字を文字列に変換し直します。
Gtllambertが私の元の答えに私を打ち負かしたので、私は別の解決策を投稿しています。 map
とラムダ式を使用して同じことを実現することもできます。ラムダ式は、chr
とord
を使用して各文字を1つインクリメントし、chr
を使用して文字に変換し直します。
value = 'abc'
''.join(map(lambda x:chr(ord(x)+1),value))
非常に単純な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を使用したチャレンジのおかげで、実際に機能したとは信じられません