Skip to content

Instantly share code, notes, and snippets.

@93rus
Last active June 11, 2025 19:29
Show Gist options
  • Select an option

  • Save 93rus/accff753a408d2806b8db280de63e225 to your computer and use it in GitHub Desktop.

Select an option

Save 93rus/accff753a408d2806b8db280de63e225 to your computer and use it in GitHub Desktop.
"""
Заказчик - букмекерская контора.
Цель - написать код, принимающий на вход результат - “1:1” и ставку “0:0” и
вернуть результат в виде: 1 - клиент угадал результат, 0 - угадал исход, -1 - не угадал.
Если входные данные некорректны (например, строки не в формате "X:Y", содержат буквы, отрицательные числа или другие ошибки),
код должен вернуть ошибку с понятным сообщением.
"""
def parse_score(score_str: str) -> tuple[int, int]:
if not isinstance(score_str, str):
raise TypeError("Входные данные должны быть строками")
parts = score_str.split(':')
if len(parts) != 2:
raise ValueError(f"Некорректный формат: '{score_str}'. Ожидается 'X:Y'")
try:
home = int(parts[0])
away = int(parts[1])
except ValueError:
raise ValueError(f"Некорректные числа в счёте: '{score_str}'")
if home < 0 or away < 0:
raise ValueError(f"Отрицательное значение в счёте: '{score_str}'")
return home, away
def compare_results(result: tuple[int, int], bet: tuple[int, int]) -> int:
if result == bet:
return 1
result_outcome = (result[0] - result[1]) // max(1, abs(result[0] - result[1])) if result[0] != result[1] else 0
bet_outcome = (bet[0] - bet[1]) // max(1, abs(bet[0] - bet[1])) if bet[0] != bet[1] else 0
if result_outcome == bet_outcome:
return 0
return -1
def check_bet(result_str: str, bet_str: str) -> int:
result = parse_score(result_str)
bet = parse_score(bet_str)
return compare_results(result, bet)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment