-
Notifications
You must be signed in to change notification settings - Fork 0
/
Lotto.py
120 lines (106 loc) · 5.49 KB
/
Lotto.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import random
class LotoCard:
"""
Класс для генерации чисел лото-карточки
"""
def __init__(self):
self.card_lst = []
self.card_player = str
self.card_computer = str
def create_card(self):
# Создание общего списка с элементами игровых карточек player[1] и computer[0]
self.card_lst = [[random.sample([
item for elem in [(' ', num)
for _, num in zip(range(5), random.sample(list(range(91)), 5))]
for item in elem], 10) for _ in range(3)] for _ in range(2)]
[self.card_lst[j].insert(i * 2, '\n') for j in range(len(self.card_lst)) for i in range(0, 3)]
class Computer(LotoCard):
"""
Создание индивидуальной карточки компьютера
"""
def __init__(self):
super().__init__()
LotoCard.create_card(self)
self.card_lst_computer = [i for e in self.card_lst[0] for i in e]
def create_card_computer(self):
# Исключение повторяющихся элементов и добавление спец. символов для создания интерфейса карточки.
for i in self.card_lst_computer:
if self.card_lst_computer.count(i) > 1 and i not in [' ', '\n']:
self.card_lst_computer[self.card_lst_computer.index(i)] = random.randint(1, 91)
self.card_lst_computer.insert(0, ('-' * 6 + 'Карточка компьютера' + '-' * 6))
self.card_lst_computer.insert(34, '\n' + ('-' * 31))
self.card_computer = ' '.join(list(map(str, self.card_lst_computer)))
return self.card_computer
class Player(Computer):
"""
Создание индивидуальной карточки игрока
"""
def __init__(self):
super().__init__()
LotoCard.create_card(self)
self.card_lst_gamer = [i for e in self.card_lst[0] for i in e]
def create_card_player(self):
# Исключение повторяющихся элементов и добавление спец. символов для создания интерфейса карточки.
for i in self.card_lst_gamer:
if self.card_lst_gamer.count(i) > 1 and i not in [' ', '\n']:
self.card_lst_gamer[self.card_lst_gamer.index(i)] = random.randrange(1, 91)
for i in self.card_lst_gamer:
if i in self.card_lst_computer and i not in [' ', '\n']:
self.card_lst_gamer[self.card_lst_gamer.index(i)] = random.randrange(1, 91)
self.card_lst_gamer.insert(0, ('-' * 9 + 'Ваша карточка' + '-' * 9))
self.card_lst_gamer.insert(34, '\n' + ('-' * 31))
self.card_player = ' '.join(list(map(str, self.card_lst_gamer)))
return self.card_player
class LottoGame(Player):
"""Игра"""
@staticmethod
def barrel_choice():
# Функция-имитация случайного выбора бочонка
bag = list(range(1, 91))
random.shuffle(bag)
for barrel in bag:
yield barrel
def game(self):
# Создание карточек игроков.
Computer.create_card_computer(self)
Player.create_card_player(self)
for num in LottoGame.barrel_choice():
print(self.card_player)
print(self.card_computer)
anw = input(f'Номер бочонка: {num}\nВычеркиваем из карточки?\ny/n\n')
if anw == 'y':
if num in self.card_lst_gamer:
# Реализация вычеркивания номера бочонка из карточки
self.card_lst_gamer[self.card_lst_gamer.index(num)] = ' -'
self.card_player = ' '.join(list(map(str, self.card_lst_gamer)))
# Проверка есть ли еще числа в карточке игрока.
count_num = 0
for elem in self.card_player:
if elem.isdigit():
count_num += 1
if count_num == 0:
print('Вы выиграли!')
break
else:
print('Вы проиграли!\nКомпьютер победил!')
break
else:
# Реализация хода компьютера
if num in self.card_lst_computer:
self.card_lst_computer[self.card_lst_computer.index(num)] = ' -'
self.card_computer = ' '.join(list(map(str, self.card_lst_computer)))
# Проверка есть ли еще числа в карточке.
count_num = 0
for elem in self.card_computer:
if elem.isdigit():
count_num += 1
if count_num == 0:
print('Вы проиграли!\nКомпьютер победил!')
break
if num in self.card_lst_gamer:
print('Вы проиграли!\nКомпьютер победил!')
break
else:
pass
game = LottoGame()
game.game()