Урок №64. операторы условного ветвления if/else

Логические операции

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

  • и — &&
  • или — ||

Например, возможно, мы хотим выполнить операцию только в том случае, если файл читаем и имеет размер больше нуля.

and.sh

Shell

#!/bin/bash
# and example

if &&
then
echo This file is useful.
fi

1
2
3
4
5
6
7

#!/bin/bash
# and example
 

if-r$1&&-s$1

then

echoThisfileisuseful.

fi

Возможно, мы хотели бы выполнить что-то немного другое, если пользователь либо bob, либо andy.

or.sh

Shell

#!/bin/bash
# or example

if ||
then
ls -alh
else
ls
fi

1
2
3
4
5
6
7
8
9

#!/bin/bash
# or example
 

if$USER==’bob’||$USER==’andy’

then

ls-alh

else
ls
fi

Условия в массивах

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

Тут важно учитывать не только порядок, но и логику:

Этот пример так же будет работать с логическими операторами:

Обратите внимание, что в случае с -ne, который ищет неравенство, результат будет True если хотя бы одно число и строка не совпадает с указанной:

Когда используются операторы типа ge, lt и другие, результат будет True если хотя бы одно из значений будет больше:

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

-contains

При использовании contains у нас возвращаются булевы значения True и False и является более логичным для проверки массивов:

Другие варианты использования:

  • contains — без учета регистра;
  • ccontains — с учетом регистра;
  • notcontains — отсутствие значения без учета регистра;
  • cnotcontains — отсутствие значение с учетом регистра.

-in

Этот оператор создан для удобства людей, которые пишут на других языках. Он отличается от contains порядком проверяемых значений. В этом случае массив должен находиться справа:

Доступные варианты:

  • in — регистр не имеет значения;
  • cin — регистр имеет значение;
  • notin — отсутствие вхождения, регистр не имеет значения;
  • cnotin — отсутствие вхождения, регистр имеет значения.

Больше примеров можно увидеть в статье Работа с массивом в Powershell и листами на примерах.

Отступы в Python

Для достижения простоты программирования в python не используются круглые скобки для кода уровня блока. В Python для объявления блока используется отступ. Если два оператора находятся на одном уровне отступа, то они являются частью одного и того же блока. Как правило, для отступов операторов используются четыре пробела, что является типичным размером отступа в Python.

Отступы – это наиболее используемая часть языка Python, поскольку в них объявляется блок кода. Все операторы одного блока имеют одинаковый уровень отступа. Мы увидим, как на самом деле происходит отступ при принятии решений в Python.

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

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

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

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

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

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

Операторы сравнения

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

-eq проверка эквивалентности

С помощью оператора -eq можно проверить полное соответствие между значениями. Для примера это может быть строка или число:

Если бы значения не совпадали, то результат был бы False и условие было бы не выполненным.  Проведем пример со всеми условиями:

Powershell, по умолчанию, не является зависимым от регистра. Это значит, что «Строка» и «строка» будут эквивалентны друг другу. Что бы проверить равенство с учетом регистра нужно использовать -ceq:

Самые первые примеры, которые были показаны выше, являются сокращенным вариантом написания с оператором -eq:

Важно понять работу следующего примера:

Так как проверка на эквивалентность $false правдива, результат работы условия будет True.

-ne или не соответствие

Когда нужно проверить отсутствие конкретного значения используется команда -ne:

Как уже писалось выше, если первое условие возвращает True второе выполняться не будет:

Так же как и в предыдущем случае если оператор учета регистра -cne.

Для примера так мы запустим сервис, если он не равен Running:

-gt -ge -lt -le проверка на большее и меньшее значение

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

Дословно операторы выше переводятся как Less than (меньше чем) и Gt (больше чем) и именно поэтому выполняется условие else. Другие операторы, включающие букву ‘e’ вместо ‘t’ выполняют так же проверку на равенство, например ge — Greater or equal  (больше или равно). Таких операторов достаточно много:

  • gt — больше чем;
  • cgt — больше чем, но с учетом регистра;
  • ge — больше или равно;
  • cge — больше или равно с учетом регистра;
  • lt — меньше чем;
  • clt — меньше чем, но с учетом регистра;
  • le — меньше чем или равно;
  • cle — меньше чем или равно с учетом регистра.

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

-like проверка вхождений

В Powershell есть возможность проверки вхождений используя -like и определенный синтаксис:

  • ? — обозначение единственного пропущенного символа;
  • * —  обозначение любого количества пропущенных символов.

Выше мы проверяли начинается ли строка с символов AD. Если бы мы искали конец строки нужно было указывать символ * до последнего элемента:

Варианты использования:

  • like — поиск вхождения, не чувствителен к регистру;
  • clike — поиск вхождения, чувствителен к регистру; 
  • notlike — проверка на отсутствие вхождения, не чувствителен к регистру;
  • cnotlike — проверка на отсутствие вхождения, чувствителен к регистру.

-match использование регулярных выражений

Для проверки с использованием регулярных выражений есть свой оператор -match. Конечно, синтаксис в использовании регулярных выражений и -like отличается:

Если не указывать маску/шаблон, то match будет искать по полному совпадению:

Так же есть несколько вариантов использования регулярных выражений:

  • match — регулярные выражения не чувствительные к регистру:
  • cmatch — чувствительные к регистру;
  • notmatch — поиск не совпадающих, не чувствительных к регистру значений;
  • cnotmatch — поиск не совпадающих, чувствительных к регистру значений.

-is проверка типов

Часто бывает необходимость проверить тип данных перед дальнейшем использованием. Использование сложения со строкой и числом приводит к разным последствиям. Для избежания этих проблем нужно проверять типы. На примере ниже я проверяю является ли значение числом:

Таких типов данных в Powershell около 13:

  • — строка;
  • — 16-битовая строка Unicode;
  • — 8 битовый символ;
  • — целое 32 битовое число;
  • — целое 64 битовое число;
  • — булево значение True/False;
  • — 128 битовое число с плавающей точкой;
  • — 32 битовое число с плавающей точкой;
  • — 64 битовое число с плавающей точкой;
  • — тип данных даты и времени;
  • — объект xml;
  • — массив;
  • — хэш таблица.

Так же можно использовать ключ -isnot, который выполняет противоположные действия.

Пример использования else

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

Kotlin

fun main() {
val animal = «Лиса»

if (animal == «Кошка» || animal == «Собака») {
println(«Это домашнее животное.»)
} else {
println(«Это дикое животное.»)
}
}

1
2
3
4
5
6
7
8
9

funmain(){

valanimal=»Лиса»

if(animal==»Кошка»||animal==»Собака»){

println(«Это домашнее животное.»)

}else{

println(«Это дикое животное.»)

}

}

Здесь, если константа была бы равна или , тогда выражение выполняет первый блок кода. Если константа не равна ни , ни , тогда выражение выполняет блок внутри от выражения, выводя на консоль следующее:

Shell

Это дикое животное.

1 Этодикоеживотное.

Также можно использовать выражение в одну строку. Рассмотрим, как это поможет сделать код более кратким и читабельным.

Если нужно определить минимальное и максимальное значение из двух переменных, можно использовать выражение следующим образом:

Kotlin

fun main() {
val a = 5
val b = 10

val min: Int
if (a < b) {
min = a
} else {
min = b
}

val max: Int
if (a > b) {
max = a
} else {
max = b
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

funmain(){

vala=5

valb=10

valminInt

if(a<b){

min=a

}else{

min=b

}

valmaxInt

if(a>b){

max=a

}else{

max=b

}

}

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

Просто уберем скобки и поместим все в одну строку следующим образом:

Kotlin

fun main() {
val a = 5
val b = 10

val min = if (a < b) a else b
val max = if (a > b) a else b
}

1
2
3
4
5
6
7

funmain(){

vala=5

valb=10

valmin=if(a<b)aelseb

valmax=if(a>b)aelseb

}

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

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

Условный оператор „?“

Иногда нам нужно определить переменную в зависимости от условия.

Например:

Так называемый «условный» оператор «вопросительный знак» позволяет нам сделать это более коротким и простым способом.

Оператор представлен знаком вопроса . Его также называют «тернарный», так как этот оператор, единственный в своём роде, имеет три аргумента.

Синтаксис:

Сначала вычисляется : если оно истинно, тогда возвращается , в противном случае – .

Например:

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

Этот пример будет делать то же самое, что и предыдущий:

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

В примере выше вы можете избежать использования оператора вопросительного знака , т.к. сравнение само по себе уже возвращает :

Оператор цикла for

Оператор for  выполняет указанный набор инструкций заданное количество раз, которое определяется количеством элементов в наборе.

Пример. 

for i in range(5):
   print("Hello")

В результате “Hello” будет выведено пять раз.

Внутри тела цикла можно использовать операторы break  и continue, принцип работы их точно такой же как и в операторе while.

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

lst = 
for i in lst:
   print(i ** 2)

Также можно пройти по всем буквам в строке.

word_str = "Hello, world!"
for l in word_str:
   print(l)

Строка “Hello, world!” будет напечатана в столбик.

На этом закончим краткий обзор операторов ветвления и цикла.

Одиночные проверки

Внутри условия
можно прописывать и такие одиночные выражения:

x = 4; y = True; z = False
if(x): print("x = ", x, " дает true")
if(not ): print("0 дает false")
if("0"): print("строка 0 дает true")
if(not ""): print("пустая строка дает false")
if(y): print("y = true дает true")
if(not z): print("z = false дает false")

Вот этот оператор
not – это отрицание
– НЕ, то есть, чтобы проверить, что 0 – это false мы
преобразовываем его в противоположное состояние с помощью оператора отрицания
НЕ в true и условие
срабатывает. Аналогично и с переменной z, которая равна false.

Из этих примеров
можно сделать такие выводы:

  1. Любое число,
    отличное от нуля, дает True. Число 0 преобразуется в False.

  2. Пустая строка –
    это False, любая другая
    строка с символами – это True.

  3. С помощью
    оператора not можно менять
    условие на противоположное (в частности, False превращать в True).

Итак, в условиях
мы можем использовать три оператора: and, or и not. Самый высокий
приоритет у операции not, следующий приоритет имеет операция and и самый
маленький приоритет у операции or. Вот так работает оператор if в Python.

Видео по теме

#1. Первое знакомство с Python Установка на компьютер

#2. Варианты исполнения команд. Переходим в PyCharm

#3. Переменные, оператор присваивания, функции type и id

#4. Числовые типы, арифметические операции

#5. Математические функции и работа с модулем math

#6. Функции print() и input(). Преобразование строк в числа int() и float()

#7. Логический тип bool. Операторы сравнения и операторы and, or, not

#8. Введение в строки. Базовые операции над строками

#9. Знакомство с индексами и срезами строк

#10. Основные методы строк

#11. Спецсимволы, экранирование символов, row-строки

#12. Форматирование строк: метод format и F-строки

#13. Списки — операторы и функции работы с ними

#14. Срезы списков и сравнение списков

#15. Основные методы списков

#16. Вложенные списки, многомерные списки

#17. Условный оператор if. Конструкция if-else

#18. Вложенные условия и множественный выбор. Конструкция if-elif-else

#19. Тернарный условный оператор. Вложенное тернарное условие

#20. Оператор цикла while

#21. Операторы циклов break, continue и else

#22. Оператор цикла for. Функция range()

#23. Примеры работы оператора цикла for. Функция enumerate()

#24. Итератор и итерируемые объекты. Функции iter() и next()

#25. Вложенные циклы. Примеры задач с вложенными циклами

#26. Треугольник Паскаля как пример работы вложенных циклов

#27. Генераторы списков (List comprehensions)

#28. Вложенные генераторы списков

#29. Введение в словари (dict). Базовые операции над словарями

#30. Методы словаря, перебор элементов словаря в цикле

#31. Кортежи (tuple) и их методы

#32. Множества (set) и их методы

#33. Операции над множествами, сравнение множеств

#34. Генераторы множеств и генераторы словарей

#35. Функции: первое знакомство, определение def и их вызов

#36. Оператор return в функциях. Функциональное программирование

#37. Алгоритм Евклида для нахождения НОД

#38. Именованные аргументы. Фактические и формальные параметры

#39. Функции с произвольным числом параметров *args и **kwargs

#40. Операторы * и ** для упаковки и распаковки коллекций

#41. Рекурсивные функции

#42. Анонимные (lambda) функции

#43. Области видимости переменных. Ключевые слова global и nonlocal

#44. Замыкания в Python

#45. Введение в декораторы функций

#46. Декораторы с параметрами. Сохранение свойств декорируемых функций

#47. Импорт стандартных модулей. Команды import и from

#48. Импорт собственных модулей

#49. Установка сторонних модулей (pip install). Пакетная установка

#50. Пакеты (package) в Python. Вложенные пакеты

#51. Функция open. Чтение данных из файла

#52. Исключение FileNotFoundError и менеджер контекста (with) для файлов

#53. Запись данных в файл в текстовом и бинарном режимах

#54. Выражения генераторы

#55. Функция-генератор. Оператор yield

#56. Функция map. Примеры ее использования

#57. Функция filter для отбора значений итерируемых объектов

#58. Функция zip. Примеры использования

#59. Сортировка с помощью метода sort и функции sorted

#60. Аргумент key для сортировки коллекций по ключу

#61. Функции isinstance и type для проверки типов данных

#62. Функции all и any. Примеры их использования

#63. Расширенное представление чисел. Системы счисления

#64. Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы

#65. Модуль random стандартной библиотеки

Оператор if Python — пример

# Если число положительное, мы выводим соответствующее сообщение

num = 3
if num > 0:
    print(num, "is a positive number.")
print("This is alwaysprinted.")

num = -1
if num > 0:
    print(num, "is a positive number.")
print("This is alsoalwaysprinted.")

Результат работы кода:

3 is a positive number
This is alwaysprinted
This is alsoalwaysprinted.

В приведенном выше примере num > 0— это тестовое выражение. Тело if выполняется только в том случае, если оно равно True.

Когда переменная num равна 3, тестовое выражение истинно, и операторы внутри тела if выполняются. Если переменная num равна -1, тестовое выражение не истинно, а операторы внутри тела if пропускаются.

Оператор print() расположен за пределами блока if (не определен). Следовательно, он выполняется независимо от тестового выражения.

Виталий решил открыть депозит, но в Петропавловске-Камчатском, где он живет, банки предлагают по вкладам не больше 4,5% годовых.

А его сестра Наталья, которая переехала в Калининград, рассказывает, что там можно положить деньги в банк и под 6%. Что может сделать Виталий, чтобы стать клиентом банка, у которого нет офиса в его городе?

Выберите один верный ответ

У Виталия есть возможность открыть вклад, а также купить ценные бумаги и оформить страховые полисы в компаниях из других регионов дистанционно — через финансовый маркетплейс

Виталию придется съездить один раз в другой город, заключить договор с нужной ему финансовой организацией и дальше он сможет дистанционно с ней работать — другого выхода нет

Инвестиции — Что нужно знать инвестору 5 вопросов

Логические операции в условных операторах

Условный оператор может проверять

  • одновременное выполнение всех условий (операция И — &&)
  • выполнение хотя бы одного из условий (операция ИЛИ — ||)
  • выполнение только одного из условий (операция исключающее ИЛИ — ^)

Пример на Си: Найти максимум из 3 чисел

123456789101112131415161718192021

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){  int a, b, c;  printf(«a=»);  scanf(«%d», &a);  printf(«b=»);  scanf(«%d», &b);  printf(«c=»);  scanf(«%d», &c);  if ((a >= b) && (a >= c))    printf(«Max = %d», a);  else if ((b >= a) && (b >= c))    printf(«Max = %d», b);  else    printf(«Max = %d», c);  getchar();  getchar();  return 0;}

Пример на С++

123456789101112131415161718192021

#include <iostream>using namespace std;int main(){  int a, b, c;  cout << «a=»;  cin >> a;  cout << «b=»;  cin >> b;  cout << «c=»;  cin >> c;  if ((a >= b) && (a >= c))    cout << «Max = » << a;  else if ((b >= a) && (b >= c))    cout << «Max = » << b;  else    cout << «Max = » << c;  cin.get();   cin.get();  return 0;}

Основные положения

Базовый оператор if эффективно говорит, что если конкретный тест верен, тогда выполните заданный набор действий. Если это не так, не выполняйте эти действия. Если следующий формат:

Shell

if
then
<команды>
fi

1
2
3
4

if<некоторыйтест>

then

<команды>

fi

Все , что между then и fi (если в обратном направлении) будет выполняться только если тест (в квадратных скобках) истинно.

Давайте рассмотрим простой пример:

if_example.sh

Shell

#!/bin/bash
# Базовый оператор if

if
then
echo Hey that\’s a large number.
pwd
fi

date

1
2
3
4
5
6
7
8
9
10

#!/bin/bash
# Базовый оператор if
 

if$1-gt100

then

echoHey that\’salarge number.

pwd
fi
 
date

Давайте разберем это:

  • Строка 4 — Посмотрим, больше ли первый аргумент командной строки, чем 100
  • Строка 6 и 7 — будет запущена, только если тест в строке 4 вернется. У вас может быть так много команд здесь, как вам нравится.
  • Строка 6 — обратная косая черта (\) перед одиночной кавычкой (‘) необходима, поскольку одинарная кавычка имеет особое значение для bash, и мы не хотим этого специального значения. Обратная косая черта ускользает от специального значения, чтобы снова сделать обычную одиночную кавычку.
  • Строка 8 — fi сигнализирует конец оператора if. Все команды после этого будут выполняться как обычно.
  • Строка 10 — поскольку эта команда находится за пределами оператора if, она будет выполняться независимо от результата инструкции if.

Использование оператора if

Рассмотрим пример использования одиночного оператора if.

Синтаксис оператора if выглядит таким образом:

if function_returned_true:
    other_function()

Здесь программа вычисляет function_returned_true — тестовое выражение, и выполняет условия оператора только в том случае, если тестовое выражение истинно — True.

Если function_returned_true ложно — False, оператор(ы) не выполняется.

В Python тело оператора if обозначается отступом. Тело начинается с углубления, и первая неиндентированная линия отмечает конец.

Python интерпретирует ненулевые значения как True. None и 0 интерпретируются как False.

Теперь рассмотрим конкретный пример в написании кода:

chislo = 12
if chislo > 0:
    print(chislo, "Положительное число.")
print("Этот текст будет напечатан всегда.")

chislo = -5
if chislo > 0:
    print(chislo, "Положительное число.")
print("Этот текст будет напечатан всегда.")

Вывод программы:

12 Положительное число.
Этот текст будет напечатан всегда.
Этот текст будет напечатан всегда.

В приведенном выше примере chislo > 0 является тестовым выражением.

Тело if выполняется только в том случае, если оно имеет значение True.

Когда переменная chislo равна 12, тестовое выражение истинно и выполняются операторы внутри тела if.

Если переменная chislo равна -5, то тестовое выражение ложно и операторы внутри тела if пропускаются.

Оператор print выходит за пределы блока if. Следовательно, он выполняется независимо от тестового выражения.

3.3. Команда if-elif-else.

Команда if-elif-else позволяет проверить сразу несколько условий. Предположим, стоимость билетов кинотеатр изменяется в зависимости от возврата посетителя.

>>> age = 35
>>> if age <= 7
…     print(‘Для вас вход бесплатный’)
… elif age < 18
…     print(‘Стоимость билета 500 руб’)
… elif age <= 60
…     print(‘Стоимость билета 1000 руб’)
… else:
…     print(‘Для вас вход бесплатный’)
…Стоимость билета 1000 руб

Код выполняется последовательно, программа вначале проверяет соответствие возраста меньше или равно 7 лет, затем

Важно ставить правильную последовательность условий. К примеру, если мы поставим условие младше или равно 60 в начало, то возраст меньше 7 и 18 не будет работать и программа сразу выдаст результат максимальной стоимости билета.  

Наличие секции else в команде if-elif-else необязательно. Ее присутствие позволяет обработать результат, не удовлетворяющий никаким условиям.

Проверяет, что все элементы в последовательности True.

Описание:

Функция возвращает значение , если все элементы в итерируемом объекте — истинны, в противном случае она возвращает значение .

Если передаваемая последовательность пуста, то функция также возвращает .

Функция применяется для проверки на ВСЕХ значений в последовательности и эквивалентна следующему коду:

def all(iterable):
    for element in iterable
        if not element
            return False
    return True

Так же смотрите встроенную функцию

В основном функция применяется в сочетании с оператором ветвления программы . Работу функции можно сравнить с оператором в Python, только работает с последовательностями:

>>> True and True and True
# True
>>> True and False and True
# False

>>> all()
# True
>>> all()
# False

Но между и в Python есть два основных различия:

  • Синтаксис.
  • Возвращаемое значение.

Функция всегда возвращает или (значение )

>>> all()
# True
>>> all(])
# False

Оператор , возвращает ПОСЛЕДНЕЕ истинное значение, при условии, что в выражении все значения а если в выражении присутствует значение (ложное значение), то ПЕРВОЕ ложное значение. Что бы добиться поведения как у функции , необходимо выражение с оператором обернуть в функцию .

>>> 3 and 1 and 2 and 6
# 6
>>> 3 and  and 3 and []
# 0

>>> bool(3 and 1 and 2 and 6)
# True
>>> bool(3 and  and 3 and [])
# False

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

num = 1, 2.0, 3.1, 4, 5, 6, 7.9
# использование встроенных функций или
# методов на примере 'isdigit()'
>>> str(x).isdigit() for x in num
# 

# использование операции сравнения
>>> x > 4 for x in num
# 

# использование оператора вхождения `in`
>>> '.' in str(x) for x in num
# 

# использование оператора идентичности `is`
>>> type(x) is int for x in num
# 

# использование функции map()
>>> list(map(lambda x x > 1, num))
# 

Примеры проводимых проверок функцией .

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

>>> num1 = range(1, 9)
>>> num2 = range(-1, 7)
>>> all()
# True
>>> all()
# False

Или проверить, что последовательность чисел содержит только ЦЕЛЫЕ числа.

>>> num1 = 1, 2, 3, 4, 5, 6, 7
>>> num2 = 1, 2.0, 3.1, 4, 5, 6, 7.9
>>> all()
# True
>>> all()
# False

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

>>> line1 = "1, 2, 3, 9.9, 15.1, 7"
>>> line2 = "1, 2, 3, 9.9, 15.1, 7, девять"
>>> all()
# True
>>> all()
# False

Еще пример со строкой. Допустим нам необходимо узнать, есть ли в строке наличие открытой И закрытой скобки?

>>> simbols = '(', ')'
>>> line1 = "функция 'all()' всегда возвращает 'False' или 'True'"
>>> line2 = "функция any всегда возвращает значение bool"
>>> all()
# True
>>> all()
# False

Синтаксис базового оператора if

Оператор в Python, по существу, говорит:

«Если это выражение оценивается как верное (), то нужно запустить один раз код, следующий за выражением . Если это выражение ложно (т.е. ), то этот блок кода запускать не нужно».

Общий синтаксис -блока выглядит следующим образом:

if условие: 
    выполняй вот этот блок

Состав -блока:

  • Ключевое слово , с которого и начинается блок кода.
  • Затем идет условие. Его значение может оцениваться как истинное () или ложное (). Круглые скобки вокруг условия необязательны, но они помогают улучшить читаемость кода, когда присутствует более одного условия.
  • Двоеточие отделяет условие от следующих за ним инструкций.
  • Новая строка и отступ из 4 пробелов (размер отступа оговорен в соглашениях по стилю Python).
  • Наконец, идет само тело конструкции. Это код, который будет запускаться только в том случае, если наше условие выполняется, т.е. имеет значение . В теле может быть несколько инструкций. В этом случае нужно быть внимательным: все они должны иметь одинаковый уровень отступа.

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Скачать

×

Возьмем следующий пример:

a = 1
b = 2

if b > a:
    print(" b is in fact bigger than a")

# Output: b is in fact bigger than a

В приведенном выше примере мы создали две переменные, и , и присвоили им значения 1 и 2 соответственно.

Фраза в операторе выводится в консоль, потому что условие оценивается как . Раз условие истинно, следующий за ним код запускается. А если бы было больше , ничего бы не случилось. Код бы не запустился и ничего бы не вывелось в консоль.

Изменим условие:

a = 1
b = 2

if a > b
    print("a is in fact bigger than b")

Поскольку у нас меньше , условие оценивается как , и в консоль ничего не выводится.

Условия

Самих условий может быть несколько. Каждый будет разобран дальше.

If

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

Результат любого сравнение приравнивается к 2 булевым значениям — это True (правда, существует) и False (ложь, не существует, $None). Если вы передаете переменную в условие без каких либо дополнительных операторов, то само существование значения у переменной позволяет выполнить следующую часть и написать «Условие выполнено». Та часть, которая экранируется в фигурные скобки называется ScriptBlock.

На следующем примере, в первом случае у нас вернется True, так как значение у переменной существует. Во втором случае мы проверяем переменную, которая не хранит никаких значений (она не была объявлена), а значит соответствует $null и вернет False:

Else

Этот оператор не является обязательным. Else используется когда результаты предыдущих проверок равен Fasle:

Обратите внимание, что я использую Powershell ISE, а не консоль. При запуске в консоли, при таком написании, у нас будут ошибки:

  • Имя «else» не распознано как имя командлета, функции, файла сценария или выполняемой программы.
  • The term ‘else’ is not recognized as the name of a cmdlet, function, script file, or operable program.

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

  1. Объявлять операторы в одну строку.
  2. Использовать функции.
  3. Хранить скрипт в файле и импортировать его.

Эти способы и другие будут рассмотрены далее.

Elseif

Представим, что нам нужно проверить существование нескольких значений. Мы можем это сделать так:

Для избежания таких сложно читаемых конструкций используется дополнительное условие elseif. 

Elseif не является обязательным и выполняется после IF. В отличие от else, который работает в случае когда все операторы вернули False, оператор elseif может проверять на True и False. Переписав предыдущий пример, но с новым оператором, условие будет выглядеть так:

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

Вам так же будет интересно:

Проверка условий в Python.

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

>>> car = ‘audi’
>>> car == ‘audi’True

Присвоим переменной car значение ‘audi’. Во второй строке проверим равно ли значение переменной car. Двойной знак равно (==) используется для проверки равенства. В итоге Python возвращает значение True, означающий что значения равны. В случае неравенства значений, возвращается False.

>>> car = ‘audi’
>>> car == ‘bmw’False

В Python проверка равенства выполняется с учетом регистра. В случае написания значений с разным регистром, значения получаются не равными.

>>> car = ‘audi’
>>> car == ‘Audi’False

Проверка неравенства.

Проверка неравенства происходит с помощью восклицательного знака и знака равно ( != ). Восклицательный знак представляет отрицание, как и во многих языках программирования.

>>> car = ‘audi’
>>> car != ‘bmw’True

Операторы препроцессора

defined

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

Это константное выражение считается истинным (ненулевым), если идентификатор в настоящее время определен. В противном случае условие не выполняется (false, значение равно 0). Идентификатор, определенный как пустой текст, считается определенным. Определенный оператор может использоваться в #if и директиве #elif , но нигде не используется.

В следующем примере директивы #if и #endif управляют компиляцией одного из трех вызовов функций:

Вызов функции компилируется, если определен идентификатор . Если определен идентификатор , компилируется вызов функции . Если ни один из этих идентификаторов не определен, компилируется вызов функции . И , и — это разные идентификаторы в C и C++, так как их варианты различны.

В следующем примере в операторах условной компиляции используется ранее определенная символьная константа с именем .

В первом блоке #if показаны два набора вложенных директив #if, #elseи #endif . Первый набор директив обрабатывается только в том случае, если выполняется условие . В противном случае обрабатываются инструкции после #else .

Директивы #elif и #else во втором примере используются, чтобы выбрать один из четырех вариантов в зависимости от значения . Константе присваивается значение 0, 100 или 200 в зависимости от определения константы . Если больше 5, то компилируется оператор

компилируется и не определяется.

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

Предыдущий код проверяет, определена ли символьная константа . Если да, то файл уже включен и не нуждается в повторной обработке. Если нет, константа определяется, чтобы пометить файл EXAMPLE.H как уже обработанный.

Сравнение строк

Как вы видите,
сравнение двух числовых значений выполняется вполне очевидным образом. Но можно
ли, например, сравнивать строки между собой? Оказывается да, можно. Чтобы
определить, что одна строка больше другой, Python использует
«алфавитный» или «лексикографический» порядок. Другими словами, строки сравниваются
посимвольно. Например:

print('Я' > 'А' )
print( 'Кот' > 'Код' )
print( 'Сонный' > 'Сон' )

Алгоритм
сравнения двух строк довольно прост:

  1. Сначала
    сравниваются первые символы строк.

  2. Если первый
    символ первой строки больше (меньше), чем первый символ второй, то первая
    строка больше (меньше) второй.

  3. Если первые
    символы равны, то таким же образом сравниваются уже вторые символы строк.

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

В примерах выше
сравнение ‘Я’ > ‘А’ завершится на первом шаге, тогда как строки
«Кот» и «Код» будут сравниваться посимвольно:

  1. К равна К.
  2. о равна о.
  3. т больше чем д.
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: