понедельник, 7 декабря 2015 г.

Булевые значения, операторы сравнения, Условные операторы ветвления (if, else, elif), логические и,, или

Логика булевых значений (True, False) и значения (None) в Python



Мы упоминали про такой тип данных в Python, как булевое значение, которое возвращается в виде истины(True) или лжи(False).
Весь процесс взаимодействия програмного кода с интерпретатором заключается в том, что код устанавливает какие-то действия, интерпретатор выполняет их и возвращает нам что-то. При ошибке мы видем Traceback с минимальным описанием того где и какая ошибка произошла, если же все прошло штатно, Python вернет нам какое-то значение или не вернет ничего, но это тоже не совсем правда и мы поговорим про это через несколько минут. В процессе всего этого, Python получает и возвращает верно ли то, что вы ему дали выполнить или ваше утверждение будет ложным. Ошибка сама посебе не является ложью или истиной - это определенная реакция на возможную ошибку в семантике или синтаксисе вашего кода. Также Python может вернуть нам не False и True,а 0 и 1, что посути тождественно, но мы стараемся всегда использовать True и False, чтобы не получать лишних семантических ошибок. Кпримеру функция len(), может вернуть нам 0, в случае пустого списка, но это же не значит, что это ошибка - это всего лишь список, который содержит в себе 0 элементов. Мы можем спрашивать у Python, является ли то или иное выражение истинным или ложным, для этого к нам на помощь приходят операторы сравнения. (Если указано, что оператор сравнения при каком-то условии возвращает True - это значит, что при невыполнении этого условия, он так или иначе, но возвращает False:




  • == - Проверяет, равны ли операнты (части выражения слева и справа от оператора "==") и возвращает True, если равны или False, если неравны;


  • != - Оператор неравенства, который возвращает True, если операнты неравны между собой;


  • < - Проверяет, является ли значение левого операнта меньше чем правого, если да, возвращает True;


  • > - Проверяет, является ли значение левого операнта больше чем правого, если да, возвращает True;


  • <= - Проверяет, меньше или равно значение левого операнта, по отношению к правому, если да, возвращает True;


  • >= - Проверяет, больше или равно значение левого операнта, по отношению к правому, если да, возвращает True;


Давайте посмотрим на несколько логических утверждений:

>>> 5 > 1 # 5 больше одного, а значит получаем True

True

>>> 5 < 1 # 5 не меньше одного, а значит получаем False

False

>>> 5 >= 5 # 5 небольше, но равно пяти, а значит True

True

>>> 'Hello' == 'Hello' # Эти две строки одинаковы, а значит True

True

>>> 'Red' != 'Blue' # Строка red не равна строке Blue, а значит True

True

>>>


Еще раз, если выражение возвращает True при условии, что оно верно, значит оно же может вернуть False в случае, когда наше утверждение будет ложью.


Пользовательский ввод - функция raw_input()



До сих пор мы задавали все значения переменным, непосредственно при объявлении переменной, но довольно часто, нам нужно спрашивать у пользователя какую-то информацию, чтобы иметь возможность взаимодействовать с ней в процессе выполнения нашего приложения. В консольном режиме, для этого существует функция raw_input(), что она делает? Эта функция приостанавливает выполнение приложения и просит пользователя, ввести что-то с клавиатуры. После того, как пользователь введет данные и нажмет ввод, функция raw_input(), вернет эти данные в поток выполнения Python. Давайте отследим это на простом примере:

>>> command = raw_input() # После этой строки, Python ждет ввода данных

Hello

>>> command

'Hello'

>>> type(command)



>>> command = raw_input() # После этой строки, Python ждет ввода данных

12345

>>> command

'12345'

>>> type(command)



>>>


Как видно, функция raw_input(), возвращает введенные данные в виде строки. Также эта функция имеет один необязательный аргумент, в котором мы можем передать строку, которая будет выводиться пользователю, при необходимости ввести какие-то данные:

>>> name = raw_input("Enter your name:")

Enter your name: pupsik

>>> name

'pupsik'

>>>


Что делать, если нам нужно получить число? Очень просто! Раз функция raw_input(), возвращает нам строку, значит по правилам преобразования типов, мы просто можем окружить ее функцией int() или float() и она вернет нам тип числа соответственно:

>>> num = int(raw_input("Enter num:"))

Enter num: 22

>>> num

22

>>> type(num)



>>> num = float(raw_input("Enter float num:"))

Enter float num: 5

>>> num

5.0

>>> type(num)



>>>


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

>>> color = raw_input("Enter color: ").split(', ')

Enter color: Color red, Color green, Color Blue

>>> color

['Color red', 'Color green', 'Color Blue']

>>> type(color)



>>>


Очевидно, что раз уж raw_input() возвращает строку, значит мы можем сразу же работать с ним, как с потенциальной строкой, что мы увидели на примере выше. Строку которую мы ввели для raw_input(), мы разбили на список функцией split().


Работа в notepad++



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


Оператор условного ветвления if



В процессе выполнения программы, данные меняются, вводятся новые, взависимости от них, программа выполняет те или иные действия Т.Е. Процесс выполнения приложения ветвится. Это происходит при помощи простых логических утверждений, операторы которых, мы рассматривали выше в этой теме. Пользователь ввел какую-то команду? Значит проверим, есть ли такая команда в списке доступных для выполнения в нашем приложении. Нет - False, а значит сообщить пользователю, что он ввел некорректную команду и попросить его ввести команду еще раз. Если такая команда есть в списке доступных, значит вернуть True и выполнить ее. В процессе работы любого приложения, происходят множество запросов на сопоставление различных данных, которые определяют ход выполнения программы.

Условный оператор ветвления if, позволяет сопоставить некие данные и при получении True, выполнит блок кода, который заложен в нем, а получив False, пропустит его. Тут следует вспомнить про обязательные отступы в Python. Дело в том, что отступы в Python, являются не предметом форматирования для удобства чтения, а необходимостью для корректного выполнения кода. Один отступ в Python - это символ табуляции или четыре пробела. Обычно используются табуляции, как более удобный способ ставить отступы, но смешивать в одном коде табуляции и отступы при помощи пробелов нельзя. Строки кода, которые находятся на одном уровне отступа - это код, который пренадлежит конкретному блоку и если мы установим неправильный отступ для какой-то строки в этом блоке, с большой долей вероятности, мы получим ошибку "IndentationError: expected an indented block", которая будет свидетельствовать о нарушении отступа в данном блоке кода или получим некорректно работающее приложение. Что такое блок кода? Блок - это участок кода, который логически должен выполняться в рамках какой-то задачи в момент выполнения приложения. Обычно логический блок кода начинается, когда предыдущая строка оканчивается двоеточием ":". В данном случае if - это структура, которая содержит в себе конкретный блок кода, который должен быть выполненным при условии, если выражение после if будет истинным. Мы совсем запутались? Значит начинаем работать с конкретными примерами.

И так, нам нужно выполнить что-то в приложении, когда пользователь введет нам слово start: (Дальнейшая демонстрация кода будет разбита на две части: сам код непосредственно и его результат в консоли. Выполнить код из notepad++, можно зайдя в меню "Плагины >> PyNPP >> Run file in Python Interactive    Alt+Shift+F5", или нажав комбинацию клавишь "альт+шифт+f5". После чего, откроется консоль Python, где будет отображаться ход выполнения программы. Закрыть консоль можно комбинацией клавишь "ctrl+c"или функцией exit())

command = raw_input("Enter word start, please: ")

b = "no start"

if command == "start":

    print "Ok, start!"

    b = "starting"

print b


Результат выполнения:

Enter word start, please: start

Ok, start!

starting

>>>


Мы дали возможность пользователю ввести в наше приложение что-то, затем сравнили то, что он ввел с необходимым по условиям словом start и выполнили блок кода, который находится после if. В данном случае - это print с сообщением на экран и присвоением переменной "b" строчного значения 'starting'. В то время как "print b" - уже не принадлежал к блоку кода после if Т.К. не имел соответствующего отступа. Если же пользователь введет что-то другое, в данном случае, код после if не будет выполненным и "print b", вернет нам 'no start':

Enter word start, please: blablabla

no start

>>>



Оператор else в конструкции if



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

if выражение:

    блок кода

else:

    блок кода


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

num = int(raw_input("Enter num: "))

if num >= 5:

    print "Num >= 5"

else:

    print "Num < 5"


Результат выполнения:

Enter num: 7

Num >= 5

>>>

Enter num: 3

Num < 5

>>>


И так, когда мы ввели число 7, мы получили True в выражении после if и вывели сообщение, что число больше или равно пяти, а else остался не выполненным. Когда же мы ввели число 3, выражение после if вернуло False и блок кода после if был пропущен, зато вступила в работу часть else и сообщила нам, что число введенное пользователем, было меньше пяти.


Оператор elif в конструкции if



Оператор elif можно прочесть как "если нет, то...". Оператор elif может быть записан после оператора if или после такого же оператора elif. После оператора elif, как и после if, тоже записывается выражение для проверки. Он будет выполнен при условии, если выражение в предыдущем if или elif вернет False, а выражение в текущем elif вернет True. Если выражение в if или elif вернуло True, последующие elif уже не будут выполнены Т.Е. При получении True в if или elif цепочка elif обрывается. Конструкция if elif выглядит следующим образом:

if выражение:

    блок кода 1

elif выражение:

    блок кода 2

elif выражение:

    блок кода 3

elif выражение:

    блок кода Н...


Таких elif может быть 1 и более. Если if получит True, ни один из последующих elif выполненным небудет. Если if получит False, будет проверено выражение в первом elif и если оно будет True, выполнится соответствующий блок кода и последующие elif уже выполнены не будут. Если он получит False, будет проверен следующий elif и Т.Д. В конце такой конструкции, тоже может стоять оператор else, который будет выполнен в случае, если все if elif получат False.

color = raw_input("Enter color: ")

if color == "Red":

    print "Color is red"

elif color == "Blue":

    print "Color is blue"

elif color == "Magenta":

    print "Color is magenta"

elif color == "Green":

    print "Color is green"

else:

    print "Invalid color"


Результат выполнения:

Enter color: Red

Color is red

>>>

Enter color: Blue

Color is blue

>>>

Enter color: Black

Invalid color

>>>


Как видем, выполнялся только тот if или elif, выражение которого было истинным, а когда мы ввели "Black" и все if elif получили False, отработал блок кода после else.


Логическое соединение выражений



Иногда есть необходимость, проверить несколько утверждений(выражений) подряд. На помощь приходят логические операторы or, and. Про весь набор подобных операторов, мы будем говорить в последующих темах.




  • or - логическое или, возвращает True, если хотябы одно из выражений будет истинным


  • and - логическое и, возвращает True, если все выражения будут истинными


Давайте посмотрим простейшие выражения с использованием данных операторов:

>>> 3>2 and 4>2

True

>>> 3>2 and 1>2

False

>>> 1>2 and 3>4

False

>>>

>>> 3>2 or 3>2

True

>>> 3>2 or 1>2

True

>>> 1>2 or 3>4

False

>>>

Комментариев нет:

Отправить комментарий