Когда нужно использовать ветвление в программе питон

Фундаментальная важность условий для любого из языков программирования заключается в их возможности описывать большую часть логики работы программы.

Говоря простыми словами, конструкция if else в Python указывает интерпретатору, следует ли выполнять определенный участок кода или нет.

Как и все прочие составные инструкции языка, оператор выбора также поддерживает свойство вложенности. Это означает, что использование if else позволяет создавать внутри программного модуля так называемое логическое ветвление.

Как работает if else

Синтаксис

Оператор if else в языке Python — это типичная условная конструкция, которую можно встретить и в большинстве других языков программирования.

# самый простой пример, где есть всего одно условие a = 1 if a == 1: print(«It is true») > It is true

Синтаксически конструкция выглядит следующим образом:

  1. сначала записывается часть if с условным выражением, которое возвращает истину или ложь;
  2. затем может следовать одна или несколько необязательных частей elif (в других языках вы могли встречать else if );
  3. Завершается же запись этого составного оператора также необязательной частью else .

count = 1 # условное выражение может быть сколь угодно сложным, # и может быть сколь угодно много elif-частей if True and count == 1 and count == 2: print(«if») elif count == ‘count’: print(«First elif») elif count == 14.2: print(«Second elif») elif count == 1: print(«Nth elif») else: print(«Else») > Nth elif

15 Условный оператор if Python. Если Python

Для каждой из частей существует ассоциированный с ней блок инструкций, которые выполняются в случае истинности соответствующего им условного выражения.

b = 10 if b == 10: # любое количество инструкций print(b) b = b * 15 b = b — 43 b = b ** 0.5 print(b) elif b == 20: print(«You will not see me») else: print(«And me») > 10 > 10.344080432788601

То есть интерпретатор начинает последовательное выполнение программы, доходит до if и вычисляет значение сопутствующего условного выражения. Если условие истинно, то выполняется связанный с if набор инструкций. После этого управление передается следующему участку кода, а все последующие части elif и часть else (если они присутствуют) опускаются.

Отступы

Отступы — важная и показательная часть языка Python. Их смысл интуитивно понятен, а определить их можно, как размер или ширину пустого пространства слева от начала программного кода.

# начало кода # код # код # код # начало первого отступа # первый отступ # первый отступ # начало второго отступа # второй отступ # второй отступ # конец второго отступа # конец первого отступа

Благодаря отступам, python-интерпретатор определяет границы блоков. Все последовательно записанные инструкции, чье смещение вправо одинаково, принадлежат к одному и тому же блоку кода. Конец блока совпадает либо с концом всего файла, либо соответствует такой инструкции, которая предшествует следующей строке кода с меньшим отступом.

Уроки Python / Конструкция if elif else — если то иначе — Условная инструкция

var_a = 5 var_b = 10 var_c = 20 if var_c**2 > var_a * var_b: # блок №1 if var_c < 100: # блок №2 if var_c >10: # блок №3 var_a = var_a * var_b * var_c # блок №2 var_b = var_a + var_c # блок №1 var_c = var_a — var_b print(var_a) print(var_b) print(var_c) > 1000 > 1020 > -20

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

Подробнее о табуляции и отступах в Python:

Примеры

Рассмотрим несколько практических примеров использования условного оператора.

Пример №1 : создание ежедневного бэкапа (например базы данных):

from datetime import datetime def daily_backup(last_backup_date): «»» Передаем дату последнего бэкапа. Если прошло больше 1 дня, создаем бэкап «»» if not last_backup_date: print(f»creating first backup [] ..») return delta = datetime.now() — last_backup_date if delta.days > 0: print(f»creating backup [] ..») else: print(f»backup on [] already exists») daily_backup(«») > creating first backup [2020-08-15] .. daily_backup(datetime(2020, 8, 14)) > creating backup [2020-08-15] .. daily_backup(datetime(2020, 8, 15)) > backup on [2020-08-15] already exists

Читайте также:
Нормы программы это в конституции

Пример №2 : Проверка доступа пользователя к системе. В данном примере if проверяет наличие элемента в списке:

BLACK_LIST = [‘192.34.12.3’, ‘192.34.12.5’, ‘192.34.10.23’] USERS = [‘rolli34’, ‘constantinpetrovv’, ‘kate901’] def access_available(user_name, ip): if user_name in USERS: if ip not in BLACK_LIST: return True else: print(f»write to log: user [ip: ] in block list») else: print(f»write to log: user [ip: ] does not exists») return False if access_available(«rolli34», «192.34.12.111»): print(f»Hello!!») > Hello!! if access_available(«rolli34», «192.34.10.23»): print(f»Hello!!») > write to log: user rolli34 [ip: 192.34.10.23] in block list if access_available(«devnull», «192.34.10.11»): print(f»Hello!!») > write to log: user devnull [ip: 192.34.10.11] does not exists

Пример №3 : Валидация входных данных. В примере к нам приходят данные в формате json . Нам необходимо выбрать все записи определенного формата:

NEED = < «name»: str, «weight»: int, «age»: int, >def is_valid(data): valid = True for need_key_name, need_type in NEED.items(): # проверяем наличие ключа if need_key_name in data: # если ключ есть, проверяем тип значения data_type = type(data[need_key_name]) if data_type != need_type: print(f»type error: » is , need: «) valid = False else: print(f»key error: » does not exists») valid = False return valid if is_valid(): print(«data is valid») > key error: ‘weight’ does not exists key error: ‘age’ does not exists if is_valid(): print(«data is valid») > key error: ‘weight’ does not exists type error: ‘age’ is , need: if is_valid(): print(«data is valid») > data is valid

Оператор elif

elif позволяет программе выбирать из нескольких вариантов. Это удобно, например, в том случае, если одну переменную необходимо многократно сравнить с разными величинами.

shinobi = ‘Naruto’ if shinobi == ‘Orochimaru’: print(‘fushi tensei’) elif shinobi == ‘Naruto’: print(‘RASENGAN’) elif shinobi == ‘Sasuke’: print(‘chidori’) > RASENGAN

Такая конструкция может содержать сколь угодно большую последовательность условий, которые интерпретатор будет по порядку проверять.

Но помните, что первое условие всегда задается с if

Также не стоит забывать, что как только очередное условие в операторе оказывается истинным, программа выполняет соответствующий блок инструкций, а после переходит к следующему выражению.

Из этого вытекает, что даже если несколько условий истинны, то исполнению подлежит все равно максимум один, первый по порядку, блок кода с истинным условием.

Если ни одно из условий для частей if и elif не выполняется, то срабатывает заключительный блок под оператором еlse (если он существует).

Заглушка pass

Оператор-заглушка pass заменяет собой отсутствие какой-либо операции.

Он может быть весьма полезен в случае, когда в ветвлении встречается много elif -частей, и для определенных условий не требуется выполнять никакой обработки.

Наличие тела инструкции в Python обязательно

sum = 100000 account_first = 12000 account_second = 360000 if account_first > sum: pass elif account_second > sum: pass else: print(sum)

if else в одну строку

Во многих языках программирования условие может быть записано в одну строку. Например, в JavaScript используется тернарный оператор:

# так выглядит условие в одну строку в JavaScript const accessAllowed = (age > 21) ? true : false;

Читается это выражение так: если age больше 21 , accessAllowed равен true , иначе — accessAllowed равен false .

В Python отсутствует тернарный оператор

Вместо тернарного оператора, в Питоне используют инструкцию if else , записанную в виде выражения (в одно строку):

if else

number = -10 abs_number = number if number >= 0 else -number print(abs_number)

Такая конструкция может показаться сложной, поэтому для простоты восприятия, нужно поделить ее на 3 блока:

Стоит ли использовать такой синтаксис? Если пример простой, то однозначно да:

Вполне читаемо смотрятся и следующие 2 примера:

x = «Kate» if «Alex» in «My name is Alex» else «Mary» print(x) > Kate y = 43 if 42 in range(100) else 21 print(y) > 43

Но если вы используете несколько условий, сокращенная конструкция усложняется и становится менее читаемой:

x = 10 result = 100 if x > 42 else 42 if x == 42 else 0 print(result) > 0

Читайте также:
Куда скачиваются программы с Плей Маркета

Вложенные условия

Ограничений для уровней вложенности в Python не предусмотрено, а регулируются они все теми же отступами:

# делать код менее читаемым можно до бесконечности def run(action): if action: print(some_func()) else: if some_func(): num = one_func() if num: if 0 < num < 100: print(num) else: print(‘-‘)

Стоит ли использовать такие вложенности? Скорее нет, чем да. Одно из положений Python Zen гласит:

Flat is better than nested (развернутое лучше вложенного).

Большая вложенность имеет следующие недостатки:

  • становится трудно легко найти, где заканчивается конкретный блок;
  • код становится менее читаемым и сложным для понимания;
  • возможно придется прокручивать окно редактора по горизонтали.

Но что делать, если в скрипте не получается уйти от большой вложенности if-else? ‍♂️

Чтобы уйти от большой вложенности, попробуйте не использовать оператор else

Пример выше, можно записать следующим образом:

def run(action): if action: print(some_func()) return if not some_func(): return num = one_func() if not num: return if 0 < num < 100: print(num) return print(‘-‘)

Конструкция switch case

В Python отсутствует инструкция switch case

В языках, где такая инструкция есть, она позволяет заменить собой несколько условий if и более наглядно выразить сравнение с несколькими вариантами.

Свято место пусто не бывает, поэтому в питоне такое множественное ветвление, в обычном случае, выглядит как последовательность проверок if-elif :

n = 5 if n == 1: print(n) elif n == 2: print(n) else: print(«There is not your number») > «There is not your number»

Однако есть и более экзотический вариант реализации этой конструкции, задействующий в основе своей python-словари :

switch_dict = < 1: 1, 2: 2, 3: 3, >print(switch_dict.get(5, «There is not your number»)) > «There is not your number»

Использование словарей позволяет, в качестве значений, хранить вызовы функций, тем самым, делая эту конструкцию весьма и весьма мощной и гибкой.

Источник: pythonchik.ru

Ветвление и условные операторы Python для начинающих

Довольно часто в программах бывает нужно выполнить часть кода только тогда, когда выполняется определенное условие. Например, если пользователь введет некорректные данные, нужно вывести сообщение об ошибке.

В случае, если мы хотим сделать что-то, только если выполняется какое-либо условие, нам придется использовать оператор if .

Проще всего будет показать, как этот оператор работает на примере. Для этого попробуем написать программу «Угадай число». Если вы начинающий программист, обязательно попробуйте именно написать эту программу, чтобы прочувствовать на практике, как это работает. Компьютер выбирает случайное число, игрок пытается угадать, программа сообщает пользователю, верен ли его ответ.

import randomnum = random.randint(1,10)guess = int(input(‘Введите число от 1 до 10: ‘))if guess == num : print(‘Угадали!’)

Синтаксис оператора if прост — сначала надо написать ключевое слово if , после него — условие, а в самом конце строки должно быть двоеточие.

Все строки кода, которые должны выполнится при срабатывании условия, должны быть написаны с отступом в четыре пробела относительно ключевого слова if . По отступам Python понимает, что эти строки относятся именно к if , и выполнит их только если условие будет истинным. В нашем примере, вывод строки «Угадали!» будет выполнен только если пользователь введет правильное число.

Да, про модули мы поговорим позже, но, как вы уже возможно догадались, random.randint возвращает случайное число, а строка import random загружает модуль для работы со случайными числами в нашу программу. Список того, что может этот модуль можно посмотреть вот на этой странице. Сейчас мы, однако, говорим об условиях и поэтому продолжим:

import randomnum = random.randint(1,10)guess = int(input(‘Введите число от 1 до 10: ‘))if guess == num : print(‘Угадали!’)else: print(‘Извините, было загадано число ‘, num)

Осваиваем Python. Унция 2. Ветвления, циклы + практика.

Простые конструкции в языке Python: ветвления и циклы имеют свои особенности по сравнению с другими языками. Поэтому я всё же решил потратить на это время и рассказать. Материал совсем простой!
Так же по просьбам читающих добавил в конец статьи разбор простой программки для наглядной демонстрации пройденного материала.

Читайте также:
Программа от звука к букве из опыта работы

Условная инструкция if

Думаю тут всё понятно:

if условие1: блок1 elif условие2: блок2 else: блок3

Существует так же краткая форма записи (аналог тернарного оператора в Си):

X = A if условие else B

Заменяет собой конструкцию вида:

if условие: X = A else: X = B

Перехват исключений

try: блок 1 # интерпретатор пытается выполнить блок1 except (name1,name2): блок 2 # выполняется, если в блоке try возникло исключение name1 или name2 except name3: блок 3 # выполняется, если в блоке try возникло исключение name3 except: блок 4 # выполняется для всех остальных возникших исключений else: блок 5 # выполняется, если в блоке try не возникло исключения finally: блок 6 # выполнится всегда

Конструкция else была добавлена к инструкции обработки исключений для того, чтобы мы могли разделить ситуации, не прибегая к использованию флагов, когда выполнение программы продолжилось из-за того, что исключений в блоке try не возникло, или же они были перехвачены и обработаны.
Конструкция else в языке Python так же добавлена и в циклы

Цикл while

while условие: блок1 else: # необязательная часть else блок2 # выполняется, если выход из цикла был произведён не инструкцией break

break — осуществляет выход за пределы цикла
continue — осуществляет переход в начало цикла (к строке заголовка)

Цикл for

for in : блок1 if условие: continue else: break блок2 # не выполнится никогда, учитывая инструкцию if else: блок3 # выполнится, если выход из цикла не осуществлялся инструкцией break
>>> L = [(5,5),(6,6)] >>> for (x,y) in L: # присваивание кортежа в цикле for . print x,y, # вывод без добавления символа конца строки . 5 5 6 6

Рассмотрим типичную задачу поиска общих элементов двух списков. Её можно решить абсолютно разными путями, например, с помощью множеств, но в данном случае нас интересует решение с помощью вложенных циклов for.

for elem1 in list1: for elem2 in list2: if elem1 == elem2: print elem1, u’элемент найден’ break else: print elem1, u’не был найден’

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

for elem in list1: print (elem,’found’) if elem in list2 else (elem,’not found’)

В данном случае оператор in сам осуществляет обход списка и поиск элемента. Этот вариант решения будет работать быстрее, чем первый. Поэтому во всех случаях, когда это возможно — лучше стараться пользоваться уже описанными конструкциями языка.

Близкая тема к циклам в языке Python — это понятие итератора. И очень кстати, что эта тема была описана сегодняшним же числом на хабре. Некоторые описанные в ней моменты я использовал при написании практического примера, специально для это статьи. Например функцию enumerate() Вообще тенденция единовременного появления большого количества русскоязычного материала по Питону — очень позитивная!

Практика

Условие задачи: построить график изменения курса заданных валют за заданный период времени от текущей даты.

  • словарь, ключами которого являются названия валют, а значениями — идентификаторы валют определённые ЦБ.
  • количество интересующих нас месяцев
  • ширина картинки
  • высота картинки
Реализация:
Результат работы:

image

Описание:
  • список, содержащий значения курса валют по дням
  • минимальное значение в списке
  • максимальное значение в списке

Так же внутри функции используется конструкция try/except. В том случае, если получить документ с сервера ЦБ не удалось, или на вход функции были переданы неверные значения — функция parse() выбросит исключение и после этого логика программы перейдёт к обработчику исключений except, где наша функция возвратит объект None.
Цикл for j,key in enumerate(currency.keys()): в теле функции drawCurrency() осуществляет обход словаря валют. Для каждой из них вызывает функцию getData(), генерируется случайным образом цвет отображения курса валюты на графике, а так же определяется минимальное и максимальное значение курса среди всех переданных на вход валют.
После этого осуществляется последовательная отрисовка графиков каждой из валют.

Если требуется пояснение каких-то моментов — я отвечу в комментариях. В следующей статье cleg планировал углублённо раскрыть тему функций, однако, учитывая параллельное появление статей — не могу пока знать станет ли он это делать. Становится всё интереснее и интереснее ))

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru