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

Выражения

Математические выражения

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

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

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')
1
2
3
4
5
6
7
8
9
10

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

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

B реальной жизни мы соглашаемся с каким-либо утверждением или отрицаем его. Например, если вам скажут, что сумма чисел 3 и 5 больше 7, вы согласитесь, скажете: «Да, это правда». Если же кто-то будет утверждать, что сумма трех и пяти меньше семи, то вы расцените такое утверждение как ложное.

Логические выражения похожи по своему виду и принципу работна на математические выражения у них лишь два основных различия:

  1. математические операторы (+, -, *, / и т.п.) заменены логическими операторами (<, >, ==, != и т.п.)
  2. результатом вычисления логического выражения будет 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)
1
2
3
4
5
6
7
8
9
10

Логическое выражение - это выражение результатом которого является True или False. Еще логические выражения называют также булевы выражения в честь ученого Джордж Буль, который основал булеву алгебру (алгебру логики).

Например, выражение 4 > 5 является логическим, так как его результатом является либо правда, либо ложь. Выражение 4 + 5 не является логическим, так как результатом его выполнения является число.

Упражнения

  1. Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.

    В функциях 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'>
1
2
3
4
5
6
7
8

Упражнения

  1. Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.

    В функциях 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
1
2
3
4
5
6
7
8
9
10
11

В данном примере выражение c = a == b состоит из двух подвыражений. Сначала происходит сравнение (==) переменных a и b. После этого результат логической операции присваивается переменной c. Выражение a, b, c просто выводит значения переменных на экран.

Упражнения

При работе с водимыми данными не забывайте о преобразовании типов. Все что вводит пользователь - это строка! А в упражнениях предполагается работа с числами. Функции преобразования в числа: int() и float().

  1. Самостоятельно, без запуска кода, решите логические примеры, т.е. что выведет функция 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 ответами компьютера.

  2. Возьмите за основу предыдущий код задания, измените значения переменных: a = - 15, b = 12, c = 8. Решайте самостоятельно все логические выражения и запустив код, сверьте ваши ответы с ответами компьютера.

  3. Напишите программу, которая спрашивает у пользователя: "What year were you born?" И выводит True - если год указан верно, и False - если год указан не верно. Верным можно считать любое положительное число.

    Примеры работы программы:

    What year were you born? 57
    Year is True
    
    1
    2
    What year were you born? -17
    Year is False
    
    1
    2
  4. Напишите программу, которая спрашивает у пользователя: "What year is it?" И выводит True - если год указан верно, и False - если год указан не верно. Проверку сравнения проведите с текущим годом.

    Примеры работы программы:

    What year is it? 1414
    Year is False
    
    1
    2
    What year is it? 2021
    Year is True
    
    1
    2
  5. Напишите программу, которая запрашивала у пользователя два числа и выводила бы 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
  6. Напишите программу, которая запрашивает у пользователя цену мороженного, сколько штук он хочет купить и сколько у него наличных. Если наличных средств достаточно, программа должна выводить 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
  7. Напишите программу, которая просит пользователя ввести любые положительное и отрицательное числа. Далее Выводит примеры: с заданными числами и спрашивает чему они равны. Если пользователь вводит правильное решение то выводиться ответ 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.
ina in bПринимает значение True, если находит подстроку a в строке b, и False в противном случае.
not ina 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
1
2
3
4
5
6
7
8
9

Правила сравнения строк:

  1. Сравнения строк, т.е. символов содержащихся в кавычках (даже если это цифры), происходит посимвольно.
  2. Каждый символ закодирован цифровым порядковым номером, и чем выше номер символа, тем он больше, причем для разных букв (заглавных или строчных, русских или английских) разные порядковые номера.
  3. Если начальные символы совпадают, то сравнение происходит по следующему символу.

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

  • берется первый символ каждой строки, сравнивается, если символы не равны вычисляется результат 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
1
2
3
4
5

Для общего ознакомления с некоторым объемом символов можно запустить следующий код:

for i in range(1106):
    if chr(i).isprintable():
        print(chr(i), end='')
1
2
3

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

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¡¢£¤¥¦§¨©ª«¬®
 ...
 АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяѐё
1
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
1
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)}')
1
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 ί
...
1
2
3
4
5
6
7
8
9
10
11
12
13

Вывод до 1105 символа.

Упражнения

  1. Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.

    Задание: Внутри функции 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
  2. Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.

    Задание: Внутри функции 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
  3. Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.

    Задание: Внутри функции 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
1
2
3
4
5
6
7
8

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

Упражнения

  1. Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.

    Задание: Внутри функции 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
  2. Напишите напишите программу, которая спрашивает "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
  3. Напишите напишите программу, которая спрашивает "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
  4. Напишите напишите программу, которая просит "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

Методы проверки строк

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

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

  • длинное решение состоит из 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
1
2
3
4
5
6
7
8
9
10

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

Методы - это функции обработки принадлежащие определнному классу и/или объекту. Это команды со скобочками, которые пишутся после точки, после обращения к объкту: object.method(params). Несколько строчек примеров приведены ниже:

...
root.title('Window title')
label.pack()
"My name {0}".format(name)
...
1
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

Упражнения

  1. Напишите программу, которая будет определять характеристики строки. Программа запрашивает на ввод строку и далее определяет соответствие строки указанным параметрам:

    • состоит из цифр и разных букв,
    • только из разных букв,
    • только из цифр,
    • из строцных букв,
    • из прописных букв,
    • из пробелов,
    • строка заголовок

    Пример работы программы может быть следующим:

    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
  2. Напишите программу, которая будет определять характеристики строки. Программа запрашивает на ввод строку и далее определяет не соответствие строки указанным параметрам:

    • не состоит из цифр и разных букв,
    • не состоит из разных букв,
    • не только из цифр,
    • не из строцных букв,
    • не из прописных букв,
    • не из пробелов,
    • не строка заголовок

    Пример работы программы может быть следующим:

    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
  3. Напишите программу, которая будет определять характеритику строки. Использовать нужно методы обработки и провеки строк. Пользователя просят вести строку, далее происходит проверка символов:

    • наличие только из цифр (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
  4. Напишите программу, которая будет определять отсутствующие элеменый в строке. Использовать нужно методы обработки и провеки строк. Пользователя просят вести строку, далее происходит проверка символов:

    • не состоит из цифр (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'>
1
2
3
4

Здесь переменной a было присвоено значение True, после чего с помощью встроенной в Python функции type() проверен ее тип. Интерпретатор сообщил, что это переменная класса bool. Понятия «класс» и «тип данных» в данном случае одно и то же. Переменная b также связана с булевым значением.

В программировании False обычно приравнивают к нулю, а True – к единице. Чтобы в этом убедиться, можно преобразовать булево значение к целочисленному типу:

print(int(True))    # 1
print(int(False))   # 0
1
2

Возможно и обратное. Можно преобразовать какое-либо значение к булевому типу:

print(bool(3.4))    # True
print(bool(-150))   # True
print(bool(0))      # False
print(bool(' '))    # True
print(bool(''))     # False
1
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
1
2
3
4

Выражение у < 15 возвращает True. Применив оператор not, получаем False.

a = 5
b = 0
print(not a)    # False
print(not b)    # True
1
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
1
2
3

Если бы мы записали выражение так: x > 8 and y < 15, то оно также вернуло бы False. Однако сравнение y < 15 не выполнялось бы интерпретатором, так как его незачем выполнять. Ведь первое простое логическое выражение x > 8 уже вернуло ложь, которая, в случае оператора and, превращает все выражение в ложь.

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

    print(y < 15 or x > 8)  # True
1

Упражнения

  1. Напишите следующую программу:

    • Присвойте двум переменным любые числовые значения.
    • с помощью оператора and составьте два сложных логических выражения, одно из которых дает истину, другое – ложь.
    • используя оператор or составьте два сложных логических выражения, одно из которых дает истину, другое – ложь.
  2. Составьте программу сравнения строковых переменных:

    • с пятью простыми разными логическими выражениями;
    • с четырьмя сложными логическими выражениями;
    • объясните результат.
  3. Напишите программу, которая спрашивает у пользователя: "What day of month is it?" И выводит True - если день указан верно, и False - если день указан не верно. Указанный день считается верным, если число от 1 до 31.

  4. Напишите программу, которая спрашивает у пользователя: "What number of month were you born?" И выводит True - если месяц указан верно, и False - если не верно. Указанный месяц считается верным, если число от 1 до 12.