На прошлом уроке мы уже знакомились с булевым типом данных.
Переменная типа bool
может содержать только два значения: True или False, при чем это не строки, не числа, а именно понятия ложь и истина.
Для работы с булевыми переменными существует булева алгебра.
Существуют следующие логические операторы:
not означает НЕ, и, будучи поставленным перед типом bool, меняет его значение на обратное, т.е. not True
становится False
,not False
становится True
Далее приведена таблица, демонстрирующая работу операторов:
0 to 0 | 0 to 1 | 1 to 0 | 1 to 1 | |
---|---|---|---|---|
and | 0 | 0 | 0 | 1 |
or | 0 | 1 | 1 | 1 |
xor | 0 | 1 | 1 | 0 |
Во многих, если не во всех языках программирования существуют условия вида если - иначе, если - иначе. Код выглядит примерно следующим образом:
если (X mod 2 == 0):
число нечетное
иначе:
число четное
Операция mod - операция взятия остатка от деления.
Есть различные варианты использования оператора если
: просто если
, с использованием иначе
и с любым количеством иначе, если
между если
и иначе, если
.
Во многих языках программирования (С++, Java, PHP...) существуют тернарный оператор, т.е. специальный оператор условия, который возвращает один из двух результатов, в зависимости от того, выполняется его условие или нет. Выглядит он так:
сообщить (Время суток = 'утро') ? "Привет!" : "Пока!";
Тернарные операторы часто применяются, когда варианта всего два, так как такая запись короче аналогичного действия с если
. Однако, к сожалению, можно встретить связку нескольких если
и тернарных операторов, которую совершенно невозможно прочесть. Другими словами, это не необходимая вещь в языке и она может стать причиной нечитаемого текста.
Множество или сет (set) по сути - "контейнер", содержащий не повторяющиеся, уникальные элементы в случайном порядке. В этом определении упомянуты две основные особенности сетов - уникальность и отсутствие сортировки.
Уникальность - сет содержит только уникальные элементы, если добавлять в него дубликаты - они не добавляются, если перевести какую-то переменную с неуникальными данными в сет - дублирующие элементы будут удалены.
Отсутствие сортировки - элементы в сете находятся в неком хаотичном порядке.
Множества поддерживают перебор всех элементов (итерацию), добавление и удаление элементов, но в силу отсутствия сортировки не поддерживают индексацию и срезы.
Создание множеств:
м1 = множество([1, 2, 3, 4, 5, 6])
м2 = множество([5, 6, 7, 8, 9])
a = [1, 2, 3, 4, 5, 6, 5, 4, 3, 2]
вывести a
[1, 2, 3, 4, 5, 6, 5, 4, 3, 2]
м3 = множество(a)
вывести м3
([1, 2, 3, 4, 5, 6])
Множества поддерживают операции вычитания, объединения, пересечения:
м1 = множество([1, 2, 3, 4, 5, 6])
м2 = множество([5, 6, 7, 8, 9])
м1 - м2 # Разность множеств
([1, 2, 3, 4])
м1 | м2 # Объединение множеств
([1, 2, 3, 4, 5, 6, 7, 8, 9])
м1 & м2 # Пересечение множеств
([5, 6])
Можно добавить элемент в множество и удалить из множества элемент. В качестве параметра выступает сам элемент, поскольку индексов в множестве нет.
м1.добавить(7)
вывести м1
([1, 2, 3, 4, 5, 6, 7])
м1.удалить(1)
вывести м1
([2, 3, 4, 5, 6, 7, 8])
Множества принято визуализировать при помощи кругов Эйлера.
1. Разместить в кругах:
2. Нарисовать круги для заварного кофе:
3. Решить задачу: Все женщины - дочки, но не все женщины матери. Некоторые матери - бабушки. Нарисуйте внучек!
5. Разместить в кругах: Зайцы четвероногие, млекопитающие, хордовые, живородящие. Лебеди птицы, яцекладущие, хордовые. Утконосы четвероногие, яйцекладущие, млекопитающие.
5. Разместить в кругах: Всего Студентов 2000 Программистов 1500 Дизайнеров 300 Менеджеров 200 Фронтендщиков 1000 Бекендщиков 500 PHP программистов 200 JS программистов 1100 Java программистов 100
Доп. статьи:
Решания задач при помощи кругов Эйлера