第162回【Python】1つの血液型を占う、1人の占い結果、占い
現在取り組んでいるのは、paiza ラーニング問題集「B ランクレベルアップメニュー」になります。
はじめに
猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。
Python をゼロから勉強してみよう、のコーナー 162 回目です。
お世話になっている動物病院の先生が、球取りをする猫はやんちゃになる、膝の上でゆっくりした時間を過ごす猫はおっとりになる、とおっしゃっていました。まさかそんな、と思っていましたが、ルナちゃんもレオくんも凄くやんちゃです。大好きな遊びはねずみのおもちゃを追いかけて遊ぶこと。
それでは、今日も頑張ってみようと思います。
1つの血液型を占う (paizaランク C 相当)
1行目で血液型が1つ与えられます。
m 行の血液型と占い結果の組が与えられるので、血液型をキー、占い結果を値として、連想配列(辞書)に保存してください。
その後、1行目で与えられた血液型に対応する占い結果を表示してください。
T
m
A_1 B_1
A_2 B_2
...
A_i B_i
...
A_m B_m
期待する出力
A_i をキー、B_i を値として保存し、A_i と T が同じ場合、B_i を表示してください。
最後は改行し、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・1 ≦ m ≦ 4
・A_i の値は、"A", “B", “AB", “O"のいずれかであり、同じ血液型が複数入力されることはない
・1 ≦ (文字列 B_i の長さ) ≦ 100
・T の値は、"A", “B", “AB", “O"のいずれか
入力例
A
4
A Good
B VeryGood
O Yavai
AB VeryYavai
出力例
Good
VeryYavai ってどんな占いだよ!
Python
T = input()
n = int(input())
fortune_telling = {}
for _ in range(n):
blood,fortune = input().split()
fortune_telling[blood] = fortune
print(fortune_telling[T])
VBA
Sub fortune_telling_3()
s = Cells(1, 1)
N = Cells(2, 1)
Dim fortune_telling As Object
Set fortune_telling = CreateObject("Scripting.Dictionary")
For i = 1 To N
temp = Split(Cells(i + 2, 1), " ")
fortune_telling.Add temp(0), temp(1)
Next
Debug.Print fortune_telling(s)
End Sub
1人の占い結果 (paizaランク C 相当)
次のような占いプログラムを作成してください。
最初に「ユーザー」 U が1つ与えられます。
続いて n 人の「ユーザー」と「ユーザーに対応する血液型」が与えられます。
続いて m 種類の「血液型」と「血液型に対応する占い結果」が与えられます。
与えられたユーザー U に対応する占い結果を表示してください。
入力例の1つ目は、ユーザーの血液型についてのラッキーカラーの占いです。
入力例の2つ目は、ユーザーの星座についてのラッキーパーソンの占いになっています。
「血液型」として「星座」などのさまざまな文字列を利用できるようにすることで、他の占いにも対応する必要があることに注意してください。
U
n
(ユーザー_1) (ユーザー_1の血液型)
(ユーザー_2) (ユーザー_2の血液型)
(ユーザー_3) (ユーザー_3の血液型)
...
(ユーザー_i) (ユーザー_iの血液型)
...
(ユーザー_n) (ユーザー_nの血液型)
m
(血液型_1) (血液型_1の占い結果)
(血液型_2) (血液型_2の占い結果)
(血液型_3) (血液型_3の占い結果)
...
(血液型_j) (血液型_jの占い結果)
..
(血液型_m) (血液型_mの占い結果)
期待する出力
ユーザーUの血液型に対応する占い結果を出力してください。
最後は改行し、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・Uは、半角英数字からなる1から20文字までの文字列
・1 ≦ n ≦100
・1 ≦ m ≦100
・(ユーザー_i)は、半角英数字からなる1から20文字までの文字列
・(血液型_j)は、半角英数字からなる1から20文字までの文字列
・(血液型_jの占い結果)は、半角英数字からなる1から20文字までの文字列
・(ユーザー_iの血液型)と等しい、(血液型_j)が必ず存在
・i ≠kのとき、(ユーザー_i)と(ユーザー_k)は異なる文字列
・j ≠kのとき、(血液型_j)と(血液型_k)は異なる文字列
入力例
Rio
5
Kyoko shishiza
Rio futagoza
Tsubame otomeza
KurodaSensei yagiza
NekoSensei mizugameza
5
shishiza the_first_person
yagiza the_second_person
otomeza the_first_cat
mizugameza the_first_dog
futagoza NekoSensei
出力例
NekoSensei
二つの連想配列を組み合わせる。よくあるパターン。
Python
U = input()
n = int(input())
users = {}
for _ in range(n):
user = input().split()
users[user[0]] = user[1]
m = int(input())
fortune_telling = {}
for _ in range(m):
fortune = input().split()
fortune_telling[fortune[0]] = fortune[1]
print(fortune_telling[users[U]])
VBA
Sub fortune_telling_4()
U = 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
m = Cells(N + 3, 1)
Dim fortune_telling As Object
Set fortune_telling = CreateObject("Scripting.Dictionary")
For i = 1 To m
temp = Split(Cells(i + N + 3, 1), " ")
fortune_telling.Add temp(0), temp(1)
Next
Debug.Print fortune_telling(users(U))
End Sub
占い (paizaランク C 相当)
次のような占いプログラムを作成してください。
「ユーザー」と「ユーザーに対応する血液型」、「血液型」と「血液型に対応する占い結果」が与えられます。
それぞれのユーザーに対応する占い結果を表示してください。
入力例の1つ目は、ユーザーの血液型についてのラッキーカラーの占いです。
入力例の2つ目は、ユーザーの星座についてのラッキーパーソンの占いになっています。
「血液型」として「星座」などのさまざまな文字列を利用できるようにすることで、他の占いにも対応する必要があることに注意してください。
n
(ユーザー_1) (ユーザー_1の血液型)
(ユーザー_2) (ユーザー_2の血液型)
(ユーザー_3) (ユーザー_3の血液型)
...
(ユーザー_i) (ユーザー_iの血液型)
...
(ユーザー_n) (ユーザー_nの血液型)
m
(血液型_1) (血液型_1の占い結果)
(血液型_2) (血液型_2の占い結果)
(血液型_3) (血液型_3の占い結果)
...
(血液型_j) (血液型_jの占い結果)
..
(血液型_m) (血液型_mの占い結果)
期待する出力
1から n までの各ユーザーについて順に、ユーザーとその占い結果を半角スペース区切りで出力してください。
最後は改行し、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・1 ≦ n ≦100
・1 ≦ m ≦100
・(ユーザー_i)は、半角英数字からなる1から20文字までの文字列
・(血液型_j)は、半角英数字からなる1から20文字までの文字列
・(血液型_jの占い結果)は、半角英数字からなる1から20文字までの文字列
・(ユーザー_iの血液型)と等しい、(血液型_j)が必ず存在
・i ≠kのとき、(ユーザー_i)と(ユーザー_k)は異なる文字列
・j ≠kのとき、(血液型_j)と(血液型_k)は異なる文字列
入力例
3
AAA aaa111
BBB bbb222
CCC ccc333
5
aaa111 zzz
bbb222 yyy
ccc333 xxx
ddd444 www
eee555 vvv
出力例
AAA zzz
BBB yyy
CCC xxx
最後はリストに上がった全員の占い結果を出力する。
Python
n = int(input())
users = {}
for _ in range(n):
user = input().split()
users[user[0]] = user[1]
m = int(input())
fortunes = {}
for _ in range(m):
fortune = input().split()
fortunes[fortune[0]] = fortune[1]
for k,v in users.items():
print(k,fortunes[v])
VBA
Sub fortune_telling_9()
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
m = Cells(N + 2, 1)
Dim fortunes As Object
Set fortunes = CreateObject("Scripting.Dictionary")
For i = 1 To m
temp = Split(Cells(i + N + 2, 1), " ")
fortunes.Add temp(0), temp(1)
Next
For Each user In users
Debug.Print user & " " & fortunes(users(user))
Next
End Sub
最後に
ランダム性を持たせれば、何か一つのアプリができそうな感じです。と考えると、コードって結構単純で簡単なところからスタートできるんだなぁって思いませんか? もちろん、アプリにするためには、もっと複雑で面倒な手順が山ほどあり、実際はそれが一番難しいんですけれど。
とうとう、「B ランクレベルアップメニュー」も終わりました。このまま「A ランクレベルアップメニュー」に挑戦するか、定番アルゴリズムの習得に挑戦するかは悩むところ。
引き続き、よろしくお願いいたします!
ディスカッション
コメント一覧
まだ、コメントがありません