Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
174 changes: 174 additions & 0 deletions lesson_07/hw.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
import random
import sys
import time


class Bag:
def __init__(self):
self.barrels = [val for val in range(1, 91)]

def choose(self):
bar = random.choice(self.barrels)
self.barrels.remove(bar)
print('Новый бочонок: ' + str(bar) + '(осталось ' + str(len(self.barrels)) + ')')
return bar


class Card:
def __init__(self, name='Ваша карточка'):
self.r = sorted(random.sample(range(1, 91), 15))
self.name = name
self.rows = []
i = 0
for _ in range(3):
self.rows += self.dashes(self.r[i:i + 5])
i += 5
self.num = len(self.rows)

def mark(self, num):
for i in range(0, len(self.rows)):
if self.rows[i] == num:
self.rows[i] = '-'
self.num -= 1

def set_name(self, name):
self.name = name

@staticmethod
def dashes(row):
it = iter(row)
indeces = list(range(len(row) + 4))
dash_indeces = set(random.sample(indeces, 4))
row = [' ' if i in dash_indeces else next(it) for i in indeces]
return row

def __str__(self):
s = ''
ch_num = (26 - len(self.name)) / 2
for _ in range(0, int(ch_num) + 1):
s += '-'
s += self.name
for _ in range(0, int(ch_num)):
s += '-'
s += '\n'
i = 0
for _ in range(0, 3):
s += ' ' + ' '.join(map(str, self.rows[i:i + 9]))
s += '\n'
i += 9
s += '--------------------------'
return s


class Player:
def __init__(self, card):
self.card = card


class User(Player):
def __init__(self, card):
Player.__init__(self, card)

def check_b(self, barrel):
z = input('Зачеркнуть цифру? (y/n) \n')
if z == 'y':
if barrel in self.card.rows:
self.card.mark(barrel)
return 1
else:
return 0
elif z == 'n':
if barrel not in self.card.rows:
return 1
else:
return 0
else:
return 0


class Computer(Player):
def __init__(self, card):
Player.__init__(self, card)
self.card.set_name('Карточка компьютера')

def check_b(self, barrel):
for val in self.card.rows:
if barrel == val:
self.card.mark(val)


modes = {
'1': 'comp - user',
'2': 'comp - comp',
'3': 'user - user'
}


def pr_modes(md):
for val in modes:
print('{}. {}'.format(val, modes[val]))
g_md = int(input('Выберите режим игры '))
return g_md


g_mode = pr_modes(modes)

card_1 = Card()
card_2 = Card()
bag = Bag()

while g_mode not in [1, 2, 3]:
g_mode = pr_modes(modes)

if g_mode == 1:
comp = Computer(card_1)
user = User(card_2)
print(card_1)
print(card_2)
while True:
bg_val = bag.choose()
print(card_1)
print(card_2)
comp.check_b(bg_val)
if user.check_b(bg_val) == 0 or comp.card.num == 0:
print('Выиграл компьютер')
sys.exit()
if user.card.num == 0:
print('Вы победили')
sys.exit()

elif g_mode == 2:
comp_1 = Computer(card_1)
comp_2 = Computer(card_2)
print(card_1)
print(card_2)
while True:
bg_val = bag.choose()
comp_1.check_b(bg_val)
comp_2.check_b(bg_val)
print(card_1)
print(card_2)
time.sleep(2)
if comp_1.card.num == 0:
print('Выиграл компьютер 1')
sys.exit()
if comp_2.card.num == 0:
print('Выиграл компьютер 2')
sys.exit()
elif g_mode == 3:
user_1 = User(card_1)
user_2 = User(card_2)
print(card_1)
print(card_2)
while True:
bg_val = bag.choose()
print(card_1)
print(card_2)
if user_1.check_b(bg_val) == 0 or user_2.card.num == 0:
print('Выиграл игрок 2')
sys.exit()
if user_2.check_b(bg_val) == 0 or user_1.card.num == 0:
print('Выиграл игрок 1')
sys.exit()

bag.choose()