Ошибка в коде с циклом и break

Всем привет, в моем коде возникла ошибка, которую даже представить не знаю как решить. Ошибка заключается в том, что выбирается рандомное число от 0 до 1, если число равняется 1, то по идее выполняется break и соответственно должно выходить из цикла. Но почему-то это не происходит и код идет дальше (если бы число равнялось 0). Вроде раньше все было хорошо, но вчера возникла эта ошибка, пытался поискать ошибки, но нигде ничего не нашел. Прошу помочь, заранее спасибо!

def MeetMonster():
    Shrek.Level = rd.randint(1, 3) * Pl.Level
    Shrek.Hp = rd.randint(3, 10 * (Pl.Level)) * Shrek.Level + Pl.Damage
    Shrek.Damage = (Shrek.Level * 4) * Pl.Level
    Monster = rd.choice(Shrek.Name)

    print("Ты набрел на монстра - {0}, у него {1} уровень, {2} здоровья и {3} урона".format(Monster, Shrek.Level, Shrek.Hp, Shrek.Damage))
    sleep(0.4)
    print()

    while True:
        choice = input("Попытаться убежать или будешь сражаться (бег/атака)?: ").lower()
        print()
        sleep(0.4)
        if choice == "бег":
                                      *Ошибка здесь*
            if rd.randint(0, 1) == 1:
                print("Фух, пронесло...")
                print()
                break
            else:
                print("Монстр оказался чересчур сильным и догнал тебя...")
                print()
                sleep(0.4)
                break
        elif choice == "атака":
            break
        else:
            continue
                          *Из-за этой ошибки оно запускает вот это:*

    while Shrek.Hp > 0:
        if Pl.Critical >= rd.randint(1, 10):
            Shrek.Hp -= Pl.Damage * 2
            print("Вы нанесли критический удар!")
            sleep(0.4)
        else:
            Shrek.Hp -= Pl.Damage
        sleep(0.4)
        print("Ты атаковал монстра и у него осталось", Shrek.Hp, "здоровья")                         
        sleep(0.4)
        print()

        if Shrek.Hp > 0:
            if Pl.Dodge >= rd.randint(1, 10):
                Pl.Hp -= 0
                print("Вы уклонились!")
                sleep(0.4)
            else:
                Pl.Hp -= (Shrek.Damage - Pl.Armor)
                if Shrek.Damage < 0:
                    Pl.Hp - 0
                print("Монстр ударил тебя и у тебя осталось", Pl.Hp, "здоровья")
            print()
            sleep(0.4)
        else:
            corruption = Pl.Corruption
            corruption = 2
            xp = Pl.Xp
            xp = rd.randint(25, 50) * Shrek.Level
            loot = rd.randint(5, 25) * Shrek.Level
            if Pl.PlusMonsterCoinDrop > 0:
                Pl.Coins += (loot * Pl.Level * (1.0 + Pl.PlusMonsterCoinDrop))
                Pl.Xp += (xp * (1.0 + Pl.PlusMonsterCoinDrop))
                Pl.Corruption += 2
                Pl.Score += 120
            else:
                Pl.Coins += (loot * Pl.Level)
                Pl.Xp += xp
                Pl.Corruption += 2
                Pl.Score += 100
            print("Тебе удалось одолеть монстра, за что ты получил", loot, "монет,", xp, "опыта", "и", corruption, "единиц искажения" )
            print()
            LevelUp()
            sleep(0.2)
            PrintCorruption()
            PrintCoins()
            PrintXp()
            PrintHp()
            print()
            Pl.MonsterKilled += 1
        if Pl.Hp <= 0:
            break
                      
                                *Функция "произведения" ситуаций*
def GameLoop():
    Place = rd.randint(1, 1000)
    if Place == Place > 50 and Place == Place <= 250:
        Pl.Score += 25
        MeetMonster()
        sleep(0.2)

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

Автор решения: Edward Grachev
break

Прерывает только текущий цикл

 while Shrek.Hp > 0:

у тебя будет запускаться всегда когда HP > 0. Советую вынести это в отдельную функцию.

while True:
    choice = input("Попытаться убежать или будешь сражаться (бег/атака)?: ").lower()
    if choice == "бег":
        if random.randint(0, 1) == 1:
            print("Фух, пронесло...")
            print()
            break
        else:
            print("Монстр оказался чересчур сильным и догнал тебя...")
            break
    elif choice == "атака":
       battle():
       break



def battle():
   # Твой код
    pass

А вообще так как у тебя цикл находится в функции можно сделать return в место breakесли тебе не нужно дальнейшее выполнение кода.

так же тебе не нужна конструкция

else:
    continue

Так как твой цикл ничего не прерывает, он будет крутиться и без этой конструкции

continue

Используется для досрочного перезапуска цикла

→ Ссылка
Автор решения: Tehnorobot

Если вам нужно, чтоб функция прекращала работать, то вы можете воспользоваться return:

if rd.randint(0, 1) == 1:
    print("Фух, пронесло...")
    print()
    return

То есть, после выполнения данного условия, действия не перейдут в while Shrek.Hp > 0:

→ Ссылка