вырваться из цикла - PullRequest
0 голосов
/ 14 января 2020

Так что это упрощенная версия моего большего кода (есть некоторые ненужные биты, которые имеют больше смысла в моем основном коде), и я не могу понять, почему он не вырывается ни из игры, ни из циклов борьбы:

fight = True
a = "enemy"
t = "" 
ccd = False,False
playing = True

def lvl():
    playing = True
    fight = True    
    while fight:
        if a == "enemy":
            t = "enemy"
        else:
            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
                turn = "no one"
            t = "enemy"

fight = True
while playing:
    fight = True
    lvl()
while not playing:
    print ("no")

Ответы [ 2 ]

0 голосов
/ 14 января 2020

Ваша программа фактически выходит из "боя" 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")

' ''

0 голосов
/ 14 января 2020

Чтобы lvl () влиял на глобальную переменную, вы должны сделать следующее:

def lvl():
    global playing
    playing = True
...