Работа с флагове в Python

Флаг - това е специална променлива, която може да приема само две стойности: True или False. С помощта на флагове могат да се решават задачи, проверяващи липсата на нещо: например, може да се провери, че в списъка няма елемент с определена стойност.

Нека решим следната задача: даден е списък с числа, трябва да се провери дали всички елементи в него са положителни. За това ще зададем специална променлива flag, която преди началото на цикъла ще бъде истина. А при срещане на отрицателно число в цикъла, ще променим стойността й на False. За да разберем резултата от проверката, ще изведем променливата flag след цикъла в конзолата:

pythonlst = [1, 2, 3, 4, 5]
flag = True

for el in lst:
  if el < 0:
    flag = False
    
print(flag) # ще изведе True, защото всички числа са положителни

Добро практика е даването на име на променливата-флаг, което отразява зададеното условие. Нека преименуваме flag на isAllPositive. И за по-голяма яснота променим едно число от списъка на отрицателно:

pythonlst = [1, 2, 3, -4, 5]
isAllPositive = True

for el in lst:
  if el < 0:
    isAllPositive = False
    
print(isAllPositive) # ще изведе False, защото има отрицателно число

Ако в обхождания списък има много стойности и е необходимо цикълът да спре след откриването на първото отрицателно число, трябва да се използва инструкцията break:

pythonfor el in lst:
  if el < 0:
    isAllPositive = False
    break

При работа с флагове, за да се разбере резултатът от изпълнението на цикъла, може да се изведе не стойността на флага, а произволно съобщение с помощта на допълнителен if.

Нека пренапишем предишния пример. Ако всички елементи са положителни, нека се изведе '+++', ако не - '---':

pythonfor el in lst:
  if el < 0:
    isAllPositive = False
    break

if isAllPositive:
  print('+++')
else:
  print('---') # ще изведе '---'
Задание 1

Даден е списък. Проверете дали всички негови елементи са положителни числа.

Задание 2

Дадено е цяло число. Проверете дали то е просто, тоест се дели само на единица и на себе си.