第161回【Python】連想配列(辞書)を使う、ユーザーの血液型のデータ処理、1人の血液型
現在取り組んでいるのは、paiza ラーニング問題集「B ランクレベルアップメニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
Python をゼロから勉強してみよう、のコーナー 161 回目です。
なぜそうなるのか、という理由を調べないまま先に進もうとする人がいます。意地悪く、「なんでそうなるの?」と質問するようにしています。九九みたいなものです。九九で躓いたままの人は、その後の算数で躓きます。うるさいなぁ、面倒くさい人だなぁ、と思われても、「なんでそうなるの?」と問い続けるつもりです。
それでは、今日も頑張ってみようと思います。
連想配列(辞書)を使う (paizaランク D 相当)
次のような「ユーザー」と「ユーザーに対応する血液型」を連想配列(辞書)として定義して、それらのキーと値のペアを順に出力してください。
ユーザー | ユーザーに対応する血液型 | |
---|---|---|
Kyoko | B | |
Rio | O | |
Tsubame | AB | |
KurodaSensei | A | |
NekoSensei | A |
なし
期待する出力
各ユーザーについて順に、ユーザーとユーザーに対応する血液型を半角スペース区切りで出力してください。
最後は改行し、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
なし
入力例
なし
出力例
なし
ユーザーとその人の血液型を辞書に格納する。基本中の基本。
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 ランク相当と難易度が上がっているはずですが、そんなに難しくはありませんでした。辞書型、連想配列は、知らない人にはチンプンカンプン、知っている人には簡単、な学習内容のような気がします。
連想配列において、キーは重複してはいけないのですが、今回の解答では重複確認を行っていません。模範解答もそのようになっていました。条件に「キーは重複しない」が明記されていない以上、本当は重複確認を行っておくべきなんでしょうけれど。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません