From 875ee03d5254013128171c395c8acb100f3f2de5 Mon Sep 17 00:00:00 2001 From: Anker166 Date: Thu, 5 Sep 2019 10:08:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B4=D0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lesson07/home_work/loto.py | 121 ++++++++++++++++++++++++++++++++++++- 1 file changed, 120 insertions(+), 1 deletion(-) diff --git a/lesson07/home_work/loto.py b/lesson07/home_work/loto.py index 5ea6ad844..d8f583bd3 100644 --- a/lesson07/home_work/loto.py +++ b/lesson07/home_work/loto.py @@ -2,7 +2,6 @@ """ == Лото == - Правила игры в лото. Игра ведется с помощью специальных карточек, на которых отмечены числа, @@ -57,3 +56,123 @@ модуль random: http://docs.python.org/3/library/random.html """ +import random + +numbers = [i for i in range(1, 91)] + + +class Ticket: + + def __init__(self): + self.ticket = [['' for _ in range(9)] for _ in range(3)] + self.ticket_numbers = random.sample(numbers[:], 15) + __index = [_ for _ in range(9)] + __position_index = [] + __position_number = [] + + for i in range(0, 11, 5): + __position_number.extend([sorted(self.ticket_numbers[i:i + 5])]) + for i in range(3): + __position_index.extend([sorted(random.sample(__index[:], 5))]) + + for i in range(3): + for j in range(5): + self.ticket[i][__position_index[i][j]] = __position_number[i][j] + + def get_ticket_nums(self): + return self.ticket_numbers + + def print_ticket(self, n='Player'): + if n == 'Computer': + print(f' Карточка компьютера '.center(26, '-')) + else: + print(f' Ваша карточка '.center(26, '-')) + for row in self.ticket: + for el in row: + print(f'{el}'.rjust(2), end=' ') + print() + print('-' * 26) + + def check_number(self, num, ans): + if ans == 'y': + if num in self.ticket[0] or num in self.ticket[1] or num in self.ticket[2]: + for i in range(3): + if num in self.ticket[i]: + self.ticket[i][self.ticket[i].index(num)] = '-' + self.ticket_numbers.remove(num) + return True + else: + print('Вы проиграли') + return False + elif ans == 'n': + if num in self.ticket[0] or num in self.ticket[1] or num in self.ticket[2]: + print('Вы проиграли') + return False + else: + return True + + def check_number_comp(self, num): + for i in range(3): + if num in self.ticket[i]: + self.ticket[i][self.ticket[i].index(num)] = '-' + self.ticket_numbers.remove(num) + + +def new_num(): + kegs = numbers[:] + random.shuffle(kegs) + for num in kegs: + yield num, len(kegs) - (kegs.index(num) + 1) + + +def check_answer(): + while True: + answer = input('Зачеркнуть цифру? (y/n)\n').lower() + if answer == 'y' or answer == 'n': + break + else: + print('Вы ввели неправильную команду, попробуйте снова!') + return answer + + +def info(x): + text_info = ['Старт игры', 'Новый раунд', + 'Победили оба игрока', 'Победил игрок', + 'Победил компьютер', + ] + print('♦' * 26) + print(f'{text_info[x]}'.center(26, '-')) + print('♦' * 26) + + +player_ticket = Ticket() +computer_ticket = Ticket() + + +info(0) + +for number, residue in new_num(): + print(f'Новый бочонок: {number} (Осталось: {residue})') + player_ticket.print_ticket() + computer_ticket.print_ticket('Computer') + player_answer = check_answer() + if not player_ticket.check_number(number, player_answer): + break + # player_ticket.check_number_comp(number) + computer_ticket.check_number_comp(number) + if len(player_ticket.get_ticket_nums()) == 0 and len(computer_ticket.get_ticket_nums()) == 0: + info(2) + player_ticket.print_ticket() + computer_ticket.print_ticket('Computer') + break + elif len(player_ticket.get_ticket_nums()) == 0: + info(3) + player_ticket.print_ticket() + computer_ticket.print_ticket('Computer') + break + elif len(computer_ticket.get_ticket_nums()) == 0: + info(4) + player_ticket.print_ticket() + computer_ticket.print_ticket('Computer') + break + info(1) \ No newline at end of file