Filename | Description |
---|---|
load_list_of_lists.py | Definition of load_list_of_lists method |
framescore.py | Definition of frame_score method |
testframescore.py | Unit test file for frame_score method |
bowling.py | Main source code file that calls other methods and implements the pseudocode |
game1.txt, game2.txt, game3.txt | Input files that contain game scores |
Frame Number 1 2 3 4 5 6 7 8 9 10 Bonus +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ Ball Scores | 8 | 0 | 7 | 2 | 6 | 0 | 6 | 2 | 0 | 8 | 6 | 1 | 9 | 0 | 8 | 0 | 8 | 1 | 5 | 2 | | | +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ Frame Scores | 8 | 9 | 6 | 8 | 8 | 7 | 9 | 8 | 9 | 7 | | +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ Running Total | 8 | 17 | 23 | 31 | 39 | 46 | 55 | 63 | 72 | 79 | | +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+The total score for Game 1 is 79.
Frame Number 1 2 3 4 5 6 7 8 9 10 Bonus +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ Ball Scores | 8 | 1 | 7 | / | 5 | 3 | 0 | / | 7 | / | 9 | / | 9 | 0 | 8 | / | 8 | 1 | 5 | / | 1 | | +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ Frame Scores | 9 | 15 | 8 | 17 | 19 | 19 | 9 | 18 | 9 | 11 | | +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ Running Total | 9 | 24 | 32 | 39 | 68 | 87 | 96 | 114 | 123 | 134 | | +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+In Game 2, Frame 2, the score is 10 for the spare plus the bonus ball 5, which is the first ball in Frame 3: 10 + 5 = 15.
Frame Number 1 2 3 4 5 6 7 8 9 10 Bonus +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ Ball Scores | 8 | 1 | X | | 6 | / | 8 | 1 | 9 | / | X | | X | | X | | 9 | / | X | | X | 8 | +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ Frame Scores | 9 | 20 | 18 | 9 | 20 | 30 | 29 | 20 | 20 | 28 | | +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ Running Total | 9 | 29 | 47 | 56 | 76 | 106 | 135 | 155 | 175 | 203 | | +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+In Game 3, Frame 2, the score is 10 for the strike plus the next two balls, which are 6 and 4: 10 + 6 + 4 = 20.
Game Number | File Name | List of Lists |
---|---|---|
Game 1 | game1.txt | ["Frame0", [8,0],[7,2],[6,0],[6,2], [0,8],[6,1],[9,0],[8,0],[8,1],[5,2]] |
Game 2 | game2.txt | ["Frame0", [8,1],[7,3],[5,3],[0,10], [7,3],[9,1],[9,0],[8,2],[8,1], [5,5],[8]] |
Game 3 | game3.txt | ["Frame0", [8,1],[10],[6,4],[8,1], [9,1], [10],[10],[10], [9,1], [10],[10],[8]] |
def frame_score(the_frame, next_ball_1, next_ball_2):
# Case where frame is a strike If the_frame[0] is equal to 10 Return 10 plus next_ball_1 plus next_ball_2. # Case where frame is a spare Else if the_frame[0] plus the_frame[1] is equal to 10 Return 10 plus next_ball_1. # Case where frame is an open frame Else Return the_frame[0] plus the_frame[1]. End if
# Filename: testframescore.py import unittest from framescore import frame_score class TestFrameScore(unittest.TestCase): def test_1(self): self.assertEqual(frame_score([10], 10, 7), 27) def test_2(self): self.assertEqual(frame_score([7, 3], 9, 0), 19) def test_3(self): self.assertEqual(frame_score([7, 1], 0, 0), 8) if __name__ == '__main__': unittest.main()
Import the frame_score method from the file framescore.py Import the load_list_of_lists method from the load_list_of_lists.py file. read inputfile from keyboard, promping user. Call the load_list_of_lists method to create a list of lists of the data in an input file like game1.txt, game2.txt, or game3.txt. Assign the list of lists to the variable frames. Initialize score to 0. For i in the range from 1 to 10 (use range(1, 11)) if frames[i][0] equals 10 and frames[i+1][0] equals 10 assign 10 to next_ball_1. assign frames[i+2][0] to next_ball_2. elsif frames[i][0] equals 10 and frames[i+1][0] < 10 assign frames[i+1][0] to next_ball_1. assign frames[i+1][1] to next_ball_2. elsif frames[i][0] + frames[i][1] equals 10 assign frames[i+1][0] to next_ball_1. assign zero to next_ball_2. else assign zero to next_ball_1. assign zero to next_ball_2. end if # Next line is actual Python statement. score += frame_score(frames[i], next_ball_1, next_ball_2) End loop. Print score.