После выполнения одного из условий elif программа всё равно выполняет else после break в цикле while

В этом коде проверяется то, какую ставку делает пользователь и выводится количество денег после ставки. Я использовал try и except чтобы ловить ошибку если пользователь введет вместо цифры букву. А если пользователь введет неизвестное число то программа по идее должна была просто выводить предупреждение и заново запускать код.

class BlackJack(object):
    """docstring for BlackJack"""
    def __init__(self, arg):
        super(BlackJack, self).__init__()
        self.arg = arg

    def bet(self, amount):
        self.arg -= amount
        return self.arg

cash = 2500
bet = 0

bjack = BlackJack(cash)

print('У вас',cash)

Следующая часть кода предположительно содержит ошибку.

def main():
    try:
        z = int(input('введите число для ставки\nчтобы поставить 100 нажмите 1\nчтобы поставить 200 нажмите 2\nчтобы поставить 500 нажмите 3\nчтобы поставить 1000 нажмите 4\n'))

        while True:
            if z == 1:
                bet = bjack.bet(100)
                print('\nваша ставка',cash - bet,'(ваш счет -',bet,')')
                break

            elif z == 2:
                bet = bjack.bet(200)
                print('\nваша ставка',cash - bet,'(ваш счет -',bet,')')
                break

            elif z == 3:
                bet = bjack.bet(500)
                print('\nваша ставка',cash - bet,'(ваш счет -',bet,')')
                break

            elif z == 4:
                bet = bjack.bet(1000)
                print('\nваша ставка',cash - bet,'(ваш счет -',bet,')')
                break

            else:
                print('\nВы ввели неизвестное число,\nхотя ожидалось одно из следующих цифр: 1,2,3,4\n')
                main()

    except ValueError:
        print('\nОшибка! Вы ввели букву вместо цифры!\n')
        main()
main()

При запуске программы через терминал программа просит ввести одно из следующих цифр: 1,2,3,4.

У вас 2500
введите число для ставки
чтобы поставить 100 нажмите 1
чтобы поставить 200 нажмите 2
чтобы поставить 500 нажмите 3
чтобы поставить 1000 нажмите 4

Специально ввожу цифру 7 и тут срабатывает ELSE

Вы ввели неизвестное число,
хотя ожидалось одно из следующих цифр: 1,2,3,4

введите число для ставки
чтобы поставить 100 нажмите 1
чтобы поставить 200 нажмите 2
чтобы поставить 500 нажмите 3
чтобы поставить 1000 нажмите 4

Потом ввожу цифру 2 и по идее программа должна выполнить вычисление и завершиться, но вместо этого программа выполняет и вычисление и потом ещё раз зачем-то запускает ELSE

ваша ставка 200 (ваш счет - 2300 )

Вы ввели неизвестное число,
хотя ожидалось одно из следующих цифр: 1,2,3,4

введите число для ставки
чтобы поставить 100 нажмите 1
чтобы поставить 200 нажмите 2
чтобы поставить 500 нажмите 3
чтобы поставить 1000 нажмите 4

И дальше это продолжается как замкнутый круг. Извиняюсь если вопрос задан некорректно! Заранее спасибо!


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

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

Предположу, что ваш код должен выглядеть как-то так

def main():
   bets = { 1: 100, 2:200, 3:500, 4:1000}
   while True:
      try:
         z = int(input('введите число для ставки\nчтобы поставить 100 нажмите 1\nчтобы поставить 200 нажмите 2\nчтобы поставить 500 нажмите 3\nчтобы поставить 1000 нажмите 4\n'))

         if z in bets:
            bet = bjack.bet(bets[z])
            print('\nваша ставка',cash - bet,'(ваш счет -',bet,')')
            break
         else:
            print('\nВы ввели неизвестное число,\nхотя ожидалось одно из следующих цифр: 1,2,3,4\n')
      except ValueError:
         print('\nОшибка! Вы ввели букву вместо цифры!\n')
main()
→ Ссылка