作中でのボウリングのスコアを計算するためにテキトーにプログラム書いてみた

久野真一

ボウリングのスコアを計算してみる

 こんにちは、久野です。ちょっと作品中でボウリングのスコアが出てくる場面があったので、計算が間違ってないか試してみるために、Pythonプログラムを書いてみました。実質Pythonでまともなプログラム書くの初めてなので(普段はスクリプト言語だとRuby)、色々不慣れな感がありありですが、プログラムコードをカクヨムに載っける実験も兼ねてやってみました(なお、Python 3.8.1で動作確認しました)。


 カクヨムに以前掲載したのを発掘したので、せっかくなので、こちらにも、というだけの代物ですが。


・score関数で、各フレームのスコアの合計を計算

・framesはネストした配列で、各要素配列は2要素で、10投目だけ3要素


て感じです。例外処理とかは特に考えてません。作成時間約30分で、計算がバグってる箇所があるかもしれないので、もしあったらご指摘いただければと思います。ちなみに、半角空白だと無視されちゃうので、全角空白で無理やりインデントしました。


ーーーーーーーーーーーーーーーーーーーー

def score(frames):

rest = frames

total = 0

frame_count = 1

while rest != []:

  current_frame = rest[0]

  a = current_frame[0]

  b = current_frame[1]

  if len(rest)== 1:

    c = current_frame[2]

    total += a + b + c

  else:

   if a == 10:

    total += strike(rest, frame_count)

   elif a + b == 10:

    total += spare(rest, frame_count)

   else:

    total += a + b

   frame_count += 1

  rest = rest[1:]

return total


def spare(frames, frame_count):

    return 10 + frames[1][0]


def strike(frames, frame_count):

    assert(frames[0][0] == 10)

    score = 10

    if frame_count == 9:

        score += frames[1][0] + frames[1][1]

    ## frame_count should be <= 9

    elif frames[1][0] == 10:

        score += 10 + frames[2][0]

    else:

        score += frames[1][0] + frames[1][1]

    return score


frames = [

        [10, 0],

        [4, 6],

        [6, 4],

        [10, 0],

        [5, 3],

        [10, 0],

        [3, 2],

        [3, 3],

        [10, 0],

        [10, 10, 10]

]

print(score(frames))


frames = [

        [10, 0],

        [10, 0],

        [10, 0],

        [10, 0],

        [10, 0],

        [10, 0],

        [10, 0],

        [10, 0],

        [10, 0],

        [10, 0, 0]

]

ーーーーーーーーーーーーーーーーーーーー



  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る