Для чего нужны переменные флаги?
не нужно воспринимать флаги как что-то супер-специфическое или суперсложное
это не более чем обычная переменная которая влияет на поток программы
пример из жизни
вы программируете целый день на работе и вечером идете домой
допустим в течении дня может позвонить супруга и попросить зайти вечером в магазин (выставляет флаг ЗАЙТИ_В_МАГАЗИН = True)
в конце дня этот флаг проверяется - если он True - то мы зайдем в магаз, если нет - соответственно не зайдем
нюансы здесь:
- флаг может быть выставлен в ЛЮБОЕ время
- флаг не обязательно выставляете Вы сами!
- Ваша реакция на флаг не обязательно сиюминутная
- перед уходом домой лучше позвонить супруге и уточнить состояние флага :)
флаг не обязательно должен быть буленовской переменной, это понятие скорее логическое, например вместо флага ЗАЙТИ_В_МАГАЗИН (при котором не совсем понятно что покупать то) может использоваться более умная конструкция типа ArrayList списокПокупок = {}. Вначале дня список пустой, в течении дня жена вспоминает чтото - и дописывает вещи в спискоПокупок
в конце дня вы просто проверяете - пуст ли список (флага нет) - и тогда идете домой  с чистой совестью
если же там есть хоть что-то (флаг поднят) - Вы уже знаете что 1) идти нужно 2) что именно нужно купить
Переменные флаги как правило глобальные переменные булевого типа и используется обычно для синхронизации выполнения подпрограмм в разных потоках. Понятие флаг установлен, флаг снят - эквивалентно true и false.