第86回【Python】価格の算出、商品の検索

現在取り組んでいるのは、paiza ラーニング問題集「データセット選択メニュー」になります。

はじめに

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

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

ここを考えるのが一番大変、というのをとても昔に書いたことがあった気がします。しばらくはネタがいろいろあったので何も考えずに書いていましたが、ふとネタが無くなりました。まぁ、ネタというか普段の生活で思ったことをダラダラ書いているだけなので、今日は何もない平和な一日だった、ということで。

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

価格の算出

paiza 商店では N 個の商品が売られており、i 番目の商品の名前は A_i で、価格は B_i です。
あなたは M 個の商品名が書かれたお買い物リスト S を持っています。リストに書かれているそれぞれの商品について、paiza 商店での価格を出力してください。リストには paiza 商店が扱っていない商品も書かれている可能性がありますが、その場合は価格の代わりに -1 を出力してください。

N M
A_1 B_1
A_2 B_2
...
A_N B_N
S_1
S_2
...
S_M

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

・ 1 ≦ N ≦ 100
・ 1 ≦ M ≦ 100
・ A_i は英子文字からなる1文字以上10文字以下の文字列 (1 ≦ i ≦ N)
・ i ≠ j ならば A_i ≠ A_j
・ 1 ≦ B_i ≦ 100 (1 ≦ i ≦ N)
・ S_i は英子文字からなる1文字以上10文字以下の文字列 (1 ≦ i ≦ N)
・ i ≠ j ならば S_i ≠ S_j


入力例

3 4
eraser 50
pencil 30
book 100
book
eraser
pencil
margaret

出力例

100
50
30
-1

急に実践的になった。面白い。

Python
N,M = map(int,input().split())
A = {}
for _ in range(N):
    a,b = input().split()
    A[a] = b
for _ in range(M):
    s = input()
    if s in A:
        print(A[s])
    else:
        print(-1)
VBA
NM = Split(Cells(1, 1), " ")
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To Val(NM(0))
    AB = Split(Cells(i + 1, 1), " ")
    dic.Add AB(0), Val(AB(1))
Next
For i = 1 To Val(NM(1))
    S = Cells(i + Val(NM(0)) + 1, 1)
    If dic.exists(S) Then
        Debug.Print dic.Item(S)
    Else
        Debug.Print -1
    End If
Next

商品の検索

N 個の文字列 S_1, … , S_N と、Q 個の文字列 T_1, … , T_Q が与えられます。各 T_i について、以下の処理を行ってください。

・ S_j == T_i を満たす最小の j を出力する。ただし、そのような j が存在しない場合は -1 を出力する。

N Q
S_1
S_2
...
S_N
T_1
T_2
...
T_Q

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

・ 1 ≦ N ≦ 100
・ 1 ≦ Q ≦ 100
・ S_i, T_j は英小文字からなる1文字以上3文字以下の文字列 (1 ≦ i ≦ N,1 ≦ j ≦ Q)


入力例

3 2
a
b
c
b
d

出力例

2
-1

有る無しを調べるのは辞書型ならでは、でしょうか。面白い。

Python
N,Q = map(int,input().split())
S = {}
for i in range(1,N+1):
    s = input()
    if not s in S:
        S[s] = i
for i in range(Q):
    t = input()
    if t in S:
        print(S[t])
    else:
        print(-1)
VBA
NQ = Split(Cells(1, 1), " ")
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
For i = 1 To Val(NQ(0))
    S = Cells(i + 1, 1)
    If Not dic.exists(S) Then
        dic.Add S, i
    End If
Next
For i = 1 To Val(NQ(1))
    T = Cells(i + Val(NQ(0)) + 1, 1)
    If dic.exists(T) Then
        Debug.Print dic.Item(T)
    Else
        Debug.Print -1
    End If
Next

最後に

PHP を書いていたときも、連想配列が好きでした。Python の辞書型は、PHP で書くよりも更に簡潔に書けてわかりやすくて好きです。というのは LeoSaki(旦那)の個人的な感想です。

KeyValue はいろいろなところで応用できるので、もっと深く勉強したいと思っています。

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

Pythonpaiza,学習,Python

Posted by LeoSaki