Как метод def __lt__(self, other) сравнивает строки?
![]()
Если вас интересует принцип работы то сравнение идет посимвольно (в лексикографическом порядке). Т.е. код первого символа первой строки сравнивается с кодом первого символа второй строки. Если он меньше возвращаем True , если больше возвращаем False , если равен переходим к следующему символу.
Алгоритмически это выглядит приблизительно следующим образом:
Если же вас интересует реализация, то придется смотреть в исходники Python.
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Сравнение строк с использованием Python
В Python строки — это последовательности символов, которые фактически хранятся в памяти как объект. Каждый объект можно идентифицировать с помощью метода id (), как вы можете видеть ниже. Python пытается повторно использовать в памяти объекты с одинаковым значением, что также позволяет очень быстро сравнивать объекты в Python: $ python Python 2.7.9 (по умолчанию, 29 июня 2016 г., 13:08:31) [GCC 4.9.2] на linux2 Введите «help», «copyright», «credits» или «license» для получения дополнительной информации. >>> a = "abc" >>> b = "abc" >>> c = "def" >>> печать
Время чтения: 6 мин.
В Python строки — это последовательности символов, которые фактически хранятся в памяти как объект. Каждый объект можно идентифицировать с помощью id() , как вы можете видеть ниже. Python пытается повторно использовать объекты в памяти с одинаковым значением, что также позволяет очень быстро сравнивать объекты в Python:
Для сравнения строк Python предлагает несколько разных операторов. Сначала мы объясним их более подробно ниже. Во-вторых, мы рассмотрим как string и re , которые содержат методы для обработки неточных совпадений без учета регистра. В-третьих, для работы с многострочными строками очень удобен модуль difflib . Ряд примеров поможет вам понять, как их использовать.
Операторы == и! =
В качестве основного оператора сравнения вы захотите использовать == и != . Они работают точно так же, как и с целыми числами и значениями с плавающей запятой. Оператор == возвращает True если есть точное совпадение, в противном случае будет возвращено False Напротив, оператор != True если совпадений нет, а в противном случае возвращает False . Листинг 1 демонстрирует это.
В for строка, содержащая название швейцарского города «Лозанна», сравнивается с записью из списка других мест, и результат сравнения выводится на стандартный вывод.
Запустив сценарий Python сверху, вы получите следующий результат:
Операторы == и is
Python имеет два оператора сравнения == и is . На первый взгляд они кажутся одинаковыми, но на самом деле это не так. == сравнивает две переменные на основе их фактического значения. Напротив, is сравнивает две переменные на основе идентификатора объекта и возвращает True если две переменные относятся к одному и тому же объекту.
Следующий пример демонстрирует это для трех переменных с целыми значениями. Две переменные a и b имеют одинаковое значение, и Python обращается к одному и тому же объекту, чтобы минимизировать использование памяти.
Как только значение изменится, Python повторно создаст объект и назначит переменную. В следующем фрагменте кода b получает значение 2, а затем b и c относятся к одному и тому же объекту.
Эмпирическое правило , которому надо следовать , чтобы использовать == при сравнении неизменных типов (например , Интс) и is при сравнении объектов.
Дополнительные операторы сравнения
Для сравнения лексикографического порядка вы можете использовать операторы сравнения < , > , <= и >= . Само сравнение проводится посимвольно. Порядок зависит от порядка символов в алфавите. Этот порядок зависит от таблицы символов, которая используется на вашем компьютере при выполнении кода Python.
Имейте в виду, что порядок чувствителен к регистру. Например, латинский алфавит: «Автобус» стоит перед «автобусом». В листинге 2 показано, как эти операторы сравнения работают на практике.
Запустив сценарий Python сверху, вы получите следующий результат:
Сравнение без учета регистра
В предыдущих примерах основное внимание уделялось точному совпадению строк. Чтобы позволить сравнения без учета регистра, Python предлагает специальные строковые методы, такие как upper() и lower() . Оба они напрямую доступны как методы соответствующего строкового объекта.
upper() преобразует всю строку в прописные буквы, а lower() в строчные буквы соответственно. В следующем листинге, основанном на листинге 1, показано, как использовать метод lower() .
Результат выглядит следующим образом:
Использование регулярного выражения
Регулярное выражение — или для краткости «регулярное выражение» — определяет определенный шаблон символов. Что касается этой темы, Джеффри Фридл написал отличную книгу под названием « Освоение регулярных выражений» <.amazon-link>, которую я очень рекомендую.
Чтобы использовать этот механизм в Python, сначала импортируйте модуль re, а затем определите конкретный шаблон. Опять же, следующий пример основан на листинге 1 . Шаблон поиска соответствует «заливу» и начинается со строчной или прописной буквы. А именно, следующий код Python находит все строки, в которых встречается шаблон поиска, независимо от того, в какой позиции строки — в начале, в середине или в конце.
Результат выглядит следующим образом и соответствует "Bayswater", "Table Bay" и "Bombay" из списка мест:
Многострочные и списковые сравнения
Пока что наши сравнения касались лишь нескольких слов. Использование difflib Python также предлагает способ сравнения многострочных строк и целых списков слов. Вывод может быть настроен в соответствии с различными форматами инструментов сравнения.
Следующий пример ( листинг 5 ) сравнивает две многострочные строки построчно и показывает как удаления, так и добавления. После инициализации Differ в строке 12 сравнение выполняется с помощью compare() в строке 15. Результат выводится на стандартный вывод (строка 18).
Запуск сценария создает результат, как показано ниже. Строки с удалениями обозначаются — тогда как строки с добавлением начинаются со знака + Кроме того, строки с изменениями начинаются с вопросительного знака. Изменения обозначаются ^ в соответствующей позиции. Линии без индикатора все те же.
Заключение
В этой статье вы узнали о различных способах сравнения строк в Python. Мы надеемся, что этот обзор поможет вам эффективно программировать в жизни вашего разработчика.
# Логические выражения
Все люди знакомые с математикой знают и понимают, что такое математическое выражение. Мы часто пользуемся математическими выражениями в уме, хотя можем и не задумываться о терминологии. Например при подсчете сколько стоит купить товар или сколько времени затратили на дорогу.
Математические выражения оформленные в виде кода могут выглядеть следующим образом:
Результатом выполнения математического выражения будет вычисление числа. В примере выше строки с математическими выражениями содержат дополнительные комментарии: результат вычисления и указание, что это математическое выражение.
# Логические выражения
B реальной жизни мы соглашаемся с каким-либо утверждением или отрицаем его. Например, если вам скажут, что сумма чисел 3 и 5 больше 7, вы согласитесь, скажете: «Да, это правда». Если же кто-то будет утверждать, что сумма трех и пяти меньше семи, то вы расцените такое утверждение как ложное.
Логические выражения похожи по своему виду и принципу работна на математические выражения у них лишь два основных различия:
- математические операторы (+, -, *, / и т.п.) заменены логическими операторами (<, >, ==, != и т.п.)
- результатом вычисления логического выражения будет True или False , а не число.
- Математические примеры: 5 + 7 = 12
- Логические примеры: 5 > 7 = False
Логические выражения оформленные в виде кода могут выглядеть следующим образом:
Логическое выражение — это выражение результатом которого является True или False . Еще логические выражения называют также булевы выражения в честь ученого Джордж Буль, который основал булеву алгебру (алгебру логики).
Например, выражение 4 > 5 является логическим, так как его результатом является либо правда, либо ложь. Выражение 4 + 5 не является логическим, так как результатом его выполнения является число.
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
В функциях print записаны выражения, определите их тип и запишите в место троеточия . буквы:
- L для логических выражений,
- M для математических выражений:
# Сравнение чисел
Основное правило сравнения помогает избежать и/или исправить наиболее частые ошибки:
Соблюдайте совпадение типов
Тип сравниваемых значений всегда должен быть одинаковый!
Допустимо сравнение разных типов чисел:
- integer — int()
- дробные числа или числа с плавающей точкой float — float()
Чтобы узнать тип объекта можно воспользоваться функцией type() :
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
В функциях print записаны выражения, определите какие из выражений составлены правильно, а какие нет. Неправильные выражения закомментируйте:
# Операторы сравнения чисел
Говоря на естественном языке мы обозначаем сравнения словами «равно», «больше», «меньше». В языках программирования используются специальные знаки, подобные тем, которые используются в математике:
| Название | Оператор | Синтаксис | Вывод |
|---|---|---|---|
| равно | == | 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 . |
Присваивание и сравнение – разные операции. Не путайте операцию присваивания с операцией сравнения:
- операцию присваивания значения переменной, c одиночным знаком «равно» = : (value = 15),
- операцию сравнения — два знака «равно» == : value == 15 # True
# Простые логические выражения
Простыми логическими выражениями можно, условно, считать выражения, в которых сравнение происходит между двумя значениями и используется соответственно один оператор сравнения:
В данном примере выражение c = a == b состоит из двух подвыражений. Сначала происходит сравнение (==) переменных a и b. После этого результат логической операции присваивается переменной c. Выражение a, b, c просто выводит значения переменных на экран.
# Упражнения
При работе с водимыми данными не забывайте о преобразовании типов. Все что вводит пользователь — это строка! А в упражнениях предполагается работа с числами. Функции преобразования в числа: int() и float() .
Самостоятельно, без запуска кода, решите логические примеры, т.е. что выведет функция print() :
Сверьте Ваши ответы c ответами компьютера.
Возьмите за основу предыдущий код задания, измените значения переменных: a = — 15, b = 12, c = 8. Решайте самостоятельно все логические выражения и запустив код, сверьте ваши ответы с ответами компьютера.
Напишите программу, которая спрашивает у пользователя: "What year were you born?" И выводит True — если год указан верно, и False — если год указан не верно. Верным можно считать любое положительное число.
Примеры работы программы:
Напишите программу, которая спрашивает у пользователя: "What year is it?" И выводит True — если год указан верно, и False — если год указан не верно. Проверку сравнения проведите с текущим годом.
Примеры работы программы:
Напишите программу, которая запрашивала у пользователя два числа и выводила бы True или False в зависимости от того, больше первое число второго или нет.
Напишите программу, которая запрашивает у пользователя цену мороженного, сколько штук он хочет купить и сколько у него наличных. Если наличных средств достаточно, программа должна выводить True , иначе False .
Напишите программу, которая просит пользователя ввести любые положительное и отрицательное числа. Далее Выводит примеры: с заданными числами и спрашивает чему они равны. Если пользователь вводит правильное решение то выводиться ответ True , иначе False .
# Сравнение строк
Основное правило сравнения помогает избежать и/или исправить наиболее частые ошибки:
Обязательное совпадение типов
Тип сравниваемых значений всегда должен быть одинаковый!
# Операторы сравнения строк
| Оператор | Синтаксис | Вывод |
|---|---|---|
| == | 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 в противном случае. |
# Простые логические выражения
Сравнение строк происходить не столь очевидным способом как числа. Для примера предлагаю подумать над следующими выражениями:
Правила сравнения строк:
- Сравнения строк, т.е. символов содержащихся в кавычках (даже если это цифры), происходит посимвольно.
- Каждый символ закодирован цифровым порядковым номером, и чем выше номер символа, тем он больше, причем для разных букв (заглавных или строчных, русских или английских) разные порядковые номера.
- Если начальные символы совпадают, то сравнение происходит по следующему символу.
Проверку по-символьно происходит следующим образом:
- берется первый символ каждой строки, сравнивается, если символы не равны вычисляется результат True или False . Иначе сравнение переключается к следующему символу.
- берется следующий символ каждой строки, сравнивается, если символы не равны вычисляется результат True или False . Иначе происходит сравнение по следующему символу.
- Если в одной строке ещё остались символы, а в другой закончились, то будет произведено сравнение символа с пустотой. Любой символ больше пустоты, и даже пробел больше пустоты. Результатом будет True или False в зависимости от оператора сравнения.
Пошаговое выполнение логического выражения можно представить следующим образом:
Для общего ознакомления с некоторым объемом символов можно запустить следующий код:
Результат выполнения будет примерно следующим, троеточием заменены не которые малопонятные символы:
Данный пример вывода необходим для понимания сравнения строк посимвольно.
Представим числовую ось например от -20 до 20. Мы понимаем, что одно число больше другого, потому что оно расположено правее от числа, с которым сравнивается. И число меньше, если стоит левее числа с которым оно сравнивается.
Если выведенную последовательность символом представить как числовую ось, то вес символа будет определяться по правилу: чем правее символ находится тем больше он весит.
Для примера можно запустить следующий код и осознать правильность его выполнения:
Данный пример кода специально приведен с результатом True , для простоты понимания.
Для наглядности веса символа и его отображения можно запустить следующий код:
Результат выполнения будет следующим:
Вывод до 1105 символа.
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите ваши варианты ответа (True, False) заданные:
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите символы в результате сравнения которых ответ должен совпадать заданными:
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите символы в результате сравнения которых ответ должен совпадать заданными:
# Сравнение строк операторам "in"
Сравнение строк с использованием оператора in достаточно простая и при этом объемная проверка.
Особенность in заключается в том, что при помощи него можно производить общую проверку для всей строки не по отдельным символам. Т.е. есть возможность проверки наличия символа или строки в другой строке:
Таким образом можно реализовать проверку наличия слова в строке или другого набора символов в строке.
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите ваши варианты ответа (True, False) заданные:
Напишите напишите программу, которая спрашивает "What day of week is it?" и выводит True — если название введенного дня существует, и False — если такого дня нет. Реализовать необходимо корректность проверки для любого типа ввода (sunday, Sunday, SUNDAY, SunDay и т.п) для любого дня недели.
Напишите напишите программу, которая спрашивает "What month is your vacation?"
- выводит "Why not" при условии True — если название введенного месяца существует,
- выводит "Incorrect input, no such month" при условии False — если такого месяца нет.
- реализовать необходимо корректность проверки для любого типа ввода (May, mAY, MAY и т.п) для любого месяца.
Напишите напишите программу, которая просит "Enter your login to register: "
- выводит "Congratulations! You are registered." при условии True — если такого имени нет.
- выводит "This login already exists" при условии False — если название введенного имени существует,
- реализовать необходимо корректность проверки для любого типа ввода (Log, lOG, LOG и т.п) для любого имени.
- строка с исходными именами может быть следующая: "log, login, pass, password" и т.п.
# Методы проверки строк
Сравнение строк происходит посимвольно уложняет их проверку, если проводить сравнение с числами. Усложнение заключается в том, чтобы правильно проверить строку необходимо применять циклы для перебора всех символом и отдельно проверки каждого. Но есть еще один простой способ полной проверки строк — это использование методов.
Пример определения, что строка является числом можно сделать двумя способами:
- длинное решение состоит из 6 строк,
- короткое решение в одну сроку с использованием метода .isdigit()
В коде выше можно поменять значения строки "485" на любую другую строку, и убедиться что итог решений одинаков.
Методы — это функции обработки принадлежащие определнному классу и/или объекту. Это команды со скобочками, которые пишутся после точки, после обращения к объкту: object.method(params) . Несколько строчек примеров приведены ниже:
Вспомним, что строка это объект, и это значит что у неё есть методы, которые не только могут изменять сам объект, но и сообщить информацию о нем самом.
В английском языке общие вопросы, на которые отвечают да/нет выглядят следующим образом:
- Is it a cat?
- Is this a boy?
- Is that a car?
Общее в этих вопросах то, что все они начинаются со слова 'is' . Вот и в программировании функции и методы, которые возвращают True/False (сообщаю информацию об объекте "да/нет"), принято именовать со слова is. () .
Чтобы увидеть все параметры проверки строки достаточно обратиться к строке, поставить точку и напечатать 'is': "".is — в выпадающей подсказке выводятся методы пренадлежащие к данному объекту и возвращающие True/False .
# Проверка строк методами без параметров
.isalnum() : определяет, являются ли все символы в данной строке буквенно-цифровыми, то есть только алфавитами и цифрами. Если да, то возвращает True , иначе возвращает False . Если между символами есть пробел, возвращается False .
.isalpha() : определяет, все ли символы в данной строке являются буквами. Если да, вернет True , иначе False . Если между символами есть пробел, возвращается False .
.isdigit() : определяет, все ли символы строки являются цифрами и есть хотя бы один символ. Если да, вернет True , иначе False . Если между символами есть пробел, возвращается False .
.isdecimal() : определяет, все ли символы в данной строке являются десятичными. Если да, то возвращает True , иначе возвращает False . Если между ними есть пробел, возвращается False .
.islower() : определяет, все ли символы в данной строке находятся в нижнем регистре (строчные). Если да, то возвращает True , иначе возвращает False .
.isnumeric() : определяет, все ли символы в данной строке являются числовыми, то есть числами и показателями степени, которые могут быть дробными. Если да, то возвращает True , иначе возвращает False .
.isprintable() : определяет, можно ли распечатать все символы в данной строке. Если да, то возвращает True , иначе возвращает False . Такие символы, как « \t » или « \n », не печатаются.
.isspace() : определяет, все ли символы в данной строке являются пробелами. Если да, то возвращает True , иначе возвращает False .
.istitle() : определяет, следует ли строка набору правил, чтобы ее можно было квалифицировать как заголовок. Если да, то возвращает True , иначе возвращает False .
.isupper() : определяет, все ли символы в данной строке находятся в верхнем регистре (заглавные). Если да, то возвращает True , иначе возвращает False .
# Проверка строк методами c параметрами
.startswith(prefix, start=None, end=None) : — вернет True , если строка начинается с указанной части стоки (префикса), иначе возвращает False .
- prefix — обязательный параметр — символ или часть строки, которая служит проверкой начала строки;
- start не обязательный параметр, указывает с какого по счету символа начинать проверку строки;
- end не обязательный параметр, указывает на каком по счету символе закончить проверку строки.
.endswith(suffix, start=None, end=None) : — вернет True , если строка заканчивается указанной частью строки (суфиксом), иначе возвращает False .
- suffix — обязательный параметр — символ или часть строки, которая служит проверкой окончания строки;
- start не обязательный параметр, указывает с какого по счету символа начинать проверку строки;
- end не обязательный параметр, указывает на каком по счету символе закончить проверку строки.
# Упражнения
Напишите программу, которая будет определять характеристики строки. Программа запрашивает на ввод строку и далее определяет соответствие строки указанным параметрам:
- состоит из цифр и разных букв,
- только из разных букв,
- только из цифр,
- из строцных букв,
- из прописных букв,
- из пробелов,
- строка заголовок
Пример работы программы может быть следующим:
Напишите программу, которая будет определять характеристики строки. Программа запрашивает на ввод строку и далее определяет не соответствие строки указанным параметрам:
- не состоит из цифр и разных букв,
- не состоит из разных букв,
- не только из цифр,
- не из строцных букв,
- не из прописных букв,
- не из пробелов,
- не строка заголовок
Пример работы программы может быть следующим:
Напишите программу, которая будет определять характеритику строки. Использовать нужно методы обработки и провеки строк. Пользователя просят вести строку, далее происходит проверка символов:
- наличие только из цифр (numbers),
- содержит большие буквы (upper case),
- содержит маленькие букв (lower case),
- наличие только из пробелов (space only),
- строка содержит разные символы (different symbols, len),
- строка пустая (empty)
В итоге выводится результат характеристики введеной строки.
Пример работы программы:
Другой пример работы программы:
Напишите программу, которая будет определять отсутствующие элеменый в строке. Использовать нужно методы обработки и провеки строк. Пользователя просят вести строку, далее происходит проверка символов:
- не состоит из цифр (numbers),
- не содержит большие буквы (upper case),
- не содержит маленькие букв (lower case),
- не состоит только из пробелов (space only)
В итоге выводится результат характеристик несоотвествия введеной строки.
Пример работы программы:
Другой пример работы программы:
# Преобразование к логическому типу
Нам известны три типа данных – целые и вещественные (дробные) числа, и также строками. Новый четвертый – логический тип данных (тип bool ). Его также называют булевым. У этого типа всего два возможных значения: True (правда) и False (ложь):
Здесь переменной a было присвоено значение True , после чего с помощью встроенной в Python функции type() проверен ее тип. Интерпретатор сообщил, что это переменная класса bool . Понятия «класс» и «тип данных» в данном случае одно и то же. Переменная b также связана с булевым значением.
В программировании False обычно приравнивают к нулю, а True – к единице. Чтобы в этом убедиться, можно преобразовать булево значение к целочисленному типу:
Возможно и обратное. Можно преобразовать какое-либо значение к булевому типу:
И здесь работает правило: всё, что не 0 и не пустота , является правдой: True .
# Инверсия — not
В Python есть унарный логический оператор not — отрицание. Он превращает True в False , а False в True . Унарный он потому, что применяется к одному выражению, стоящему после него, а не справа и слева от него как в случае бинарных and и or .
Выражение у < 15 возвращает True . Применив оператор not , получаем False .
Число 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 and y < 15 , то оно также вернуло бы False. Однако сравнение y < 15 не выполнялось бы интерпретатором, так как его незачем выполнять. Ведь первое простое логическое выражение x > 8 уже вернуло ложь , которая, в случае оператора and , превращает все выражение в ложь .
В случае с оператором or второе простое выражение проверяется, если первое вернуло ложь , и не проверяется, если уже первое вернуло истину . Так как для истинности всего выражения достаточно единственного True , неважно по какую сторону от or оно стоит.
# Упражнения
Напишите следующую программу:
- Присвойте двум переменным любые числовые значения.
- с помощью оператора and составьте два сложных логических выражения, одно из которых дает истину , другое – ложь .
- используя оператор or составьте два сложных логических выражения, одно из которых дает истину , другое – ложь .
Составьте программу сравнения строковых переменных:
- с пятью простыми разными логическими выражениями;
- с четырьмя сложными логическими выражениями;
- объясните результат.
Напишите программу, которая спрашивает у пользователя: "What day of month is it?" И выводит True — если день указан верно, и False — если день указан не верно. Указанный день считается верным, если число от 1 до 31.
Напишите программу, которая спрашивает у пользователя: "What number of month were you born?" И выводит True — если месяц указан верно, и False — если не верно. Указанный месяц считается верным, если число от 1 до 12.
Как сравнить строки в Python? Операторы сравнения строк
Строка в Python представляет собой набор символов, находящихся в кавычках. При этом сравнение строк отличается от сравнения чисел и имеет свои особенности. В этой статье мы кратко и простым языком расскажем о сравнении строк в Python и посмотрим, какие операторы для этого есть, и как эти операторы используются.
Основные операторы сравнения в Python
Итак, в языке программирования Python для сравнения строк используют следующие операторы:
- оператор < , «меньше»;
- оператор <= , «меньше или равно;
- оператор == , «равно»;
- оператор != , «не равно»;
- оператор > , «больше»;
- оператор >= , «больше или равно».

Использование оператора «больше/меньше»
Ниже вы увидите простейший пример сравнения строк в Python с помощью соответствующих операторов: > и < . Давайте сравним строки со словами banana и apple:
Так как буква «a» находится перед «b», слово apple будет находиться перед словом banana, что логично (то есть banana больше, чем apple). Однако всё сложнее, чем может показаться на первый взгляд. Давайте для наглядности сравним, равны ли слова Apple и apple:
Мы увидим отсутствие равенства, а всё потому, что в Python одинаковые буквы, имеющие разный регистр, считаются разными символами, и компьютер их различает по присвоенным им уникальным значениям.
Что касается нашей ситуации, то здесь латинская «А» имеет значение 65, в то время как значение строчной «а» равно 97.
Кстати, если хотите узнать уникальное значение какого-нибудь символа, используйте функцию ord:
При сравнении символов или строк, Python конвертирует символы в их соответствующие порядковые значения, после чего сравнивает слева направо.
Существует функция chr, преобразовывающая порядковое значение в символ. Пример:
Например, кириллическая А соответствует значению 1040. Есть свои значения у цифр, а также вспомогательных знаков, включая «?», «=», пробел.
В принципе, вы всегда можете выполнить сравнение строк в Python, предварительно конвертировав строки в один формат, к примеру, в нижний регистр (используем метод lower ):
Применение оператора «равенство»
Мы можем проверить, равны ли строки, посредством оператора == :
Естественно, строки не являются равными, т. к. выполняется точное сравнение в Python. Неравными будут и те строки, которые содержат одинаковые, но переставленные местами символы. В последнем случае есть выход: превратить нашу строку в список, отсортировать, сравнить и вывести содержимое:
Использование оператора «не равно»
Оператор != выполняет проверку неравенства:
Разумеется, результат True, ведь abc не равно zxc.
Применение операторов «больше или равно/меньше или равно»
Если при использовании оператора <= одна строка будет меньше или равна другой, мы получим True.