# Надо написать python-модуль (назвать bowling), предоставляющий API расчета количества очков: # функцию get_score, принимающую параметр game_result. Функция должна выбрасывать исключения, # когда game_result содержит некорректные данные. Использовать стандартные исключения по максимуму, # если не хватает - создать свои. # # Обязательно написать тесты на этот модуль. Расположить в папке tests. # Из текущего файла сделать консольную утилиту для определения количества очков, с помощью пакета argparse # Скрипт должен принимать параметр --result и печатать на консоль: # Количество очков для результатов ХХХ - УУУ. import argparse from bowling import BowlingScore if __name__ == '__main__': # 42174/34723/X21X33 - 109 # X41XX454235-X1/4/ - 138 # 1-7-2-511651-X7-7-6/ - 78 # 6/5/5-8-9/5/35631--- - 91 parser = argparse.ArgumentParser( description='User result of a bowling game') parser.add_argument('-r', '--result', type=str, help='Result') args = parser.parse_args() game = BowlingScore(args.result) game.run() # При написании кода помнить, что заказчик может захотеть доработок и новых возможностей... # И, возможно, вам пригодится паттерн проектирования "Состояние", # см https://clck.ru/Fudd8 и https://refactoring.guru/ru/design-patterns/state #зачет!
def test(self): game = BowlingScore('42174/34723/X21X33') result = game.run() self.assertEqual(result, 109)
def test_not_enough_frames(self): game = BowlingScore('174/34723/X21X33') result = game.run() self.assertEqual(result, NotEnoughFrames)
def test_strike_error(self): game = BowlingScore('1X174/34723/X21X33') result = game.run() self.assertEqual(result, StrikeError)
def test_value_error_3(self): game = BowlingScore('/6174/34723/X21X33') result = game.run() self.assertEqual(result, ValueError)