Example #1
0
# Надо написать 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
#зачет!
Example #2
0
 def test(self):
     game = BowlingScore('42174/34723/X21X33')
     result = game.run()
     self.assertEqual(result, 109)
Example #3
0
 def test_not_enough_frames(self):
     game = BowlingScore('174/34723/X21X33')
     result = game.run()
     self.assertEqual(result, NotEnoughFrames)
Example #4
0
 def test_strike_error(self):
     game = BowlingScore('1X174/34723/X21X33')
     result = game.run()
     self.assertEqual(result, StrikeError)
Example #5
0
 def test_value_error_3(self):
     game = BowlingScore('/6174/34723/X21X33')
     result = game.run()
     self.assertEqual(result, ValueError)