読書・NBA・ポケモン

読書・ポケモン・NBA・統計学について書きます

Python歴1週間の私が初心を忘れないうちにpaizaスキルチェック過去問題「野球の審判」の解答・解説をする

Pythonの勉強を初めて1週間の私が、初学者の気持ちを忘れないうちに、なるべく易しく「野球の審判」問題の解説・解答をします。
 私よりも先にまろ様が全く違う解説・解答を書いてくださっているので、そちらもご参照ください。
【解答付き】paizaのスキルチェック過去問題「野球の審判(Cランク)」を解説! | まろぶろぐ
 
 

問題

問題はこちらのリンクから読めます(要ログイン)。→https://paiza.jp/works/mondai/skillcheck_archive/umpire?language_uid=python3
 
 

方針

問題の条件のところに次のような記述があります。

投球はこの打者の番がちょうど終了するまで続きます。すなわち、最終的にこの打者にはアウトかフォアボールのいずれかが必ず与えられ、それ以降の投球はおこなわれません。

つまり、ストライクが合計3回か、ボールが合計4回入力されると、入力が終わるということです。なので、ストライクの数とボールの数を数えておき、ストライクが2回以下のときは「ストライク」、ストライクが3回以上になったら「アウト」、ボールが3回以下のときは「ボール」、ボールが4回以上になったら「フォアボール」を出力すればいいわけです。
 プログラミングの方針として、私は次のように処理を分解してみました。
 

プログラミングの方針

 
・入力の一行目の球数を取得する。
 
ストライクとボールの数を数えるために、0を値とする変数を2つ用意する。←個人的にポイントだと思うところ
 
・for ループを使って、入力の2行目〜N+1行目を受け取る。
 
・if 文を使って、入力が"ball"なのか"strike"なのか判定する。
 
・もし入力が"ball"なら、"ball!"を出力し、用意したボールを数える変数に1を足す。
 
・ただし、もしボールを数える変数が3以上のときに、"ball"が入力されたら、"ball!"の代わりに"fourball!"を出力する。
 
・もし入力が"strike"なら、"strike!"を出力し、用意したストライクを数える変数に1を足す。
 
・ただし、もしストライクを数える変数が2以上のときに、"strike"が入力されたら、"strike!"の代わりに"out!"を出力する。
 
 

プログラムを書く

で、実際に書いたコードが次のようなものです。

N=int(input())
 
strike=0#ストライクを数える変数を用意する
ball=0#ボールを数える変数を用意する
 
for i in range(N):
    word=input()
    if word=="ball":
        if ball>=3:
            print("fourball!")
        else:
            print("ball!")
        ball+=1#ボールを数える変数に1を足す。個人的にポイントだと思うところ2
 
    elif word=="strike":
        if strike>=2:
             print("out!")
        else:
            print("strike!")
        strike+=1#ストライクを数える変数に1を足す。個人的にポイントだと思うところ3

 
 

まとめ

というわけで、この解答のミソはストライクとボールを数える値0の変数をforループの前で用意することでした。初めてこのような作戦を見たときは「うまい方法があるもんだなぁ」と感心しました。その感動から、この解答が生まれたと言っても過言ではありません。