1
0

英小文字の出現率 (paizaランク C 相当)

Last updated at Posted at 2023-11-22

今度はアルファベット版。
アルファベットを配列に入れないといけないのだけどpythonでそんなのあったっけ?
と調べてみると、結構使う人がいるらしいですね、うまくまとまっているのがあったので
こちらで。(ありがとうございます!)

たしかにVBAのときもchrつかったなー。
あのときは呪文のようにしか聞こえなかったです(まだVBAはじめて2年目ぐらいのとき)

とはいえ。
97 +26文字ですね、覚えておこう。たしかによく使いそうです。

[chr(i) for i in range(97, 97+26)]

あとはこうですね。
前回の方法をつかってやります。
今回は私が使った方法がよかった。

N = int(input())
S = list(input())
A = [chr(i) for i in range(97, 97+26)]

counts =[]
for i in A:
    count = 0
    for j in S:
        if i == j:
            count += 1
    counts.append(count)
print(*counts)

答えを見ると

N = int(input())
S = input()

count = {chr(x): 0 for x in range(ord("a"), ord("z")+1)}
for char in S:
    count[char] += 1

print(" ".join(map(str, count.values())))

Sを配列にいれず文字列そのまま。(驚き)

count = {chr(x): 0 for x in range(ord("a"), ord("z")+1)}

なんか新しい書き方が出てきたな。
ord()は文字をUnicode値に変換する関数。
97という値を覚えるよりはこっちのほうがいいか。。。
それにしてもrangeわかりやすいな。
{}は何の内包表記だっけ。。。そうそう、辞書だ。
VBAでもdictionaryでたしかあったはず。。。
辞書については理解があやふやなのでこの機会に覚える。
わかりやすいのがあった(ありがとうございます!)
https://aiacademy.jp/texts/show/?id=570

さて、ここから解読すると
まあやってることはカウントが0のa~zの辞書を作っている感じ。
で、ここでcount[char]で、文字で辞書にアクセスができるので、カウントできる感じ。
で、Sに入っているのは文字列なので、for文にいれると1文字ずつループできることがわかった。

S = input()
print(S)
for char in S:
    print(char)

結果下のようになるので1文字ずつループしていることがわかる

aaabbbccdddde
a
a
a
b
b
b
c
c
d
d
d
d
e
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0