Вы сбрасываете значение done
каждый раз, когда запускаете цикл. Мало того - вы пытаетесь изменить значение глобальной переменной, но вместо этого изменяете значение простого параметра, поэтому lol(done)
фактически ничего не делает.
Если вы хотите сохранить его в функции, вы должны использовать ключевое слово global
, чтобы указать, что вы используете глобальные переменные:
def lol():
global done
global really_done
done += 1
really_done = done == 10
really_done = False
done = 0
while not really_done:
lol()
Это должно работать, но это плохой код - вы не должны использовать global
, если это не является реальной необходимостью . Не меняя большую часть своего кода, вы можете использовать return
, чтобы сохранить ваш код чище:
def lol(done, really_done):
done += 1
really_done = done == 10
return done, really_done
really_done = False
done = 0
while not really_done:
done, really_done = lol(done, really_done)
Это делает его немного лучше. Тем не менее, мы можем решить все, просто зациклив range
с for
:
done = 0
for n in range(10):
done += 1
print(done)