Pythonでボーリングのスコア計算アルゴリズムの実装をしたいです。
ストライクかスペアの場合は、
・ストライクの場合は現在の位置から2球分の合計数を足す
・スペアの場合は現在の位置から1球分の合計数を足す
という普通のボーリングの計算方法で計算をします。ピンは全部で10本で、10フレームを計算します。
# coding: utf-8
score_lines = [2, 5, 0, 1, 8, 2, 6, 2, 10, 2, 7, 0, 10, 10, 10, 9, 1, 3]
delete_array =[]
ans_sum =[]
#スペア
for i in range(len(score_lines)):
if i % 2 ==0:
if (score_lines[i] + score_lines[i+1]) == pin_num:
ans_sum.append(score_lines[i] + score_lines[i+1] + score_lines[i+2])
del score_lines[i]
print(score_lines)
del score_lines[i+1]
print(score_lines)
#ストライク
for i in range(len(score_lines)):
if i % 2 == 0:
if score_lines[i] == pin_num:
ans_sum.append(score_lines[i] + score_lines[i+1] + score_lines[i+2])
del score_lines[i]
print(1111111111)
print(score_lines)
print(33333333333)
#スペア・ストライク以外
for i in range(10):
ans_sum.append(score_lines[i])
今、「スペア」「ストライク」「スペアとストライク以外」でスコアを計算しています。score_linesが一投ごとに倒れたピンの数です。スペアとストライクで計算したscore_linesの要素(例えば8, 2 や10)などをdelメソッドを使い配列から削除し、スペアとストライク以外の計算の時score_linesの要素の合計を求めスペア・ストライクを計算させようと思っていました。しかし、
#スペア
for i in range(len(score_lines)):
のlen(score_lines)
でdelメソッドを使ったため、IndexError: list index out of range
とエラーが出ました。そのエラーがなぜおこったのかはわかるのですが、なら、どのようにスペア・ストライク・スペアとストライク以外のボーリングスコアの合計を求められるのか、わかりません。
どのように直せばボーリングのスコア計算のアルゴリズムを実装できますか?