例
# 入力
s = "aa b c ddd"
# 出力
a: 2
b: 1
c: 1
d: 3
アルファベットの小文字が与えられ、それぞれのアルファベットの出現回数を表示する
コード
import string
s = "aa b c ddd"
alphabets = {i: 0 for i in string.ascii_lowercase}
for i in s:
if i in alphabets:
alphabets[i] += 1
for k, v in alphabets.items():
if v != 0:
print(k, ': ', v, sep='')
解説
まず出現回数を示すために考えることは、
- それぞれのアルファベットのカウンターを用意する
- 文字列を1文字ずつ取り出す
- どの文字か判別して、その文字のカウントを1増やす
- カウントを出力する
という動作をする。
1-1 アルファベットを用意する
アルファベットの小文字の出現回数を数えるので、まずは全てのアルファベットを用意する。ここで使うのが、string.ascii_lowercase
。
string.ascii_lowercase
で小文字、string.ascii_uppercase
で大文字、string.digitsで数字を全て羅列したものを取り出せる。便利!
# 全てのアルファベットの羅列
lowercase1 = 'abcdefghijklmnopqrstuvwxyz'
# これもアルファベットを取り出せる
import string
string.ascii_lowercase
# 'abcdefghijklmnopqrstuvwxyz'
# これは数字を取り出す
string.digits
# 0123456789
1-2 アルファベットのカウンターを用意する
全てのアルファベットを数えるために配列を使う
alphabets = {i: 0 for i in string.ascii_lowercase}
print(alphabets)
# {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0, 'h': 0, 'i': 0, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0, 's': 0, 't': 0, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}
リスト内包表記でない方式で書くと
alphabets = {}
for i in string.ascii_lowercase:
alphabets[i] = 0
print(alphabets)
# {'a': 0, 'b': 0, 'c': 0, 'd': 0, 'e': 0, 'f': 0, 'g': 0, 'h': 0, 'i': 0, 'j': 0, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0, 's': 0, 't': 0, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0}
となる。これで'a'
という文字が現れたら辞書alphabets
の’a’というキーの値を1増やせばカウントできる
2・3 文字列を取り出して、カウントを1増やす
for i in s: # 1文字ずつ取り出す
if i in alphabets: # 取り出した文字がアルファベットなら
alphabets[i] += 1 # その文字のカウントを1増やす
4 カウントを出力する
for k, v in alphabets.items(): # 辞書のキーと値を両方取り出す k:キー、v: 値
if v != 0: # カウントが0でなければ
print(k, ': ', v, sep='')