Логические выражения
Выражения
Математические выражения
Все люди знакомые с математикой знают и понимают, что такое математическое выражение. Мы часто пользуемся математическими выражениями в уме, хотя можем и не задумываться о терминологии. Например при подсчете сколько стоит купить товар или сколько времени затратили на дорогу.
Математические выражения оформленные в виде кода могут выглядеть следующим образом:
print(4 + 7) # 11 - math expression
print(2 * 3) # 6 - math expression
print(9 - 1) # 8 - math expression
icecream_count = 5
icecream_price = 60
print(icecream_count * icecream_price) # 300 - math expression
minute_total = 257
hour_total = minute_total // 60 # 4 - math expression
minute_left = minute_total % 60 # 17 - math expression
print(f'{minute_total} minutes equals {hour_total} hours and {minute_left} minutes')
2
3
4
5
6
7
8
9
10
Результатом выполнения математического выражения будет вычисление числа. В примере выше строки с математическими выражениями содержат дополнительные комментарии: результат вычисления и указание, что это математическое выражение.
Логические выражения
B реальной жизни мы соглашаемся с каким-либо утверждением или отрицаем его. Например, если вам скажут, что сумма чисел 3 и 5 больше 7, вы согласитесь, скажете: «Да, это правда». Если же кто-то будет утверждать, что сумма трех и пяти меньше семи, то вы расцените такое утверждение как ложное.
Логические выражения похожи по своему виду и принципу работна на математические выражения у них лишь два основных различия:
- математические операторы (+, -, *, / и т.п.) заменены логическими операторами (<, >, ==, != и т.п.)
- результатом вычисления логического выражения будет
True
илиFalse
, а не число.
Пример:
- Математические примеры:
5 + 7 = 12
- Логические примеры:
5 > 7 = False
Логические выражения оформленные в виде кода могут выглядеть следующим образом:
print(4 > 7) # False - boolean expression
print(2 != 3) # True - boolean expression
print(9 <= 1) # False - boolean expression
icecream_price_old = 55
icecream_price_new = 60
print(icecream_price_new >= icecream_price_old) # True - boolean expression
minute_total = 257
hour_total = 4
time_comparison = hour_total * 60 > minute_total # False - boolean expression
print(time_comparison)
2
3
4
5
6
7
8
9
10
Логическое выражение - это выражение результатом которого является True
или False
. Еще логические выражения называют также булевы выражения в честь ученого Джордж Буль, который основал булеву алгебру (алгебру логики).
Например, выражение 4 > 5 является логическим, так как его результатом является либо правда, либо ложь. Выражение 4 + 5 не является логическим, так как результатом его выполнения является число.
Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
В функциях print записаны выражения, определите их тип и запишите в место троеточия
...
буквы:L
для логических выражений,M
для математических выражений:
number_1 = 14 number_2 = -10 number_3 = 12.5 result = number_2 + number_3 print('1\t...', 5 + 7) print('2\t...', number_1 < 7) print('3\t...', number_1 - number_2 > number_3) print('4\t...', -8 + number_1) print('5\t...', number_2 - number_3) print('6\t...', number_1 >= 14) print('7\t...', result != 4) print('8\t...', result - number_3) print('9\t...', 4 + number_2) print('10\t...', result + 10 == - number_2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Сравнение чисел
Основное правило сравнения помогает избежать и/или исправить наиболее частые ошибки:
Соблюдайте совпадение типов
Тип сравниваемых значений всегда должен быть одинаковый!
Допустимо сравнение разных типов чисел:
- integer -
int()
- дробные числа или числа с плавающей точкой float -
float()
Чтобы узнать тип объекта можно воспользоваться функцией type()
:
number_1 = 34
print(number_1, type(number_1)) # 34 <class 'int'>
number_2 = '34'
print(number_2, type(number_2)) # 34 <class 'str'>
number_3 = 34.34
print(number_3, type(number_3)) # 34.34 <class 'float'>
number_4 = '34.34'
print(number_4, type(number_4)) # 34.34 <class 'str'>
2
3
4
5
6
7
8
Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
В функциях print записаны выражения, определите какие из выражений составлены правильно, а какие нет. Неправильные выражения закомментируйте:
number_1 = "14" number_2 = -10 number_3 = 12.5 result = number_2 + number_3 print(5 > 7) print(number_1 - number_2 > number_3) print(- 8 <= number_1) print(number_2 != number_3) print(number_1 >= 14) print(result != 4) print(result < number_1) print("4" > number_2) print(result + 10 == - number_2) print(number_1 == - number_2 + 4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Операторы сравнения чисел
Говоря на естественном языке мы обозначаем сравнения словами «равно», «больше», «меньше». В языках программирования используются специальные знаки, подобные тем, которые используются в математике:
Название | Оператор | Синтаксис | Вывод |
---|---|---|---|
равно | == | a == b | Если значения a и b равны, то условие становится истинным: True . |
не равно | != | a != b | Если значения a и b не равны, то условие становится истинным: True . |
больше | > | a > b | Если значение a больше, чем значение b , то условие становится истинным: True . |
меньше | < | a < b | Если значение a меньше значения b , тогда условие становится истинным: True . |
больше или равно | >= | a >= b | Если значение a больше или равно значения b , то условие становится истинным: True . |
меньше или равно | <= | a <= b | Если значение b меньше или равно значения b , то условие становится истинным: True . |
TIP
Присваивание и сравнение – разные операции. Не путайте операцию присваивания с операцией сравнения:
- операцию присваивания значения переменной, c одиночным знаком «равно»
=
: (value = 15), - операцию сравнения - два знака «равно»
==
:value == 15 # True
Простые логические выражения
Простыми логическими выражениями можно, условно, считать выражения, в которых сравнение происходит между двумя значениями и используется соответственно один оператор сравнения:
a = 10
b = 5
print(a > b) # True
print(a + b > 14) # True
print(a < 14 - b) # False
print(a <= b + 5) # True
print(a != b) # True
print(a == b) # False
c = a == b
print(c) # False
print(a, b, c) # 10, 5, False
2
3
4
5
6
7
8
9
10
11
В данном примере выражение c = a == b
состоит из двух подвыражений. Сначала происходит сравнение (==) переменных a и b. После этого результат логической операции присваивается переменной c. Выражение a, b, c просто выводит значения переменных на экран.
Упражнения
При работе с водимыми данными не забывайте о преобразовании типов. Все что вводит пользователь - это строка! А в упражнениях предполагается работа с числами. Функции преобразования в числа: int()
и float()
.
Самостоятельно, без запуска кода, решите логические примеры, т.е. что выведет функция
print()
:a = 25 b = -18 c = 2 print(a + b > 19) print(a < 14 - b) print(a <= b + 40) print(a != b) print(c == c) c = a == b print(c)
1
2
3
4
5
6
7
8
9
10Сверьте Ваши ответы c ответами компьютера.
Возьмите за основу предыдущий код задания, измените значения переменных: a = - 15, b = 12, c = 8. Решайте самостоятельно все логические выражения и запустив код, сверьте ваши ответы с ответами компьютера.
Напишите программу, которая спрашивает у пользователя: "What year were you born?" И выводит
True
- если год указан верно, иFalse
- если год указан не верно. Верным можно считать любое положительное число.Примеры работы программы:
What year were you born? 57 Year is True
1
2What year were you born? -17 Year is False
1
2Напишите программу, которая спрашивает у пользователя: "What year is it?" И выводит
True
- если год указан верно, иFalse
- если год указан не верно. Проверку сравнения проведите с текущим годом.Примеры работы программы:
What year is it? 1414 Year is False
1
2What year is it? 2021 Year is True
1
2Напишите программу, которая запрашивала у пользователя два числа и выводила бы
True
илиFalse
в зависимости от того, больше первое число второго или нет.Enter the first number: 6 Enter the second number: -1 Is the first number more than the second number: True
1
2
3Напишите программу, которая запрашивает у пользователя цену мороженного, сколько штук он хочет купить и сколько у него наличных. Если наличных средств достаточно, программа должна выводить
True
, иначеFalse
.How much does ice cream cost? 57 How many pieces do you want to buy? 3 How much money do you have? 160 You have enough money: False
1
2
3
4Напишите программу, которая просит пользователя ввести любые положительное и отрицательное числа. Далее Выводит примеры: с заданными числами и спрашивает чему они равны. Если пользователь вводит правильное решение то выводиться ответ
True
, иначеFalse
.Enter any negative number: -5 Enter any positive number: 6 Enter your answer: -5 + 6 = 1 Answer: True Correct value: 1 Enter your answer: -5 - 6 = -11 Answer: True Correct value: -11 Enter your answer: -5 * 6 = -30 Answer: True Correct value: -30 Enter your answer: -5 ** 6 = 625 Answer: False Correct value: -15625 Enter your answer: -5 / 6 = 0.9 Answer: False Correct value: -0.8333333333333334 Enter your answer: -5 // 6 = 1 Answer: False Correct value: -1 Enter your answer: -5 % 6 = 1 Answer: True Correct value: 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Сравнение строк
Основное правило сравнения помогает избежать и/или исправить наиболее частые ошибки:
Обязательное совпадение типов
Тип сравниваемых значений всегда должен быть одинаковый!
Операторы сравнения строк
Оператор | Синтаксис | Вывод |
---|---|---|
== | a == b | Если значения a и b равны, то условие становится истинным: True . |
!= | a != b | Если значения a и b не равны, то условие становится истинным: True . |
> | a > b | Если значение a больше, чем значение b , то условие становится истинным: True . |
< | a < b | Если значение a меньше значения b , тогда условие становится истинным: True . |
>= | a >= b | Если значение a больше или равно значения b , то условие становится истинным: True . |
<= | a <= b | Если значение b меньше или равно значения b , то условие становится истинным: True . |
in | a in b | Принимает значение True , если находит подстроку a в строке b , и False в противном случае. |
not in | a not in b | Принимает значение True , если НЕ находит подстроку a в строке b , и False в противном случае. |
Простые логические выражения
Сравнение строк происходить не столь очевидным способом как числа. Для примера предлагаю подумать над следующими выражениями:
print('15' <= '17') # True
print('5' > '7') # False
print('15' > '7') # False
print('415' > '45') # False
print('75' > '48') # True
print('1' <= 's') # True
print('a' >= 'b') # False
print('b' != 'B') # True
print('LOL' == 'lol') # False
2
3
4
5
6
7
8
9
Правила сравнения строк:
- Сравнения строк, т.е. символов содержащихся в кавычках (даже если это цифры), происходит посимвольно.
- Каждый символ закодирован цифровым порядковым номером, и чем выше номер символа, тем он больше, причем для разных букв (заглавных или строчных, русских или английских) разные порядковые номера.
- Если начальные символы совпадают, то сравнение происходит по следующему символу.
Проверку по-символьно происходит следующим образом:
- берется первый символ каждой строки, сравнивается, если символы не равны вычисляется результат
True
илиFalse
. Иначе сравнение переключается к следующему символу. - берется следующий символ каждой строки, сравнивается, если символы не равны вычисляется результат
True
илиFalse
. Иначе происходит сравнение по следующему символу. - Если в одной строке ещё остались символы, а в другой закончились, то будет произведено сравнение символа с пустотой. Любой символ больше пустоты, и даже пробел больше пустоты. Результатом будет
True
илиFalse
в зависимости от оператора сравнения.
Пошаговое выполнение логического выражения можно представить следующим образом:
print('7415' >= '745') # general check False
print('7' == '7') # next step check if True next char
print('4' == '4') # next step check if True next char
print('1' == '5') # next step check if False check operand
print('1' >= '5') # last step: False is the final answer for general expression
2
3
4
5
Для общего ознакомления с некоторым объемом символов можно запустить следующий код:
for i in range(1106):
if chr(i).isprintable():
print(chr(i), end='')
2
3
Результат выполнения будет примерно следующим, троеточием заменены не которые малопонятные символы:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¡¢£¤¥¦§¨©ª«¬®
...
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяѐё
2
3
Данный пример вывода необходим для понимания сравнения строк посимвольно.
Представим числовую ось например от -20 до 20. Мы понимаем, что одно число больше другого, потому что оно расположено правее от числа, с которым сравнивается. И число меньше, если стоит левее числа с которым оно сравнивается.
Если выведенную последовательность символом представить как числовую ось, то вес символа будет определяться по правилу: чем правее символ находится тем больше он весит.
Для примера можно запустить следующий код и осознать правильность его выполнения:
print("!" < "0") # True
print("+" < "0") # True
print("5" < "D") # True
print("F" < "f") # True
print("z" > "r") # True
print("Б" > "r") # True
print("й" > "Л") # True
print("к" > "7") # True
2
3
4
5
6
7
8
Данный пример кода специально приведен с результатом True
, для простоты понимания.
Для наглядности веса символа и его отображения можно запустить следующий код:
for i in range(206):
if chr(i).isprintable():
print(f'{i} {chr(i)}\t\t{i+150} {chr(i+150)}\t\t{i+300} {chr(i+300)}'
f'\t\t{i+450} {chr(i+450)}\t\t{i+600} {chr(i+600)}'
f'\t\t{i+750} {chr(i+750)}\t\t{i+900} {chr(i+900)}')
2
3
4
5
Результат выполнения будет следующим:
32 182 ¶ 332 Ō 482 Ǣ 632 ɸ 782 ̎ 932 Τ
33 ! 183 · 333 ō 483 ǣ 633 ɹ 783 ̏ 933 Υ
34 " 184 ¸ 334 Ŏ 484 Ǥ 634 ɺ 784 ̐ 934 Φ
35 # 185 ¹ 335 ŏ 485 ǥ 635 ɻ 785 ̑ 935 Χ
36 $ 186 º 336 Ő 486 Ǧ 636 ɼ 786 ̒ 936 Ψ
37 % 187 » 337 ő 487 ǧ 637 ɽ 787 ̓ 937 Ω
38 & 188 ¼ 338 Œ 488 Ǩ 638 ɾ 788 ̔ 938 Ϊ
39 ' 189 ½ 339 œ 489 ǩ 639 ɿ 789 ̕ 939 Ϋ
40 ( 190 ¾ 340 Ŕ 490 Ǫ 640 ʀ 790 ̖ 940 ά
41 ) 191 ¿ 341 ŕ 491 ǫ 641 ʁ 791 ̗ 941 έ
42 * 192 À 342 Ŗ 492 Ǭ 642 ʂ 792 ̘ 942 ή
43 + 193 Á 343 ŗ 493 ǭ 643 ʃ 793 ̙ 943 ί
...
2
3
4
5
6
7
8
9
10
11
12
13
Вывод до 1105 символа.
Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции
print()
вместо троеточия (...) напишите ваши варианты ответа (True, False) заданные:print("1\t...", "д" < "ц") print("2\t...", "R" > "j") print("3\t...", "W" > "Щ") print("4\t...", "a" <= "Ш") print("5\t...", "Ш" == "Я") print("6\t...", "S" < "л") print("7\t...", "д" != "Ю") print("8\t...", "Я" >= "V") print("9\t...", "z" > "i") print("10\t...", "q" >= "Ж") print("11\t...", "v" == "D") print("12\t...", "9" < "Z") print("13\t...", "=" == "?") print("14\t...", "v" < "ь") print("15\t...", "Ф" != "g") print("16\t...", "R" != "k") print("17\t...", "д" != "ы") print("18\t...", "*" < "f") print("19\t...", "0" >= "ф") print("20\t...", "Й" == "/")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции
print()
вместо троеточия (...) напишите символы в результате сравнения которых ответ должен совпадать заданными:print("1\tTrue", "h" >= "...") print("2\tFalse", "..." == ";") print("3\tTrue", "R" != "...") print("4\tFalse", "Ы" >= "...") print("5\tTrue", "..." >= "N") print("6\tTrue", "л" < "...") print("7\tFalse", "w" > "...") print("8\tTrue", "..." > "k") print("9\tFalse", "q" >= "...") print("10\tFalse", "..." > "й") print("11\tFalse", "z" > "...") print("12\tFalse", "Д" == "...") print("13\tTrue", "й" >= "...") print("14\tFalse", "L" == "...") print("15\tTrue", "I" <= "...") print("16\tFalse", "..." > "и") print("17\tFalse", "..." < "i") print("18\tTrue", "..." != "s") print("19\tTrue", "..." != ";") print("20\tFalse", "щ" == "...")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции
print()
вместо троеточия (...) напишите символы в результате сравнения которых ответ должен совпадать заданными:print("1\tFalse", "..." <= "...") print("2\tTrue", "..." != "...") print("3\tTrue", "..." < "...") print("4\tTrue", "..." >= "...") print("5\tFalse", "..." == "...") print("6\tFalse", "..." < "...") print("7\tTrue", "..." > "...") print("8\tTrue", "..." == "...") print("9\tFalse", "..." > "...") print("10\tFalse", "..." != "...")
1
2
3
4
5
6
7
8
9
10
Сравнение строк операторам "in"
Сравнение строк с использованием оператора in
достаточно простая и при этом объемная проверка.
Особенность in
заключается в том, что при помощи него можно производить общую проверку для всей строки не по отдельным символам. Т.е. есть возможность проверки наличия символа или строки в другой строке:
print("a" in "mam") # True
print("k" in "cat") # False
print("th" in "length") # True
print("len" in "length") # True
print("len" in "width") # False
print("1" in "65498") # False
print("4" in "65498") # True
print("498" in "65498") # True
2
3
4
5
6
7
8
Таким образом можно реализовать проверку наличия слова в строке или другого набора символов в строке.
Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции
print()
вместо троеточия (...) напишите ваши варианты ответа (True, False) заданные:print("1\tFalse", "..." in "abcdelmnoyz") print("2\tTrue", "..." in "ABCDETUVWXYZ") print("3\tFalse", "..." in "0123456789") print("4\tTrue", "..." in "АБВГДЧШЩЪЭЮ") print("5\tTrue", "..." in "34567fgjklЮ") print("6\tTrue", "..." in "()0123456789") print("7\tFalse", "..." in "$%&'?") print("8\tTrue", "..." in "{|}~¡¢£¤¥¦§¨")
1
2
3
4
5
6
7
8Напишите напишите программу, которая спрашивает "What day of week is it?" и выводит
True
- если название введенного дня существует, иFalse
- если такого дня нет. Реализовать необходимо корректность проверки для любого типа ввода (sunday, Sunday, SUNDAY, SunDay и т.п) для любого дня недели."What day of week is it?" Sunday True
1
2"What day of week is it?" holyday False
1
2Напишите напишите программу, которая спрашивает "What month is your vacation?"
- выводит "Why not" при условии
True
- если название введенного месяца существует, - выводит "Incorrect input, no such month" при условии
False
- если такого месяца нет. - реализовать необходимо корректность проверки для любого типа ввода (May, mAY, MAY и т.п) для любого месяца.
"What month is your vacation?" May Why not
1
2"What month is your vacation?" maybe Incorrect input, no such month
1
2- выводит "Why not" при условии
Напишите напишите программу, которая просит "Enter your login to register: "
- выводит "Congratulations! You are registered." при условии
True
- если такого имени нет. - выводит "This login already exists" при условии
False
- если название введенного имени существует, - реализовать необходимо корректность проверки для любого типа ввода (Log, lOG, LOG и т.п) для любого имени.
- строка с исходными именами может быть следующая: "log, login, pass, password" и т.п.
"Enter your login to register: " login This login already exists
1
2"Enter your login to register: " ZagNull Congratulations! You are registered.
1
2- выводит "Congratulations! You are registered." при условии
Методы проверки строк
Сравнение строк происходит посимвольно уложняет их проверку, если проводить сравнение с числами. Усложнение заключается в том, чтобы правильно проверить строку необходимо применять циклы для перебора всех символом и отдельно проверки каждого. Но есть еще один простой способ полной проверки строк - это использование методов.
Пример определения, что строка является числом можно сделать двумя способами:
- длинное решение состоит из 6 строк,
- короткое решение в одну сроку с использованием метода
.isdigit()
'''long solution'''
text = "485"
flag = True
for char in text:
if not '0' <= char <= '9':
flag = False
print(flag) # True
'''short solution'''
print("485".isdigit()) # True
2
3
4
5
6
7
8
9
10
В коде выше можно поменять значения строки "485" на любую другую строку, и убедиться что итог решений одинаков.
Методы - это функции обработки принадлежащие определнному классу и/или объекту. Это команды со скобочками, которые пишутся после точки, после обращения к объкту: object.method(params)
. Несколько строчек примеров приведены ниже:
...
root.title('Window title')
label.pack()
"My name {0}".format(name)
...
2
3
4
5
Вспомним, что строка это объект, и это значит что у неё есть методы, которые не только могут изменять сам объект, но и сообщить информацию о нем самом.
В английском языке общие вопросы, на которые отвечают да/нет выглядят следующим образом:
- Is it a cat?
- Is this a boy?
- Is that a car?
Общее в этих вопросах то, что все они начинаются со слова 'is'
. Вот и в программировании функции и методы, которые возвращают True/False
(сообщаю информацию об объекте "да/нет"), принято именовать со слова is...()
.
Чтобы увидеть все параметры проверки строки достаточно обратиться к строке, поставить точку и напечатать 'is': "".is
- в выпадающей подсказке выводятся методы пренадлежащие к данному объекту и возвращающие True/False
.
Проверка строк методами без параметров
.isalnum()
: определяет, являются ли все символы в данной строке буквенно-цифровыми, то есть только алфавитами и цифрами. Если да, то возвращаетTrue
, иначе возвращаетFalse
. Если между символами есть пробел, возвращаетсяFalse
.print(f"{'0ФAz'.isalnum() = }") # True print(f"{'1-Az'.isalnum() = }") # False print(f"{'1 Az'.isalnum() = }") # False
1
2
3.isalpha()
: определяет, все ли символы в данной строке являются буквами. Если да, вернетTrue
, иначеFalse
. Если между символами есть пробел, возвращаетсяFalse
.print(f"{'aZb'.isalpha() = }") # True print(f"{'aZb1'.isalpha() = }") # False print(f"{'a Zb'.isalpha() = }") # False
1
2
3.isdigit()
: определяет, все ли символы строки являются цифрами и есть хотя бы один символ. Если да, вернетTrue
, иначеFalse
. Если между символами есть пробел, возвращаетсяFalse
.print(f"{'123'.isdigit() = }") # True print(f"{'12 3'.isdigit() = }") # False
1
2.isdecimal()
: определяет, все ли символы в данной строке являются десятичными. Если да, то возвращаетTrue
, иначе возвращаетFalse
. Если между ними есть пробел, возвращаетсяFalse
.print(f"{'12'.isdecimal() = }") # True print(f"{'1e'.isdecimal() = }") # False
1
2.islower()
: определяет, все ли символы в данной строке находятся в нижнем регистре (строчные). Если да, то возвращаетTrue
, иначе возвращаетFalse
.print(f"{'avb'.islower() = }") # True print(f"{'av 1'.islower() = }") # True print(f"{'av Z'.islower() = }") # False
1
2
3.isnumeric()
: определяет, все ли символы в данной строке являются числовыми, то есть числами и показателями степени, которые могут быть дробными. Если да, то возвращаетTrue
, иначе возвращаетFalse
.print(f"{'12'.isnumeric() = }") # True print("'\u00BC'.isnumeric()", '\u00BC'.isnumeric()) # True print(f"{'u12'.isnumeric() = }") # False
1
2
3.isprintable()
: определяет, можно ли распечатать все символы в данной строке. Если да, то возвращаетTrue
, иначе возвращаетFalse
. Такие символы, как «\t
» или «\n
», не печатаются.print(f"{'A1z'.isprintable() = }") # True print("'\tA1z'.isprintable()", '\tA1z'.isprintable()) # False
1
2.isspace()
: определяет, все ли символы в данной строке являются пробелами. Если да, то возвращаетTrue
, иначе возвращаетFalse
.print(f"{''.isspace() = }") # False print(f"{' '.isspace() = }") # True print(f"{'d '.isspace() = }") # False
1
2
3.istitle()
: определяет, следует ли строка набору правил, чтобы ее можно было квалифицировать как заголовок. Если да, то возвращаетTrue
, иначе возвращаетFalse
.print(f"{'1 Title'.istitle() = }") # True print(f"{'The Title'.istitle() = }") # True print(f"{'a Title'.istitle() = }") # False
1
2
3.isupper()
: определяет, все ли символы в данной строке находятся в верхнем регистре (заглавные). Если да, то возвращаетTrue
, иначе возвращаетFalse
.print(f"{'AHA'.isupper() = }") # True print(f"{'AH A'.isupper() = }") # True print(f"{'AH 1'.isupper() = }") # True print(f"{'AH a'.isupper() = }") # False
1
2
3
4
Проверка строк методами c параметрами
.startswith(prefix, start=None, end=None)
: - вернетTrue
, если строка начинается с указанной части стоки (префикса), иначе возвращаетFalse
.Параметры:
prefix
- обязательный параметр - символ или часть строки, которая служит проверкой начала строки;start
не обязательный параметр, указывает с какого по счету символа начинать проверку строки;end
не обязательный параметр, указывает на каком по счету символе закончить проверку строки.
print(f"{'0ФAz'.startswith('0Ф') = }") # True print(f"{'0ФAz'.startswith('Az') = }") # False
1
2.endswith(suffix, start=None, end=None)
: - вернетTrue
, если строка заканчивается указанной частью строки (суфиксом), иначе возвращаетFalse
.Параметры:
suffix
- обязательный параметр - символ или часть строки, которая служит проверкой окончания строки;start
не обязательный параметр, указывает с какого по счету символа начинать проверку строки;end
не обязательный параметр, указывает на каком по счету символе закончить проверку строки.
print(f"{'0ФAz'.endswith('Az') = }") # True print(f"{'0ФAz'.endswith('0Ф') = }") # False
1
2
Упражнения
Напишите программу, которая будет определять характеристики строки. Программа запрашивает на ввод строку и далее определяет соответствие строки указанным параметрам:
- состоит из цифр и разных букв,
- только из разных букв,
- только из цифр,
- из строцных букв,
- из прописных букв,
- из пробелов,
- строка заголовок
Пример работы программы может быть следующим:
Enter any set of symbols: SD213 String 'SD213' contains numbers and letters: True String 'SD213' contains only letters: False String 'SD213' contains only numbers: False String 'SD213' contains lower case letters: False String 'SD213' contains upper case letters: True String 'SD213' contains only spaces: False String 'SD213' is formated as title: False
1
2
3
4
5
6
7
8Напишите программу, которая будет определять характеристики строки. Программа запрашивает на ввод строку и далее определяет не соответствие строки указанным параметрам:
- не состоит из цифр и разных букв,
- не состоит из разных букв,
- не только из цифр,
- не из строцных букв,
- не из прописных букв,
- не из пробелов,
- не строка заголовок
Пример работы программы может быть следующим:
Enter any set of symbols: SD213 String 'SD213' are numbers and letters. String 'SD213' does not contain only letters. String 'SD213' does not contain only numbers. String 'SD213' does not contain lower case letters. String 'SD213' contains upper case letters. String 'SD213' is not only spaces. String 'SD213' is not formated as title.
1
2
3
4
5
6
7
8Напишите программу, которая будет определять характеритику строки. Использовать нужно методы обработки и провеки строк. Пользователя просят вести строку, далее происходит проверка символов:
- наличие только из цифр (numbers),
- содержит большие буквы (upper case),
- содержит маленькие букв (lower case),
- наличие только из пробелов (space only),
- строка содержит разные символы (different symbols, len),
- строка пустая (empty)
В итоге выводится результат характеристики введеной строки.
Пример работы программы:
Enter any string: HA String 'HA' is upper letters.
1
2Другой пример работы программы:
Enter any string: s5HA String 's5HA' is different symbols.
1
2Напишите программу, которая будет определять отсутствующие элеменый в строке. Использовать нужно методы обработки и провеки строк. Пользователя просят вести строку, далее происходит проверка символов:
- не состоит из цифр (numbers),
- не содержит большие буквы (upper case),
- не содержит маленькие букв (lower case),
- не состоит только из пробелов (space only)
В итоге выводится результат характеристик несоотвествия введеной строки.
Пример работы программы:
Enter any string: HA String 'HA' is not number are not lower letters are not only spaces.
1
2Другой пример работы программы:
Enter any string: s5HA String '5' is not lower letters is not symbols.
1
2
Преобразование к логическому типу
Нам известны три типа данных – целые и вещественные (дробные) числа, и также строками. Новый четвертый – логический тип данных (тип bool
). Его также называют булевым. У этого типа всего два возможных значения: True
(правда) и False
(ложь):
a = True
print(type(a)) # в консоли выведется следующее: <class 'bool'>
b = False
print(type(b)) # в консоли выведется следующее: <class 'bool'>
2
3
4
Здесь переменной a было присвоено значение True
, после чего с помощью встроенной в Python функции type()
проверен ее тип. Интерпретатор сообщил, что это переменная класса bool
. Понятия «класс» и «тип данных» в данном случае одно и то же. Переменная b также связана с булевым значением.
В программировании False
обычно приравнивают к нулю, а True
– к единице. Чтобы в этом убедиться, можно преобразовать булево значение к целочисленному типу:
print(int(True)) # 1
print(int(False)) # 0
2
Возможно и обратное. Можно преобразовать какое-либо значение к булевому типу:
print(bool(3.4)) # True
print(bool(-150)) # True
print(bool(0)) # False
print(bool(' ')) # True
print(bool('')) # False
2
3
4
5
И здесь работает правило: всё, что не 0
и не пустота
, является правдой: True
.
Инверсия - not
В Python есть унарный логический оператор not
- отрицание. Он превращает True
в False
, а False
в True
. Унарный он потому, что применяется к одному выражению, стоящему после него, а не справа и слева от него как в случае бинарных and и or
.
print(not True) # False
print(not False) # True
y = 13
print(not y < 15) # False
2
3
4
Выражение у < 15
возвращает True
. Применив оператор not
, получаем False
.
a = 5
b = 0
print(not a) # False
print(not b) # True
2
3
4
Число 5 преобразуется в True
, отрицание True
дает False
. Ноль приравнивается к False
. Отрицание False
дает True
.
Сложные логические выражения
Логические выражения типа kByte >= 1023
являются простыми, так как в них выполняется только одна логическая операция. Однако, на практике нередко возникает необходимость в более сложных выражениях. Может понадобиться получить ответ «Да» или «Нет» в зависимости от результата выполнения двух простых выражений. Например, «на улице идет снег или дождь», «переменная news
больше 12 и меньше 20».
В таких случаях используются специальные операторы, объединяющие два и более простых логических выражения. Широко используются два оператора – так называемые логические И (and) и ИЛИ (or).
Чтобы получить True
при использовании оператора and, необходимо, чтобы результаты обоих простых выражений, которые связывает данный оператор, были истинными. Если хотя бы в одном случае результатом будет False
, то и все сложное выражение будет ложным.
Чтобы получить True
при использовании оператора or
, необходимо, чтобы результат хотя бы одного простого выражения, входящего в состав сложного, был истинным. В случае оператора or
сложное выражение становится ложным лишь тогда, когда ложны оба составляющие его простые выражения.
Допустим, переменной x было присвоено значение 8 (x = 8), переменной y присвоили 13 (y = 13). Логическое выражение y < 15
and x > 8
будет выполняться следующим образом. Сначала выполнится выражение y < 15
. Его результатом будет True
. Затем выполнится выражение x > 8
. Его результатом будет False
. Далее выражение сведется к True
and False
, что вернет False
.
x = 8
y = 13
print(y < 15 and x > 8) # False
2
3
Если бы мы записали выражение так: x > 8
and y < 15
, то оно также вернуло бы False. Однако сравнение y < 15
не выполнялось бы интерпретатором, так как его незачем выполнять. Ведь первое простое логическое выражение x > 8
уже вернуло ложь
, которая, в случае оператора and
, превращает все выражение в ложь
.
В случае с оператором or
второе простое выражение проверяется, если первое вернуло ложь
, и не проверяется, если уже первое вернуло истину
. Так как для истинности всего выражения достаточно единственного True
, неважно по какую сторону от or
оно стоит.
print(y < 15 or x > 8) # True
Упражнения
Напишите следующую программу:
- Присвойте двум переменным любые числовые значения.
- с помощью оператора
and
составьте два сложных логических выражения, одно из которых даетистину
, другое –ложь
. - используя оператор
or
составьте два сложных логических выражения, одно из которых даетистину
, другое –ложь
.
Составьте программу сравнения строковых переменных:
- с пятью простыми разными логическими выражениями;
- с четырьмя сложными логическими выражениями;
- объясните результат.
Напишите программу, которая спрашивает у пользователя: "What day of month is it?" И выводит
True
- если день указан верно, иFalse
- если день указан не верно. Указанный день считается верным, если число от 1 до 31.Напишите программу, которая спрашивает у пользователя: "What number of month were you born?" И выводит
True
- если месяц указан верно, иFalse
- если не верно. Указанный месяц считается верным, если число от 1 до 12.