Ошибка в коде с циклом и 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 шт):
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
Используется для досрочного перезапуска цикла
Если вам нужно, чтоб функция прекращала работать, то вы можете воспользоваться return:
if rd.randint(0, 1) == 1:
print("Фух, пронесло...")
print()
return
То есть, после выполнения данного условия, действия не перейдут в while Shrek.Hp > 0: