Оператор выбора в python (if else)
Содержание:
- Логические выражения и логический тип данных
- Как оценивается?
- Условные операторы if, elif, else
- Что такое функция в Python?
- Перегрузка логического оператора
- Побитовая перегрузка оператора
- Отрицание логического значения в Python С помощью оператора not
- Классический алгоритм Евклида
- Генерация случайных чисел (модуль random)
- Примеры
- Цикл while в Python
- Основные операторы
- Оператор else if
- Оператор присваивания Python
- Перебирайте список в Python С помощью Map и Lambda
- Оператор возврата return
- Побитовые операторы
- Способы Итерации по списку в Python
Логические выражения и логический тип данных
Часто в реальной жизни мы соглашаемся с каким-либо утверждением или отрицаем его. Например, если вам скажут, что сумма чисел 3 и 5 больше 7, вы согласитесь, скажете: «Да, это правда». Если же кто-то будет утверждать, что сумма трех и пяти меньше семи, то вы расцените такое утверждение как ложное.
Подобные фразы предполагают только два возможных ответа – либо «да», когда выражение оценивается как правда, истина, либо «нет», когда утверждение оценивается как ошибочное, ложное. В программировании и математике если результатом вычисления выражения может быть лишь истина или ложь, то такое выражение называется логическим.
Например, выражение 4 > 5 является логическим, так как его результатом является либо правда, либо ложь. Выражение 4 + 5 не является логическим, так как результатом его выполнения является число.
На позапрошлом уроке мы познакомились с тремя типами данных – целыми и вещественными числами, а также строками. Сегодня введем четвертый – логический тип данных (тип ). Его также называют булевым. У этого типа всего два возможных значения: True (правда) и False (ложь).
>>> a = True >>> type(a) <class 'bool'> >>> b = False >>> type(b) <class 'bool'>
Здесь переменной a было присвоено значение , после чего с помощью встроенной в Python функции проверен ее тип. Интерпретатор сообщил, что это переменная класса . Понятия «класс» и «тип данных» в данном случае одно и то же. Переменная b также связана с булевым значением.
В программировании обычно приравнивают к нулю, а – к единице. Чтобы в этом убедиться, можно преобразовать булево значение к целочисленному типу:
>>> int(True) 1 >>> int(False) 0
Возможно и обратное. Можно преобразовать какое-либо значение к булевому типу:
>>> bool(3.4) True >>> bool(-150) True >>> bool(0) False >>> bool(' ') True >>> bool('') False
И здесь работает правило: всё, что не 0 и не пустота, является правдой.
Как оценивается?
Вы можете подумать, что, поскольку есть Символ, это может быть заявление о назначении.
Однако это не регулярное заявление о назначении. Это называется Увеличенное заявление о назначении Отказ
В регулярном заявлении о назначении правая сторона оценивается в первую очередь, прежде чем это назначить его левой стороне.
# 2 + 3 is evaluated to 5, before assigning to a a = 2 + 3
Однако в этом дополненном заявлении о назначении левая сторона оценивается первой, прежде чем оценивать правую сторону. Это сделано, чтобы обновленное значение можно было записать на левую сторону на месте Отказ
# Reads the value of a, before adding 3 to it in-place a += 3
Это единственный способ для увеличения переменной, не используя заявление о переназначении, как Отказ Но здесь, в целом, опция в любом случае не имеет значения, поскольку переводчик оптимизирует код во время выполнения.
Условные операторы if, elif, else
И так есть следующие операторы, которые и определяют выполнения определённых условий в программировании на Python. Дословный перевод с английского этих операторов даёт конкретное их назначение:
- if — если
- elif (от else if) — если ещё
- else — иначе
Теперь давайте приведём пример, как эти операторы можно использовать, создадим небольшую программку, которая будет нам сообщать какой сегодня день в зависимости от температуры:
temperature = 30 # создадим переменную, в которой будем устанавливать температуру, установим 30 градусов if temperature > 25 # прописываем условие, которое определяет, какой сегодня день, в данном случае указываем, что если температура больше 25 градусов, то программа выведет сообщение, что сегодня жарко print("Сегодня очень жаркий день") # Выводим результат else # иначе выводим, что день не очень жаркий print("Сегодня не очень жаркий день")
Теперь если поменять значение переменной «temperature» ниже 25 градусов, то будет выводить сообщение о не очень жарком дне.
Теперь сделаем пример, когда можно использовать несколько условий, и лучшим примером будет создание простого калькулятора. При этом рассмотрим как можно вводить данные в Python. В этом примере будем вводить числовые значения и операцию, которая будет совершать арифметические действия над введёнными цифрами.
И так, для того, чтобы вводить данные в Python, нужно использовать оператор input(), то есть нам необходимо сделать переменную и вставить в неё функцию ввода данных.
# вводим значения и операцию над ними first_number = int(input("Введите первое значение: ")) # Создаём переменную для первого числа, конвертируем значение в число int() operation = input("Вводим операцию: ") # Переменная для ввода арифметической операции second_number = int(input("Введите второе значение: ")) # Создаём переменную для второго числа, конвертируем значение в число int() # Логика операций if operation == "*" # Если выбрали операцию умножения, то выполняем соответствующее арифметическое действие result = first_number * second_number # создаём переменную для результата и прописываем умножение двух введённых чисел elif operation == "+" # или если же выбрали операцию сложения, то выполняем соответствующее арифметическое действие result = first_number + second_number # и также прописываем для переменной результата соответствующее арифметическое действие elif operation == "-" # для вычетания result = first_number - second_number elif operation == "/" # для деления result = first_number second_number # Выводим результат print(first_number, operation, second_number, "=", result)
Вот таким способом мы создали простой калькулятор, где пользователь вводит значения и тип арифметической операции над ними и получает результат.
Что такое функция в Python?
Функции в Python – это организованный блок многократно используемого кода, который можно вызывать при необходимости.
Функция содержит набор программных операторов, заключенных в {}. Функцию можно вызывать несколько раз, чтобы обеспечить возможность повторного использования и модульность программы Python.
Функция помогает программисту разбить программу на более мелкие части. Она очень эффективно организует код и избегает повторения кода. По мере роста программы функция делает ее более организованной.
Python предоставляет нам различные встроенные функции, такие как range() или print(). Пользователь также может создавать свои функции, которые можно назвать пользовательскими функциями.
В основном есть два типа функций:
- Функции, определяемые пользователем. Определяются пользователем для выполнения конкретной задачи.
- Встроенные функции. Это те функции, которые предварительно определены в Python.
В этом руководстве мы обсудим функции, определяемые пользователем.
Перегрузка логического оператора
Логические операторы Python работают с логическими значениями. По умолчанию логическое значение объекта — True. Если объект — None или False, то значение — False. Мы можем предоставить реализацию __bool __() для изменения логических значений объекта по умолчанию.
class Data: def __init__(self, i): self.id = i def __bool__(self): return self.id % 2 == 0 d1 = Data(6) d2 = Data(4) print(bool(Data(3)) and bool(Data(4))) # False
Приведенный выше фрагмент кода напечатает False, потому что логическое значение Data (3) — False.
Если мы удалим реализацию функции __bool __(), оба значения объектов данных будут True и будут напечатаны True.
Побитовая перегрузка оператора
Существуют различные определенные методы перегрузки побитовых операторов в Python.
Побитовый оператор | Syntax |
---|---|
& | __and __ (self, other) |
| | __или __ (self, other) |
^ | __xor __ (self, other) |
~ | __invert __ (self) |
<< | __lshift __ (self, other) |
>> | __rshift __ (self, other) |
class Operate(): def __init__(self, x): self.x = x def __and__(self, res): print("Bitwise AND operator overloading Example") if isinstance(res, Operate): return self.x res.x else: raise ValueError("Must belong to Operate Class") if __name__ == "__main__": a = Operate(6) b = Operate(4) print(ab)
Вывод:
Bitwise AND operator overloading Example 4
Отрицание логического значения в Python С помощью оператора not
Если вы не знаете о ключевом слове not, позвольте мне объяснить, что ключевое слово not является логическим оператором в Python. Особенность оператора not заключается в том, что он возвращает противоположное значение оператора. Это означает, что возвращаемое значение оператора not будет Истинным, если операторы не являются True; в противном случае он вернет False.
Давайте рассмотрим работу на примере.
Выход:
Приведенный выше пример прямолинейен для отрицания значения или выражения. Как видите, мы присвоили переменной значение True. После этого мы напечатали его, и наш вывод будет True, как и ожидалось. Но в следующей строке мы тоже использовали оператор not внутри функции print. Итак, на этот раз мы получаем вывод как False. Следовательно, мы успешно отрицаем логическое выражение с помощью оператора not в Python.
Классический алгоритм Евклида
Этот вид алгоритма Евклида является самым простым, он был придуман более 1300 лет назад. С появлением электронно-вычислительных машин расширились возможности по применению алгоритма Евклида, возникли новые более эффективные его реализации.
Алгоритм состоит из определенного количества шагов, количество которых зависит от размера входных данных.
Сложность алгоритма выражается функцией O(h2), где h – это количество десятичных цифр в наименьшем числе, наибольший делитель которых ищется алгоритмом.
Реализация на Python
Существует несколько реализаций классического алгоритма Евклида, которые основаны на использовании различных операторов и возможностей языка Python (остаток от деления, вычитание, рекурсия). Эти реализации отличаются незначительно, сильные различия в эффективности наблюдаются только при специфических входных данных.
Реализация с помощью остатка от деления
Идея такой реализации достаточна проста, алгоритм уменьшает числа до тех пор, пока одно из них не станет равно нулю, а другое искомому делителю. Для этого используется цикл , в котором большее число делится на меньшее и становится равным остатку от деления. Таким образом, функция вернёт наибольший общий делитель (НОД) её двух аргументов.
Код алгоритма Евклида на Python:
def gcd_rem_division(num1, num2): while num1 != 0 and num2 != 0: if num1 >= num2: num1 %= num2 else: num2 %= num1 return num1 or num2
Так как одно из чисел всегда становится равным нулю, то функция всегда будет возвращать делитель, благодаря логическому оператору или, который используется вместе с .
В каждой новой итерации большее число становится меньшим и наоборот. Возьмём числа 168 и 105 и распишем работу программы вручную:
- 1 итерация:
168 % 105 = 63
105 - 2 итерация:
63
105 % 63 = 42 - 3 итерация:
63 % 42 = 21
42 - 4 итерация:
42 % 21 = 0
21
После 4 итерации алгоритм завершает свою работу, так как одно из чисел равно нулю, второе же число равно наибольшему общему делителю, в нашем случае это 21. Проверим работу программы:
a = gcd_rem_division(168, 105) print(a) # Выведет 21
Реализация с помощью вычитания
Идея этой реализации схожа с предыдущей, однако здесь числа уменьшаются до нуля и делителя с помощью вычитания.
Код вычисления НОД на Python:
def gcd_subtraction(num1, num2): while num1 != 0 and num2 != 0: if num1 >= num2: num1 -= num2 else: num2 -= num1 return num1 or num2
Также распишем работу программы с числами 168 и 105:
- 1 итерация:
168 — 105 = 63
105 - 2 итерация:
63
105 — 63 = 42 - 3 итерация:
63 — 42 = 21
42 - 4 итерация:
21
42 — 21 = 21 - 5 итерация:
21 — 21 = 0
21
Видно, что до 4 итерации результаты работы обоих версий алгоритма полностью совпадают. Отличия начинаются, когда в 4 итерации вместо 0 и 21, получается числа 21 и 21, из-за чего в алгоритме с вычитанием добавляется дополнительная итерация, но это не значит, что он работает менее эффективнее.
Проверка работы программы:
a = gcd_subtraction(168, 105) print(a) # Выведет 21
Реализация с помощью рекурсии
Суть алгоритма схожа с реализацией через остаток от деления, однако вместо цикла используется рекурсия.
Код программы на Python нахождения НОД с помощью рекурсии:
def gcd_recursion(num1, num2): if num1 == 0: return num2 return gcd_recursion(num2 % num1, num1)
Первое, что стоит заметить, на ноль проверяется только
Важно понять, что числа постоянно меняются местами. В качестве первого числа в рекурсивный вызов функции передаётся , вспомним 4 итерацию в алгоритме через остаток от деления:
4 итерация:
42 % 21 = 0 — num1
21 — num2
То есть рекурсивный алгоритм проверит число на ноль, получит True и вернёт значение , которое и будет являться наибольшим общим делителем.
Особенности алгоритма: простые числа
Если два переданных числа не имеют общих делителей, то алгоритм возвращает единицу. Действительно, ведь каждое число делится на единицу. Например, числа 35 и 18 не имеют общих делителей:
- 35 = 5 * 7 * 1
- 18 = 2 * 9 * 1 = 3 * 6 * 1
Алгоритм будет возвращать единицу, если оба переданных числа являются простыми и не равны друг другу. Простые числа делятся только на себя и на единицу.
Если алгоритм получает на вход одно простое число, это не значит, что он обязательно вернет единицу:
- 5 и 15: число 5 является простым, а 15 — нет, алгоритм вернет наибольший общий делитель 5.
- 5 и 21: число 5 — простое, а 21 — нет, будет возвращена единица, потому что 21 не делится на 5.
- 3 и 21: число 3 — простое, 21 — нет, будет возвращено число 3, потому что 21 делится на 3.
Исходя из этого, можно сказать, что алгоритм Евклида со 100%-ой вероятностью возвращает единицу в том случае, если на вход переданы два простых числа не равных друг другу.
Генерация случайных чисел (модуль random)
Python порождает случайные числа на основе формулы, так что они на самом деле не случайные, а, как говорят, псевдослучайные.
Модуль random позволяет генерировать случайные числа и имеет большое множество важных для практики функций. Рассмотрим основные функции:
random.random() - случайное число от 0 до 1.
random.randint(A, B) - случайное целое число N, A ≤ N ≤ B.
random.shuffle(list) перемешивает список случайным образом
random.choice(list) возвращает один случайный элемент из списка
Примеры
Функцияrandom.random()случайное число от 0 до 1.
import randomnumber = random.random() # значение от 0.0 до 1.0print(number)number = random.random() * 100 # значение от 0.0 до 100.0print(number)
Функция random.randint(A, B) — случайное целое число N, A ≤ N ≤ B
import randomnumber = random.randint(20, 35) # значение от 20 до 35print(number)
функция random.shuffle(list) перемешивает список случайным образом
import randomnumbers = # списокrandom.shuffle(numbers)print('numbers shuffle:',numbers)
Результат работы программы:
numbers shuffle:
функция random.choice(list) возвращает один случайный элемент из списка
numbers = random_number = random.choice(numbers)print('random_number:', random_number)
Цикл while в Python
Цикл while в Python используется во многих программах. Он позволяет выполнять программу пока остается истинным условие. Приведем пример перебора числовой последовательности в заданном диапазоне.
>>> number = 1 # присваиваем начальное значение переменной
>>> while number <= 7: # запускаем цикл при условии значение number <=7
… print(number) # выводим значение number при каждом цикле
… number += 1 # после каждого цикла увеличиваем значение на 1
…1
2
3
4
5
6
7
Вначале присваиваем значение переменной number. Затем запускаем цикл while до тех пор, пока значение переменной number не будет больше 7. При каждом проходе цикла выводим значение number и затем увеличиваем его на 1. Как только значение number станет больше 7 цикл прекращается.
Основные операторы
Оператор
Краткое описание
+
Сложение (сумма x и y)
—
Вычитание (разность x и y)
*
Умножение (произведение x и y)
Деление
Внимание! Если x и y целые, то результат всегда будет целым числом! Для получения вещественного результата хотя бы одно из чисел должно быть вещественным. Пример: 40/5 → 8, а вот 40/5.0 → 8.0
=
Присвоение
+=
y+=x; эквивалентно y = y + x;
-=
y-=x; эквивалентно y = y — x;
*=
y*=x; эквивалентно y = y * x;
/=
y/=x; эквивалентно y = y / x;
%=
y%=x; эквивалентно y = y % x;
==
Равно
!=
не равно
>
Больше
=
больше или равно
Часть после запятой отбрасывается
4 // 3 в результате будет 125 // 6 в результате будет 4
**
Возведение в степень
5 ** 2 в результате будет 25
and
логическое И
or
логическое ИЛИ
not
логическое отрицание НЕ
Оператор else if
Часто нам нужна программа, которая оценивает более двух возможных результатов. Для этого мы будем использовать оператор else if, который указывается в Python как elif. Оператор elif или else if выглядит как оператор if и оценивает другое условие.
В примере с балансом банковского счета нам потребуется вывести сообщения для трех разных ситуаций:
- Баланс ниже 0.
- Баланс равен 0.
- Баланс выше 0.
Условие elif будет размещено между if и оператором else следующим образом:
if balance < 0: print("Balance is below 0, add funds now or you will be charged a penalty.") elif balance == 0: print("Balance is equal to 0, add funds soon.") else: print("Your balance is 0 or above.")
После запуска программы:
- Если переменная balance равна 0, мы получим сообщение из оператора elif («Balance is equal to 0, add funds soon»).
- Если переменной balance задано положительное число, мы получим сообщение из оператора else («Your balance is 0 or above»).
- Если переменной balance задано отрицательное число, выведется сообщение из оператора if («Balance is below 0, add funds now or you will be charged a penalty»).
А что если нужно реализовать более трех вариантов сообщения? Этого можно достигнуть, используя более одного оператора elif.
В программе grade.py создадим несколько буквенных оценок, соответствующих диапазонам числовых:
- 90% или выше эквивалентно оценке А.
- 80-89% эквивалентно оценке B.
- 70-79% — оценке C.
- 65-69% — оценке D.
- 64 или ниже эквивалентно оценке F.
Для этого нам понадобится один оператор if, три оператора elif и оператор else, который будет обрабатывать непроходные баллы.
Мы можем оставить оператор else без изменений.
if grade >= 90: print("A grade") elif grade >=80: print("B grade") elif grade >=70: print("C grade") elif grade >= 65: print("D grade") else: print("Failing grade")
Поскольку операторы elif будут оцениваться по порядку, можно сделать их довольно простыми. Эта программа выполняет следующие шаги:
- Если оценка больше 90, программа выведет «A grade». Если оценка меньше 90, программа перейдет к следующему оператору.
- Если оценка больше или равна 80, программа выведет «B grade». Если оценка 79 или меньше, программа перейдет к следующему оператору.
- Если оценка больше или равна 70, программа выведет «C grade». Если оценка 69 или меньше, программа перейдет к следующему оператору.
- Если оценка больше или равна 65, программа выведет «D grade». Если оценка 64 или меньше, программа перейдет к следующему оператору.
- Программа выведет «Failing grade», если все перечисленные выше условия не были выполнены.
Оператор присваивания Python
Следующие допущения переменная а 10, Ь является переменной величиной 20:
операторы | описание | примеров |
---|---|---|
= | Простой оператор присваивания | с = а + Ь а + Ь операция будет присвоить результат C |
+ = | Оператор присваивания Добавление | с + = а эквивалентно С = С + а |
— = | Оператор присваивания Вычитание | с — = а эквивалентно с = С — |
* = | Оператор присваивания Умножение | эквивалентно с * = а с = с * а |
/ = | Оператор присваивания Отдел | с / = а эквивалентно с = с / а |
% = | Оператор присваивания Modulo | C% = а эквивалентно С = С% а |
** = | Оператор присваивания Возведение | с ** = а эквивалентно С = С ** в |
// = | Возьмем оператор присваивания, делящееся | с // = а эквивалентно С = С // |
Следующий пример демонстрирует оператор присваивания всех операций Python:
#!/usr/bin/python # -*- coding: UTF-8 -*- a = 21 b = 10 c = 0 c = a + b print "1 - c 的值为:", c c += a print "2 - c 的值为:", c c *= a print "3 - c 的值为:", c c /= a print "4 - c 的值为:", c c = 2 c %= a print "5 - c 的值为:", c c **= a print "6 - c 的值为:", c c //= a print "7 - c 的值为:", c
Примеры вышеуказанного вывода:
1 - c 的值为: 31 2 - c 的值为: 52 3 - c 的值为: 1092 4 - c 的值为: 52 5 - c 的值为: 2 6 - c 的值为: 2097152 7 - c 的值为: 99864
Перебирайте список в Python С помощью Map и Lambda
Лямбда-функция-это анонимная функция в Python. С помощью лямбда-функции мы можем взять n количество аргументов, но будет только одно выражение. Сила лямбды лучше проявляется, когда вы используете их как анонимную функцию внутри другой функции.
Функция map() выполняет указанную функцию в итеративном режиме.
Синтаксис
Синтаксис лямбды
Здесь выражение будет выполнено, и результат будет возвращен. аргументы: может быть n аргументов числа.
Синтаксис функции map ()
функция | Требуемый. |
итерируемый | Требуемый. Последовательность списка, коллекции или объекта итератора. |
Объяснение
В приведенном выше примере мы использовали комбинацию функций lambda и map для итерации списка. Здесь lambda y:y предоставляется в качестве входной функции, а ‘n’ является вторым аргументом функции map (). Таким образом, функция map() передаст каждый элемент n в функцию lambda y:y и вернет элементы.
Оператор возврата return
Оператор return используется в конце функции и возвращает результат функции. Он завершает выполнение функции и передает результат туда, где функция вызывается. Оператор return не может использоваться вне функции.
Синтаксис:
return
Он может содержать выражение, которое оценивается, и значение возвращается вызывающей функции. Если оператор return не имеет выражения или не существует сам по себе в функции, он возвращает объект None.
Рассмотрим следующие примеры:
Пример 1.
# Defining function def sum(): a = 10 b = 20 c = a+b return c # calling sum() function in print statement print("The sum is:",sum())
Выход:
В приведенном выше коде мы определили функцию с именем sum, и у нее есть оператор c = a + b, который вычисляет заданные значения, а результат возвращается оператором return вызывающей функции.
Пример 2. Создание функции без оператора возврата
# Defining function def sum(): a = 10 b = 20 c = a+b # calling sum() function in print statement print(sum())
Выход:
None
В приведенном выше коде мы определили ту же функцию без оператора return, так как мы видим, что функция sum() вернула объект None вызывающей функции.
Побитовые операторы
Битовые операторы выполняют операции на двоичном (бит) представлении целых чисел.
Фон : Каждое целое число сначала написано как двоичное число, которое является последовательностью цифр 0 или 1. Например:
- 0 написано как “0”
- 1 написано как «1»
- 2 написано как «10»
- 3 написано как «11»
- 4 написан как «100»
- 5 написан как «101»
Затем побитовые операторы применяются на этих двоичных представлениях. Полученное двоичное число затем преобразуется обратно в целовое представление (десятичное число).
В следующей таблице мы использовали все биджирные операторы с переменными x y
>>> x = 4 # 100 >>> y = 5 # 101
В качестве комментария мы также предоставляем двоичное представление Для десятичного целого числа и Для десятичного целого числа Отказ
Оператор | Имя | Описание | Пример |
x, | |||
& | Побил и | Выполняет логическую и на битном основании | X & Y # B100 и B101. |
| | Покое ИЛИ | Выполняет логическую или операцию на битовой основе | х |. Y # B100 | B101. |
~ | Покое НЕТ | Выполняет логику не на битовой основе, инверсируя каждый бит, так что 0 становится 1 и 1 становится 0. Так же, как -x-1. | ~ X # -4-1 == -5 |
^ | Побитовые хорна | Выполняет логическую «эксклюзивную или» работу на битовой основе | x ^ y # b100 ^ b101 |
>> >> | Битовой правый сдвиг | Сдвиги двоичных левых операндов вправо по количеству позиций, указанных в правом операнде | X >> 2 # B100 |
<< | Побитовая левая смена | Сдвиги двоичных левых операнда слева от количества позиций, указанных в правом операнде | X << 2 # B100 |
Способы Итерации по списку в Python
В этом уроке мы подробно обсудим все 11 способов перебора списка в python, которые заключаются в следующем:
<сильный>1. Перебирайте список в Python, Используя For Loop2. Итерация по Списку в Python С Помощью While Loop3. Итерация по Списку в Python С Помощью Модуля Numpy4. Итерация по Списку в Python С Использованием Метода Enumerate5. Итерация по Списку в Python С Использованием Понимания списка6. Итерация по списку в Python С использованием цикла и диапазона7. Перебирайте список в Python С помощью Map и Lambda8. Перебирайте список в Python С помощью Iter() и Next()9. Перебирайте список в Python С Помощью zip()10. Перебирайте список в Python С помощью Itertools.Цикл11. Итерация по списку в Python с помощью Itertools Grouper