Ваша программа фактически выходит из "боя" l oop, но она отправляется обратно, потому что играющая l oop все еще работает.
Причина, по которой вы не нарушаете вне игры l oop в том, что ваша «играющая» переменная является локальной, а не глобальной. Таким образом, когда вы изменяете переменную в функции, она не меняет переменную в main (даже если они имеют одно и то же имя), которую вы используете для управления параметром while l oop. Возможным решением для этого было бы возвращение «игры» в конце вашей функции. Вот модифицированный код, который должен соответствовать вашим целям:
'' '
fight = True
a = "enemy"
t = ""
ccd = False,False
playing = True
def lvl():
playing = True
fight = True
while fight:
if a == "enemy":
t = "enemy"
else:
t = "player"
while t == "enemy":
print ("enemy attacks player")
t = "player"
while t == "player":
if ccd == (False , False):
fight = False
playing = False
t = "enemy"
return playing
fight = True
while playing:
fight = True
playing = lvl()
while not playing:
print ("no")
' ''