Вот пример игры в боулинг, реализованной на Python с использованием платформы Sololearn:
class BowlingGame:
def __init__(self):
self.rolls = []
def roll(self, pins):
self.rolls.append(pins)
def score(self):
total_score = 0
roll_index = 0
for frame in range(10):
if self.is_strike(roll_index):
total_score += 10 + self.strike_bonus(roll_index)
roll_index += 1
elif self.is_spare(roll_index):
total_score += 10 + self.spare_bonus(roll_index)
roll_index += 2
else:
total_score += self.sum_of_pins_in_frame(roll_index)
roll_index += 2
return total_score
def is_strike(self, roll_index):
return self.rolls[roll_index] == 10
def is_spare(self, roll_index):
return self.rolls[roll_index] + self.rolls[roll_index + 1] == 10
def strike_bonus(self, roll_index):
return self.rolls[roll_index + 1] + self.rolls[roll_index + 2]
def spare_bonus(self, roll_index):
return self.rolls[roll_index + 2]
def sum_of_pins_in_frame(self, roll_index):
return self.rolls[roll_index] + self.rolls[roll_index + 1]
# Example usage:
game = BowlingGame()
game.roll(3)
game.roll(5)
# ... continue rolling ...
# Print the final score
print("Final score:", game.score())
Приведенный выше код определяет класс BowlingGame, который отслеживает броски и подсчитывает очки. Он использует список для хранения количества кеглей, сбитых в каждом броске. Метод rollиспользуется для записи количества сбитых кеглей при каждом броске.
Метод scoreвычисляет общий балл, проходя по кадрам и проверяя наличие ударов, запасов или обычных бросков. Методы is_strike, is_spare, strike_bonus, spare_bonusи sum_of_pins_in_frameявляются вспомогательными методами. используется для определения оценки для каждого кадра.