第161回【Python】連想配列(辞書)を使う、ユーザーの血液型のデータ処理、1人の血液型

現在取り組んでいるのは、paiza ラーニング問題集「B ランクレベルアップメニュー」になります。

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

Python をゼロから勉強してみよう、のコーナー 161 回目です。

なぜそうなるのか、という理由を調べないまま先に進もうとする人がいます。意地悪く、「なんでそうなるの?」と質問するようにしています。九九みたいなものです。九九で躓いたままの人は、その後の算数で躓きます。うるさいなぁ、面倒くさい人だなぁ、と思われても、「なんでそうなるの?」と問い続けるつもりです。

それでは、今日も頑張ってみようと思います。

連想配列(辞書)を使う (paizaランク D 相当)

次のような「ユーザー」と「ユーザーに対応する血液型」を連想配列(辞書)として定義して、それらのキーと値のペアを順に出力してください。

ユーザーユーザーに対応する血液型
KyokoB
RioO
TsubameAB
KurodaSenseiA
NekoSenseiA
なし

期待する出力

各ユーザーについて順に、ユーザーとユーザーに対応する血液型を半角スペース区切りで出力してください。
最後は改行し、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

なし


入力例

なし

出力例

なし

ユーザーとその人の血液型を辞書に格納する。基本中の基本。

Python
users = {
    'Kyoko':'B',
    'Rio':'O',
    'Tsubame':'AB',
    'KurodaSensei':'A',
    'NekoSensei':'A'
}

for k,v in users.items():
    print(k,v)
VBA
Sub fortune_telling_0()

    Dim users As Object
    Set users = CreateObject("Scripting.Dictionary")
    
    users.Add "Kyoko", "B"
    users.Add "Rio", "O"
    users.Add "Tsubame", "AB"
    users.Add "KurodaSensei", "A"
    users.Add "NekoSensei", "A"
    
    For Each user In users
        Debug.Print user & " " & users(user)
    Next
    
End Sub

ユーザーの血液型のデータ処理 (paizaランク C 相当)

n 行のユーザーと血液型の組が与えられるので、ユーザーをキー、血液型を値として、連想配列(辞書)に保存してください。
そのあとで連想配列(辞書)をそのまま表示してください。

n
A_1 B_1
A_2 B_2
...
A_i B_i
...
A_n B_n

期待する出力

1からnまでの各ユーザーについて順に、ユーザーと血液型を表示してください。
最後は改行し、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ n ≦ 100
・1 ≦ A_i の長さ ≦ 50
・B_i は “A", “B", “AB", “O" のいずれか


入力例

5
Kyoko B
Rio O
Tsubame AB
KurodaSensei A
NekoSensei A

出力例

Kyoko B
Rio O
Tsubame AB
KurodaSensei A
NekoSensei A

ユーザーとその人の血液型を辞書に格納する。今度は標準入力から。

Python
n = int(input())
users = {}

for _ in range(n):
    name,blood = input().split()
    users[name] = blood

for k,v in users.items():
    print(k,v)
VBA
Sub fortune_telling_1()

    N = Cells(1, 1)
    
    Dim users As Object
    Set users = CreateObject("Scripting.Dictionary")
    
    For i = 1 To N
        temp = Split(Cells(i + 1, 1), " ")
        users.Add temp(0), temp(1)
    Next
    
    For Each user In users
        Debug.Print user & " " & users(user)
    Next
    
End Sub

1人の血液型 (paizaランク C 相当)

1行目でユーザーが1つ与えられます。
n 行のユーザーと血液型の組が与えられるので、ユーザーをキー、血液型を値として、連想配列(辞書)に保存してください。
その連想配列(辞書)の中で1行目で与えられたユーザー名と、ユーザー名に対応する血液型を表示してください。

s
n
A_1 B_1
A_2 B_2
...
A_i B_i
...
A_n B_n

期待する出力

A_i をキー、B_i を値として保存し、A_i と s が同じ場合、A_i と B_i を表示してください
最後は改行し、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ n ≦ 100
・1 ≦ (s の長さ) ≦ 50
・1 ≦ (A_i の長さ) ≦ 50
・B_i の値は “A", “B", “AB", “O"のいずれか
・i ≠kのとき、A_i と A_k は異なる文字列


入力例

Kyoko
5
Kyoko B
Rio O
Tsubame AB
KurodaSensei A
NekoSensei A

出力例

Kyoko B

与えられた人の血液型を答える。

Python
s = input()
n = int(input())
users = {}

for _ in range(n):
    name,blood = input().split()
    users[name] = blood

print(s,users[s])
VBA
Sub fortune_telling_2()

    s = Cells(1, 1)
    N = Cells(2, 1)
    
    Dim users As Object
    Set users = CreateObject("Scripting.Dictionary")
    
    For i = 1 To N
        temp = Split(Cells(i + 2, 1), " ")
        users.Add temp(0), temp(1)
    Next
    
    Debug.Print s & " " & users(s)
    
End Sub

最後に

paiza ランク的には C ランク相当と難易度が上がっているはずですが、そんなに難しくはありませんでした。辞書型、連想配列は、知らない人にはチンプンカンプン、知っている人には簡単、な学習内容のような気がします。

連想配列において、キーは重複してはいけないのですが、今回の解答では重複確認を行っていません。模範解答もそのようになっていました。条件に「キーは重複しない」が明記されていない以上、本当は重複確認を行っておくべきなんでしょうけれど。

引き続き、よろしくお願いいたします!

Python学習,Python,paiza

Posted by LeoSaki