Задать вопрос
@FCKJesus

Как улучшить код?

Начинающий кодер, решил сделать простенький блекджек.
Можете указать на явные ошибки в оформлении кода.
И как бы вы оформили тот или иной кусочек.
P.S. знаю что класс тут бесполезный просто для тренировки использовал
import random


class BlackJack:
	def __init__(self):
		self.suits = ['♠', '♣', '♥', '♦']
		self.faces = [2, 3, 4, 5, 6, 7, 8, 9, 10, 'J', 'Q', 'K', 'T']
		self.value = {2:2, 3:3, 4:4, 5:5, 6:6, 7:7, 8:8, 9:9, 10:10, 'J':10, 'Q':10, 'K':10, 'T':11}
		self.deck = [] # Колода
		self.hand = [] # Карты в руке
		for self.suit in self.suits:
			for self.face in self.faces:
				self.deck.append((self.suit, self.face))



	def hit(func):
		def wrapper(self):
			self.card = random.choice(self.deck)
			self.deck.remove(self.card)
			self.hand.append(self.card)
			self.b_hand = [] #Красивое отображение карт
			for x in range(len(self.hand)):
				for self.y in self.hand[x]:
					self.b_hand.append(self.y)
			func(self)
		return wrapper
          
	@hit
	@hit
	def gamer(self):
		self.result_gamer = self.value.get(self.hand[0][1]) + self.value.get(self.hand[1][1])
		print(f'Ваши карты {self.b_hand} Cчет: {self.result_gamer}', end='')
		if self.result_gamer == 21 or self.result_gamer == 22:
			#print(f'Ваши карты {self.b_hand}', end='')
			print('\nУ вас BlackJack\n')
		else:
			while True:
				self.answer = input('\nНужна еще карта? Y/N ').lower()
				if self.answer == 'y' or self.answer == 'yes' or self.answer == 'н':
					self.card = random.choice(self.deck)
					self.deck.remove(self.card)
					self.hand.append(self.card)
					self.b_hand = []
					for x in range(len(self.hand)):
						for self.y in self.hand[x]:
							self.b_hand.append(self.y)
					self.result_gamer += self.value.get(self.hand[-1][-1])
					if self.result_gamer > 21:
						print(f'Ваши карты {self.b_hand} \nВаш счет {self.result_gamer}', end='')
						print('\nПеребор')
						break
					elif self.result_gamer == 21:
						print(f'Ваши карты {self.b_hand} Cчет: {self.result_gamer}', end='')
						print('\n У вас BlackJack')
					else:
						print(f'Ваши карты {self.b_hand} \nВаш счет {self.result_gamer}', end='')
						continue

						self.hand.clear()
				elif self.answer == 'n' or self.answer == 'no' or self.answer == 'т':
					self.hand.clear()
					self.croupier()
					break


	@hit
	@hit
	def croupier(self):
		print(f'Карты курпье {self.b_hand}', end='')
		self.result_croupier = self.value.get(self.hand[0][1]) + self.value.get(self.hand[1][1])
		while True:
			if self.result_croupier > self.result_gamer and self.result_croupier <= 21:
				print(f'Cчет: {self.result_croupier} \nВы проиграли\n', end='')
				break
			else:
				if self.result_croupier == self.result_gamer and self.result_croupier >= 11:
					print(f'Cчет: {self.result_croupier} \nНичья\n', end='')
					break
				else:	
					self.card = random.choice(self.deck)
					self.deck.remove(self.card)
					self.hand.append(self.card)
					self.b_hand = []
					for x in range(len(self.hand)):
						for self.y in self.hand[x]:
							self.b_hand.append(self.y)
					self.result_croupier += self.value.get(self.hand[-1][-1])
					print('Крупье добирает карту')
					#print(self.b_hand)

					if self.result_croupier > self.result_gamer and self.result_croupier <= 21:
						print(f'Карты курпье {self.b_hand} Cчет: {self.result_croupier} \nВы проиграли\n', end='')
						break
					elif self.result_croupier == self.result_gamer:
						print(f'Карты курпье {self.b_hand}', end='')
						print(' Cчет: ', self.result_croupier)
						print('Ничья')
						break
					elif self.result_croupier > 21:
						print(f'Карты курпье {self.b_hand} Cчет: {self.result_croupier} \nВы победили\n', end='')
						break
					else:
						continue
			


while True:
	game = BlackJack()
	game.gamer()
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
yupiter7575
@yupiter7575
Python программист
Функция вызывает функцию созданную внутри функции ._.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы