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ループの前で用意することでした。初めてこのような作戦を見たときは「うまい方法があるもんだなぁ」と感心しました。その感動から、この解答が生まれたと言っても過言ではありません。