作中でのボウリングのスコアを計算するためにテキトーにプログラム書いてみた
久野真一
ボウリングのスコアを計算してみる
こんにちは、久野です。ちょっと作品中でボウリングのスコアが出てくる場面があったので、計算が間違ってないか試してみるために、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]
]
ーーーーーーーーーーーーーーーーーーーー
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます