Помогите исправить код на python

Пытался сделать игру black jack на python, но у меня получилось очень много ошибок в коде, которые я не могу исправить. Правила игры в black jack:

"Цель игры — набрать 21 очко или близкую к этому сумму. Если игрок набирает сумму очков, превышающую 21, то его ставка проигрывает. Если сумма очков на картах дилера больше, чем 21, то все ставки, оставшиеся в игре, выигрывают. Игроки, набравшие сумму очков большую, чем дилер, выигрывают, их ставки оплачиваются 1:1."

Вот весь код, и после него я напишу все ошибки, которые у меня есть.

import random

score = random.randint(4, 20) #пользователь
scoreBot = random.randint(4, 20) #дилер

print("Поиграем в твое очко!")
print("Если ты набрал 21, то нажми \n'Enter'")
print("Если больше не хочешь играть, то напиши английскую 'e'")

state = ("Победил", "Проиграл")

class Game:
    isWin = 0
    
    def getCard(self):
        return random.randint(2,10)
    def AI(self):
        if scoreBot < 21:
            scoreBot += getCard()

    def getResult(self):
        if score > scoreBot: isWin = 1
        else:
            isWin = 0

        if score > 21:
            win = 0
            print("У противника ",scoreBot," очков, у тебя ", score)
            print("Ты", state[isWin])
            print("Если хочешь сыграть еще, то нажми \n'Enter'")
            print("------------")

        if score == 21:
            win = 1
            print("У противника ",scoreBot," очков, у тебя ", score)
            print("Ты выйграл!")
            print("Если хочешь сыграть еще, то нажми \n'Enter'")
            print("------------")
            
        
        

game=Game()
choose = ''
while choose != 'e':
    if score > 21:
        game.getResult()
    print("У противника ",scoreBot," очков, у тебя ", score)
    choose = input('Взозьмешь карту? (+)/(-)\n')

    if choose == '+':
        score += game.getCard()
    elif choose == '-':
        print(" Ты набрал ", score)
    else: 
        game.getResult()
        score = random.randint(4, 20)
        scoreBot = random.randint(4, 20)

  1. Когда ты выигрываешь или наоборот выигрываешь, то счетчик очков не сбрасывается.
  2. Если пользователь ставит -, то дилер не хочет брать карту и потом все ломается.
  3. Так же когда, когда пользователь все таки набирает эти 21 очка, то приходится еще раз нажимать на Enter, что не должно было быть.
  4. Ну и последняя ошибка, которая у меня есть - это то, что пользователь может бесконечно нажимать + и счетчик может дойти до больших значений, что не должно быть.

Ответы (1 шт):

Автор решения: gord1402

Для начала нужно всё перенести в класс чтобы не путаться с переменными. Но, для того чтобы выиграть, достаточно не брать карту я так понимаю что диллер необязательно берёт карту или есть ещё правила.
Вот исправленный код:

import random


def get_card():
    return random.randint(2, 10)


class Game:
    def __init__(self):
        self.score = random.randint(4, 20)  # пользователь
        self.scoreBot = random.randint(4, 20)  # дилер

    def game_step(self):
        print("У противника ", self.scoreBot, " очков, у тебя ", self.score)
        choose = input('Возьмешь карту? (+)/(-)\n')
        if choose == 'e':
            return False  # Если игрок хочет выйти выходим из цикла

        if choose == '':
            self.print_over(self.get_result())  # Заканчиваем игру если игрок ввёл Enter
            self.__init__()  # Обнуляем класс
            return True

        if choose == '+':
            self.score += get_card()  # если игрок ввёл + добавляем карту
            if self.score == 21:
                self.print_over(True)  # если счёт 21, то игрок выиграл
                self.__init__()
            elif self.score > 21:
                self.print_over(False)  # если больше то проиграл
                self.__init__()
        elif choose == '-':
            print(" Ты набрал ", self.score)
            self.ai_step()  # Если игрок ввёл - то дилер делает ход
            if self.scoreBot > 21:
                self.print_over(True)  # если счёт дилера больше 21, то игрок выиграл
                self.__init__()

        return True

    def ai_step(self):
        self.scoreBot += get_card()

    def get_result(self):
        """
        Проверяет выигрыш
        :return: True - выиграл False - Проиграл
        """
        if self.score > self.scoreBot or self.score == 21 and self.score < 21:
            return True
        else:
            return False

    def print_over(self, result):
        """
        Выводит сообщение о конце игры
        :param result: Результат игрока
        :return:
        """
        print("У противника ", self.scoreBot, " очков, у тебя ", self.score)
        if result:
            print("Ты выиграл!")
        else:
            print("Ты проиграл!")
        print("------------")


game = Game()  # Создаём новую игру

print("Поиграем в твое очко!")
print("Если больше не хочешь играть, то напиши английскую 'e'")

while game.game_step():  # Играем пока не False
    pass
→ Ссылка