AtCoder ABC 146 B – ROT N Python解説
ROT N
英大文字のみからなる文字列 S があります。また、整数 N が与えられます。
AtCoder Beginner Contest 「ROT N」
S の各文字を、アルファベット順で N 個後の文字に置き換えた文字列を出力してください。
ただしアルファベット順でZ
の 1 個後の文字はA
とみなします。
与えられる文字列Sは英大文字限定なので、アルファベットのZの次はAに戻ることに注意しましょう。アルファベットのリストを作り、文字列SのN個後の文字を調べたいと思います。
n = int(input())
s = input()
alphabet = ["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"]
letter = ""
for i in s:
num = alphabet.index(i)
letter += alphabet[(num + n) % 26]
print(letter)
for文の中では、まず、文字列のインデックスを調べています。その後、nを足して26で割ります。26で割る理由はアルファベットの数が26個なので、26で割った余りをもとめるとZの次がAに戻るようになるからです。あとは変数letterに文字を足していって出力すれば完了です。
アルファベットのリストを作成する以外にもord関数を使った方法もあります。
n = int(input())
s = input()
letter = ""
for i in s:
m = (ord(i) - 65 + n) % 26
letter += chr(m + 65)
print(letter)
ord関数とはPythonで文字をUnicode値に変換してくれる組み込み関数です。
Unicodeで英大文字のAは65なので、m = (ord(i) – 65 + n) % 26の部分は、65を引くことにより、26で割った余りをもとめるとZの次がAに戻るようにしています。
最後にchr関数でUnicode値を文字列に戻して完了です。文字列に戻す際、先ほど引いた65を加えるのを忘れずに。