python
1def bowling(a): 2 score = 0 3 for i in range(0,len(a)-1): 4 score += a[i] #倒したピンの数を総計する 5 for j in range(1,len(a)-1): 6 if a[j-1] != 0 and a[j] == 10:#ストライクをだす 7 score += (a[j+1]+a[j+2]) 8 elif a[j-1]==0 and a[j]==10:#スペアをだす(一投目がガーター) 9 score += (a[j+1]) 10 elif a[j-1]+a[j]==10 and a[j-1]!=0 and a[j]!=0:#スペアをだす(上以外) 11 score += a[j+1] 12 print(score) 13 14def test1(): 15 print(bowling([10,8,2,10,0,10,10,6,4,10,8,2,10,9,1,10]))
ボウリングのスコアを計算するアルゴリズムを作成しました。
しかし、例としてtest1を実行したところ、200点のところが190点として出力されました。スペアは次の1投のスコアを、ストライクは次の2投分のスコアを加算することはわかるのですが、どうかご指導ください。
追記
python
1def bowling(a): 2 score=0#トータルスコア 3 flame=1#フレーム(1−10) 4 throw=1#フレーム内の投球回数(1or2) 5 for n in range(0,len(a)-1): 6 score += a[n] 7 if flame != 10: 8 if throw == 1 and a[n] == 10:#ストライクの時 9 score += (a[n+1] + a[n+2])#後ろの2投分をスコアに加算 10 flame += 1#フレームを一つ進める(この時投球回数は増やさない) 11 if throw == 2 and a[n]+a[n-1] == 10:#スペアの時 12 score += a[n+1]#後ろ1投分をスコアに加算する 13 flame += 1#フレームを一つ進める 14 throw = 1#投球回数を1に戻す 15 if throw >= 3:#1フレーム2投までなので、次のフレーム(1)に移る 16 flame += 1 17 throw = 1 18 throw += 1 19 else: 20 throw += 1 21 print(score)
として書きなおしましたが、まだうまくいきません...
python
1# -*- coding: utf-8 -*- 2def bowling(a): 3 score=0#トータルスコア 4 flame=1#フレーム(1−10) 5 throw=1#フレーム内の投球回数(1or2) 6 for n in range(0,len(a)): 7 print(throw) 8 score += a[n]v8 9 if flame != 10: 10 if throw == 1 and a[n] == 10:#ストライクの時 11 score += (a[n+1] + a[n+2])#後ろの2投分をスコアに加算 12 flame += 1#フレームを一つ進める(この時投球回数は増やさない) 13 elif throw == 1 and a[n] != 10: 14 throw += 1 15 elif throw == 2 and a[n]+a[n-1] == 10:#スペアの時 16 score += a[n+1]#後ろ1投分をスコアに加算する 17 flame += 1#フレームを一つ進める 18 throw = 1#投球回数を1に戻す 19 elif throw >= 3:#1フレーム2投までなので、次のフレーム(1)に移る 20 flame += 1 21 throw = 1 22 else: 23 throw += 1 24 else: 25 throw += 1 26 print(score)
途中経過を示します。おそらく、throw==2の時の処理を完成させれば、うまくいくと思われます。(一応、bowling([10,8,2,10,0,10,10,6,4,10,8,2,10,9,1,10]))の時はうまく計算ができました。別の配列で失敗しましたが...
(printで吐き出す方法を教えてくれた方どうもありがとうございました。)
回答3件
あなたの回答
tips
プレビュー