プログラミングコンテストでは、アルファベットを数値で管理し、例えば ‘z’ から 2つ進んだ文字を ‘b’ としたり、’a’ から 3 つ戻った文字を ‘x’ とするような循環型の管理が求められる場合があります。
アルファベットの数値管理
以下のように ord( ) を使用します。
a = ord('a')
print(a) # --> 97
z = ord('z')
print(z) # --> 122
A = ord('A')
print(A) # --> 65
アルファベットの循環
小文字のアルファベットについて考えると、
’z’ を数値化した 122 に 2 を加算して 124 となった場合に、’b’ の数値である 98 にすることができれば循環ができることになりますね。
アルファベットが26文字であることを利用して、mod(余り)を利用すればそれが達成できます。
# z を 数値化
tgt = ord('z')
print(tgt) # -- > 122
# 2 を加算して 124 になると、アルファベットではなくなる
tgt = tgt + 2
print(tgt) # -- > 124
print(chr(tgt)) # -- > |
# 97('a' の数値)を引いて、26で割った余りに対して、97('a' の数値)を足せば良い
tgt = ((tgt - 97) % 26) + 97
print(tgt) # -- > 98
print(chr(tgt)) # -- > b
引く側の処理も、以下のようにうまく行きます。
# z を 数値化
tgt = ord('a')
print(tgt) # -- > 97
tgt = tgt - 3
print(tgt) # -- > 94
tgt = ((tgt - 97) % 26) + 97
print(tgt) # -- > 120
print(chr(tgt)) # -- > x
お役に立てれば幸いです!