問題概要
A, B, C, D, Eのいずれかの文字が与えられ、アルファベットの何番目なのか答える。
解法と実装
1. if文
一番基本的な、if文による解法です。
if文を5つ書き、入力で与えられた文字がどの文字なのか判定し、答えを出力します。
5つしかないので、それぞれ書いてもあまり時間はかかりません。
この問題では同じ文字を入力として受け取ることはないので、B以降はifでもelifでも正解できます。
X = input() # 入力をXとして受け取る
if X == 'A': # XがAである
print(1)
if X == 'B': # XがBである
print(2)
if X == 'C':
print(3)
if X == 'D':
print(4)
if X == 'E':
print(5)
elifを使った書き方
X = input()
if X == 'A': # XがAである
print(1)
elif X == 'B': # Xが「Aでない」かつ「Bである」
print(2)
elif X == 'C':
print(3)
elif X == 'D':
print(4)
else:
print(5)
2. リストや文字列
リストにAからEまでを保管し、for文で順番に確かめ、何番目と等しいか出力します。
X = input()
ABC = ['A', 'B', 'C', 'D', 'E'] # リストにAからEまでの文字を入れる
for i in range(5):
if X == ABC[i]: # XがABCのi番目の文字と等しい
print(i+1) # iは0始まりなので、1足して出力する
enumerateを使うとリストのインデックス番号と要素をまとめて取ってくることができます。
X = input()
ABC = ['A', 'B', 'C', 'D', 'E']
for i, a in enumerate(ABC): # iは0から4まで、aはAからEまで
if X == a: # aはABCのi番目の文字
print(i+1)
リストでなく、文字列でも同じようなことができます。
X = input()
ABC = "ABCDE" # リストにAからEまでの文字を入れる
for i in range(5):
if X == ABC[i]: # XがABCのi番目の文字と等しい
print(i+1) # iは0始まりなので、1足して出力する
3. 文字コード
アルファベットは連続した文字コードなので、ord()を用いて差を求めることで答えを簡単に出力できます。
文字数が増えたときに便利な書き方です。
X = input()
print(ord(X) - ord('A') + 1) # 文字コードの差
文字コードでAの前の文字は@なので、@との差を求めるとそのまま答えになります。
X = input()
print(ord(X) - ord('@'))
備考
よくある間違い
これでは、elseが効いているのがX == 'D':の時のみなので、Xが'A', 'B', 'C'のいずれかの時は、その数字と5が出力されてしまいます。
X = input()
if X == 'A':
print(1)
if X == 'B':
print(2)
if X == 'C':
print(3)
if X == 'D':
print(4)
else:
print(5)
例えば、XがAの時は
1
5
と出力されます。