英数字からなる文字列Sと整数Nが与えられ、Sの各文字をN個後の文字に置き換えた文字列を返す問題です。
文字列Sで出てくる文字は、英大文字の「A〜Z」のみです。
提出
n = int(input())
s = input()
for i in s:
m = (ord(i) - ord('A') + n) % 26
ans += chr(m + ord('A'))
print(ans)
ASCIIコード(アスキーコード)を用いて解くことができます。
問題では、入力した文字列をASCIIコードに変換し、Nを足して、文字に変換しなおします。
ASCIIコード
コンピュータは二進数で処理を行うため、文字データも数字に置き換えて処理します。
特定の文字を表す数字を文字コードと呼びます。
ASCIIコードは、アルファベットや記号などを中心とした文字コードです。
ord()関数 chr()関数
Pythonでは、ord()関数とchr()関数を用いて、文字とASCIIコードの変換ができます。
print(ord('a'))
# > 97
print(chr(97))
# > 'a'
AのASCIIコードは「65」、ZのASCIIコードは「90」。
Aを0として考えたいので、最初に「AのASCIIコード」を引いてからnを足します。
問題では、Zの1個後の文字がAとなっているため、26で割った余りを求めます。
これに「AのASCIIコード」を再び足して文字に変換すると、もともとの文字のN個後の文字が出てきます。
あとは文字列として出力するだけです。
ちなみに、ASCIIコードを知らない場合でも、アルファベットのリストを作って、インデックスから求めることもできます。