Возведение в степень чисел

Содержание:

Что такое алгоритм KNN?

КНН – аббревиатура для к-ближайшего соседа. Это контролируемый алгоритм обучения машины. KNN в основном используется для классификации, а также регрессии.

KNN не предполагает какие-либо базовые параметры I.e. Это алгоритм.

Шаги, сопровождаемые алгоритмом KNN

  • Изначально он хранит тренировочные данные в окружающую среду.
  • Когда мы придумываем данные для прогнозирования, KNN выбирает K-самые одинаковые/аналогичные значения данных Для новой тестовой записи в соответствии с тренировочным набором данных.
  • Кроме того, выбор K-самых подобных соседей для новой тестовой точки выполнен с использованием Отказ По сути, они рассчитывают расстояние между тестовой точкой и значениями данных тренировки, а затем выбирают k ближайших соседей.
  • Наконец, значение тестового данных присваивается классу или группе, которая содержит максимальные точки K ближайших соседей тестовых данных.

Реальный пример K-NN

Заявление о проблеме – Рассмотрим сумку из бисера (тренировочные данные), имеющих два цвета – зеленый и синий.

Итак, здесь есть два класса: зеленый и синий. Наша задача – найти, к какому классу новое бусин «Z» упадет.

Решение – Первоначально мы случайным образом выбираем значение K. Давайте теперь предположим. Итак, KNN рассчитает расстояние Z со всеми значениями данных тренировки (сумка из бисера).

Кроме того, мы выбираем ближайшие значения 4 (k) к z, а затем попытайтесь проанализировать, к какому классу принадлежат большинство из 4 соседей.

Наконец, Z присваивается класс большинства соседей в пространстве.

Битовые операторы Python

Побитовый оператор работает с битами и выполняет побитовую операцию. Предположим, если а = 60; и б = 13; Теперь в двоичном формате они будут выглядеть следующим образом —

а = 0011 1100

b = 0000 1101

——————

A & B = 0000 1100

a | b = 0011 1101

a ^ b = 0011 0001

~ a = 1100 0011

Встроенная функция Python bin () может использоваться для получения двоичного представления целого числа.

Следующие побитовые операторы поддерживаются языком Python —

оператор Описание пример
& Бинарный И Оператор копирует немного, чтобы результат, если он существует в обоих операндах (А и В) (означает 0000 1100)
| Бинарный ИЛИ Он копирует немного, если он существует в любом из операндов. (a | b) = 61 (означает 0011 1101)
^ Двоичный XOR Он копирует бит, если он установлен в одном операнде, но не в обоих. (a ^ b) = 49 (означает 0011 0001)
Бинарные дополнения Он одинарный и имеет эффект «переворачивания» битов. (~ a) = -61 (означает 1100 0011 в форме дополнения 2 из-за двоичного числа со знаком).
<< Бинарный сдвиг влево Значение левого операнда перемещается влево на количество бит, указанное правым операндом. << 2 = 240 (означает 1111 0000)
>> Бинарный сдвиг вправо Значение левого операнда перемещается вправо на количество битов, указанное правым операндом. a >> 2 = 15 (означает 0000 1111)

Числа: целые, вещественные, комплексные

Числа в Python 3: целые, вещественные, комплексные. Работа с числами и операции над ними.

Целые числа (int)

Числа в Python 3 ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций:

x + y Сложение
x — y Вычитание
x * y Умножение
x / y Деление
x // y Получение целой части от деления
x % y Остаток от деления
-x Смена знака числа
abs(x) Модуль числа
divmod(x, y) Пара (x // y, x % y)
x ** y Возведение в степень
pow(x, y) x y по модулю (если модуль задан)

Также нужно отметить, что целые числа в python 3, в отличие от многих других языков, поддерживают длинную арифметику (однако, это требует больше памяти).

Битовые операции

Над целыми числами также можно производить битовые операции

x | y Побитовое или
x ^ y Побитовое исключающее или
x & y Побитовое и
x > y Битовый сдвиг вправо

x

Инверсия битов

Дополнительные методы

int.bit_length() — количество бит, необходимых для представления числа в двоичном виде, без учёта знака и лидирующих нулей.

int.to_bytes(length, byteorder, *, signed=False) — возвращает строку байтов, представляющих это число.

classmethod int.from_bytes(bytes, byteorder, *, signed=False) — возвращает число из данной строки байтов.

Системы счисления

Те, у кого в школе была информатика, знают, что числа могут быть представлены не только в десятичной системе счисления. К примеру, в компьютере используется двоичный код, и, к примеру, число 19 в двоичной системе счисления будет выглядеть как 10011. Также иногда нужно переводить числа из одной системы счисления в другую. Python для этого предоставляет несколько функций:

  • int(, ) — преобразование к целому числу в десятичной системе счисления. По умолчанию система счисления десятичная, но можно задать любое основание от 2 до 36 включительно.
  • bin(x) — преобразование целого числа в двоичную строку.
  • hex(х) — преобразование целого числа в шестнадцатеричную строку.
  • oct(х) — преобразование целого числа в восьмеричную строку.

Вещественные числа (float)

Вещественные числа поддерживают те же операции, что и целые. Однако (из-за представления чисел в компьютере) вещественные числа неточны, и это может привести к ошибкам:

Для высокой точности используют другие объекты (например Decimal и Fraction)).

Также вещественные числа не поддерживают длинную арифметику:

Простенькие примеры работы с числами:

Дополнительные методы

float.as_integer_ratio() — пара целых чисел, чьё отношение равно этому числу.

float.is_integer() — является ли значение целым числом.

float.hex() — переводит float в hex (шестнадцатеричную систему счисления).

classmethod float.fromhex(s) — float из шестнадцатеричной строки.

Помимо стандартных выражений для работы с числами (а в Python их не так уж и много), в составе Python есть несколько полезных модулей.

Модуль math предоставляет более сложные математические функции.

Модуль random реализует генератор случайных чисел и функции случайного выбора.

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

Способы извлечения корня

В языке программирования Python 3 существует три способа извлечения корней:

  • Использование функции sqrt из стандартной математической библиотеки math.
  • Операция возведения в степень **
  • Применение функции pow(x, n)

Чтобы воспользоваться первым способом, необходимо вначале импортировать sqrt из модуля math. Это делается с помощью ключевого слова import: from math import sqrt . При помощи этой функции можно извлекать только квадратный корень из числа. Приведем пример:

Если же нам нужно вычислить в Python корень квадратный из суммы квадратов, то можно воспользоваться функцией hypot из модуля math. Берется сумма квадратов аргументов функции, из нее получается корень. Аргументов у функции два.

Еще одним, чуть более универсальным методом, будет использование возведения в степень. Известно, что для того, чтобы взять корень n из числа, необходимо возвести его в степень 1/n. Соответственно, извлечение квадратного корня из числа 4 будет выглядеть так:

Последний метод использует функцию pow(value, n). Эта функция в качестве аргумента value возьмет число, которое необходимо возвести в степень, а второй аргумент будет отвечать за степень числа. Как и в предыдущем методе, необходимо использовать дробь, для того, чтобы получить корень числа.

Какой метод быстрее?

Для того, чтобы определить какой же метод предпочтительнее использовать, напишем программу. Замерять время выполнения будем с помощью метода monotonic библиотеки time.

Как видно, самое быстрое решение – использовать **. На втором месте метод sqrt, а pow – самый медленный. Правда, метод sqrt наиболее нагляден при вычислении в Python квадратных корней.

Модуль Decimal

Синтаксис

Decimal обеспечивает поддержку правильного округления десятичной арифметики с плавающей точкой.

, в отличие от , имеет ряд преимуществ:

  • работает так же, как школьная арифметика;
  • десятичные числа представлены точно (в отличие от float, где такие числа как 1.1 и 5.12 не имеют точного представления);
  • точность десятичного модуля Decimal можно изменять (с помощью );

Точность

Контекстом в Deciaml можно управлять, устанавливая свои значения. Например, для того, чтобы управлять точностью Decimal, необходимо изменить параметр контекста (от англ. precision – точность):

Округление

Округление осуществляется с помощью метода . В качестве первого аргумента – объект Decimal, указывающий на формат округления:

Важно: если точность округления установлена в , а формат округления , возникнет ошибка:

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

Помимо первого параметра, quantize() принимает в качестве второго параметра стратегию округления:

  • – округление в направлении бесконечности (Infinity);
  • – округляет в направлении минус бесконечности (- Infinity);
  • – округление в направлении нуля;
  • – округление до ближайшего четного числа. Число 4.9 округлится не до 5, а до 4 (потому что 5 – не четное);
  • – округление до ближайшего нуля;
  • – округление от нуля;
  • – округление от нуля (если последняя цифра после округления до нуля была бы 0 или 5, в противном случае к нулю).

Помните, что как округление, так и точность вступают в игру только во время арифметических операций, а не при создании самих десятичных дробей

Как создать строку

Строки всегда создаются одним из трех способов. Вы можете использовать одинарные, двойные и тройные скобки. Давайте посмотрим

Python

my_string = «Добро пожаловать в Python!»
another_string = ‘Я новый текст тут…’

a_long_string = »’А это у нас
новая строка
в троичных скобках»’

1
2
3
4
5
6

my_string=»Добро пожаловать в Python!»

another_string=’Я новый текст тут…’

a_long_string=»’А это у нас

новая строка
в троичных скобках»’

Строка с тремя скобками может быть создана с использованием трех одинарных скобок или трех двойных скобок. Так или иначе, с их помощью программист может писать строки в нескольких линиях. Если вы впишете это, вы увидите, что выдача сохраняет разрыв строк. Если вам нужно использовать одинарные скобки в вашей строке, то впишите двойные скобки. Давайте посмотрим на пример:

Python

my_string = «I’m a Python programmer!»
otherString = ‘Слово «Python» обычно подразумевает змею’
tripleString = «»»В такой «строке» мы можем ‘использовать’ все.»»»

1
2
3

my_string=»I’m a Python programmer!»

otherString=’Слово «Python» обычно подразумевает змею’

tripleString=»»»В такой «строке» мы можем ‘использовать’ все.»»»

Данный код демонстрирует то, как вы можете вписать одинарные или двойные скобки в строку. Существует еще один способ создания строки, при помощи метода str. Как это работает:

Python

my_number = 123
my_string = str(my_number)

1
2

my_number=123

my_string=str(my_number)

Если вы впишете данный код в ваш интерпретатор, вы увидите, что вы изменили значение интегратора на строку и присвоили ее переменной my_string. Это называется кастинг, или конвертирование. Вы можете конвертировать некоторые типы данных в другие, например числа в строки. Но вы также заметите, что вы не всегда можете делать обратное, например, конвертировать строку вроде ‘ABC’ в целое число. Если вы сделаете это, то получите ошибку вроде той, что указана в этом примере:

Python

int(‘ABC’)

Traceback (most recent call last):
File «<string>», line 1, in <fragment>
ValueError: invalid literal for int() with base 10: ‘ABC’

1
2
3
4
5

int(‘ABC’)

Traceback(most recent call last)

File»<string>»,line1,in<fragment>

ValueErrorinvalid literal forint()withbase10’ABC’

Мы рассмотрели обработку исключений в другой статье, но как вы могли догадаться из сообщения, это значит, что вы не можете конвертировать сроки в цифры. Тем не менее, если вы вписали:

Python

x = int(«123»)

1 x=int(«123»)

То все должно работать

Обратите внимание на то, что строка – это один из неизменных типов Python. Это значит, что вы не можете менять содержимое строки после ее создания

Давайте попробуем сделать это и посмотрим, что получится:

Python

my_string = «abc»
my_string = «d»

Traceback (most recent call last):
File «<string>», line 1, in <fragment>
TypeError: ‘str’ object does not support item assignment

1
2
3
4
5
6

my_string=»abc»

my_string=»d»

Traceback(most recent call last)

File»<string>»,line1,in<fragment>

TypeError’str’objectdoes notsupport item assignment

Здесь мы пытаемся изменить первую букву с «а» на «d«, в итоге это привело к ошибке TypeError, которая не дает нам сделать это. Теперь вы можете подумать, что присвоение новой строке то же значение и есть изменение строки. Давайте взглянем, правда ли это:

Python

my_string = «abc»
a = id(my_string)
print(a) # 19397208

my_string = «def»
b = id(my_string)
print(b) # 25558288

my_string = my_string + «ghi»
c = id(my_string)
print(c) # 31345312

1
2
3
4
5
6
7
8
9
10
11

my_string=»abc»

a=id(my_string)

print(a)# 19397208

my_string=»def»

b=id(my_string)

print(b)# 25558288

my_string=my_string+»ghi»

c=id(my_string)

print(c)# 31345312

Проверив id объекта, мы можем определить, что когда мы присваиваем новое значение переменной, то это меняет тождество

Обратите внимание, что в версии Python, начиная с 2.0, строки могут содержать только символы ASCII. Если вам нужен Unicode, тогда вы должны вписывать u перед вашей строкой

Пример:

Python

# -*- coding: utf-8 -*-
my_unicode_string = u»Это юникод!»

1
2

# -*- coding: utf-8 -*-

my_unicode_string=u»Это юникод!»

В Python, начиная с версии 3, все строки являются юникодом.

Дополнение 1: Как вызывать магические методы

Магический метод Когда он вызывается (пример) Объяснение
вызывается при создании экземпляра
вызывается при создании экземпляра
, , etc. Вызывается для любого сравнения
Унарный знак плюса
Унарный знак минуса
Побитовая инверсия
Преобразование, когда объект используется как индекс
, Булевое значение объекта
Пытаются получить несуществующий атрибут
Присвоение любому атрибуту
Удаление атрибута
Получить любой атрибут
Получение элемента через индекс
Присвоение элементу через индекс
Удаление элемента через индекс
Итерация
, Проверка принадлежности с помощью
«Вызов» экземпляра
оператор менеджеров контекста
оператор менеджеров контекста
Сериализация
Сериализация

Программа на Python с переменными

Рассмотрим пример иллюстрирующий математическую модель описывающий
траекторию полета мяча в воздухе. Из второго закона Ньютона,
предполагая незначительное сопротивление воздуха, мы можем вывести
зависимость вертикального положения \( y \) мяча от времени
\( t \):
$$
\begin{equation*}
\tag{1}
y = v_0 t -0.5 g t^2
\end{equation*}
$$

где \( v_0 \) — начальная скорость, \( g \) — ускорение
свободного падения, значение которого положим равным \( 9.81 \) м/c \( ^2 \).

Сценарий

Рассмотрим сценарий на Python для вычисления по простой
формуле. Предположим, что сценарий у нас сохранен в виде текста в
файле ball.py

# -*- coding: utf-8 -*-
# Программа для вычисления положения мяча при вертикальном движении

v0 = 5       # Начальная скорость
g = 9.81     # Ускорение свободного падения
t = 0.6      # Время

y = v0*t - 0.5*g*t**2

Разбор сценария

Сценарий на языке Python — это текстовый файл (в нашем случае
ball.py), содержащий некоторые
инструкции. Мы можем читать сценарий и понимать, что программа
способна делать, но сам сценарий не выполняет никаких действий на
компьютере, пока интерпретатор Python не прочитает текст сценария и не
преобразует его в некоторые действия.

Когда сценарий запущен в интерпретаторе Python, он разбирается и выполняется
построчно. Первые две строки

# -*- coding: utf-8 -*-
# Программа для вычисления положения мяча при вертикальном движении

являются

комментариями*, т.е. как только встречается символ ,
интерпретатор Python воспринимает оставшуюся часть строки как
комментарий, пропускает ее и переходит к следующей строки.

Замечание

В первой строке указывается кодировка,
в которой сохранен файл сценария (в нашем случае *— это UTF8). Если в
сценарии не предполагается использование не ASCII символов, то первую
строку можно опустить. Однако, мы можем использовать
кириллический текст, поэтому в наших сценариях мы всегда будем
указывать кодировку.

Следующие 3 строки, интерпретируемые Pyhton:

v0 = 5       # Начальная скорость
g = 9.81     # Ускорение свободного падения
t = 0.6      # Время

В Python выражения вида известны как операторы
присваивания. Значение правой части, в нашем случае целое число
, становится объектом, а имя переменной слева *— именованной
ссылкой на этот объект. Всякий раз, когда мы запишем , Python
заменит ее целым значением . Выражение создает новое
имя для того же целого объекта со значением , а не копирует
объект.

Таким образом, прочитав эти строки интерпретатор Python знает три
переменных и их значения. Эти переменные используются
интерпретатором в следующей строке, фактически реализующей некоторую
формулу

y = v0*t - 0.5*g*t**2

В этой строке Python интерпретирует как оператор умножения, *—
вычитания, *— возведения в степень (естественно, и
интерпретируются как операторы сложения и деления соответственно). В
результате вычисляется значение по формуле в правой части выражения,
которое присваивается переменной с именем . Последняя строка
сценария

print y

выводит на печать значение переменной . Таким образом при запуске
сценария ball.by на экране будет выведено
число . В тексте сценария имеются также и пустые строки, которые
пропускаются интерпретатором Python. Они добавлены для лучшей
читабельности кода.

Запуск сценариев Python

Сценарии Python обычно имеют расширение , но это не является
необходимым. Как мы уже говорили, рассмотренный выше сценарий сохранен
в файле ball.py. Запустить его можно
следующей командой:

python ball.py

Такая команда явно указывает, что в качестве интерпретатора файла
должен использоваться Python. Также могут задаваться
аргументы командной строки, который загружается сценарием.

Команда должна запускаться в консольном окне
(терминал в Unix, Командная строка (Command Prompt) в MS Windows).

В случае, когда файлу установлено разрешение на выполнение (команда
) в ОС Unix (Linux), сценарий можно запускать
командой, сценарий можно запускать командой

./ball.py

В этом случае первая строка сценария должна содержать описание
интерпретатора:

#!/usr/bin/env python

В ОС MS Windows можно писать просто

ball.py

вместо , если расширение ассоциировано с
интерпретатором Python.

Методы join в Python, split() и функция replace Python 3

Метод join Python объединяет две строки и разделяет их указанным символом.

Давайте создадим строку:

balloon = "Sammy has a balloon."

Теперь используем метод join в питоне, чтобы добавить пробел к этой строке. Мы можем сделать так:

" ".join(balloon)

Если мы выведем это:

print(" ".join(balloon))

то увидим, что в новой возвращаемой строке добавлены пробелы между символами правой части строки.

Вывод:

S a m m y   h a s   a   b a l l o o n .

Функция join python также может использоваться для возврата строки, которая является перевернутой исходной строкой:

print("".join(reversed(balloon)))

Вывод:

.noollab a sah ymmaS

Метод str.join() также полезен для объединения списка строк в новую единственную строку.

Создадим разделенную запятыми строку из списка строк:

print(",".join())

Вывод:

sharks,crustaceans,plankton

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

".join().

Также можно и разбивать строки. Для этого используется метод str.split():

print(balloon.split())

Вывод:

Метод str.split() возвращает список строк, разделенных пробелами, если никакой другой параметр не задан.

Также можно использовать str.split() для удаления определенных частей строки. Например, давайте удалим из строки букву a:

print(balloon.split("a"))

Вывод:

Теперь буква a удалена, и строки разделены там, где она располагалась.

Метод str.replace() применять для замены части строки. Допустим, что  шарик, который был у Сэмми, потерян. Поскольку у Сэмми больше нет этого шарика, изменим подстроку «has» на новую строку «had»:

print(balloon.replace("has","had"))

В скобках первая подстрока — это то, что мы хотим заменить, а вторая подстрока — это то, на что мы заменяем первую подстроку.

Вывод:

Sammy had a balloon.

Методы строк Python str.join(), str.split() и str replace Python позволяют более эффективно управлять строками в Python.

Вычисление квадратного корня в Python С помощью функции sqrt()

Математический модуль Python имеет дело с математическими функциями и вычислениями. Функция sqrt() в математическом модуле используется для вычисления квадратного корня из заданного числа.

Возвращаемое значение функции sqrt()

метод sqrt() в Python вернет квадратный корень из заданного числа с плавающей запятой. Если значение меньше 0, то он вернет ошибку времени выполнения.

Примеры Вычисления Квадратного Корня С Помощью Функции sqrt()

Давайте рассмотрим несколько примеров вычисления квадратного корня Python с помощью функции sqrt ().

Пример 1: Вычисление квадратного корня из положительного целого числа

Выход:

Пример 2: Вычисление квадратного корня из числа с плавающей запятой

Выход:

Пример 3: Вычисление квадратного корня из 0

Выход:

Выход:

Выход:

Таким образом, когда x <0 он не выполняется, вместо этого генерируется ValueError.

Пример 5: Вычисление квадратного корня из постоянной Больцмана

Выход:

Записи:

  • функция math.sqrt () – это встроенная функция в языке программирования Python, которая предоставляет квадратный корень из заданного числа. Для работы функции math.sqrt() необходимо импортировать модуль (библиотеку) “math”. Если вы передадите отрицательное значение в функцию sqrt, то python выдаст ошибку

Полезные методы Decimal

Итак, вот некоторые полезные методы для работы с десятичными числами в Decimal:

  • – вычисляет квадратный корень из десятичного числа;
  • – возвращает e^x (показатель степени) десятичного числа;
  • – используется для вычисления натурального логарифма десятичного числа;
  • – используется для вычисления log (основание 10) десятичного числа;
  • – возвращает десятичное число, содержащее 3 аргумента, знак (0 для +, 1 для -), цифры и значение экспоненты;
  • fma(a, b) – «fma» означает сложить, умножить и добавить. Данный метод вычисляет из чисел в аргументе. В этой функции округление не выполняется;
  • – печатает первый аргумент, копируя знак из второго аргумента.

Полный список методов Decimal описан в

На равные части из n элементов

Список может быть разделен на основе размера определенного фрагмента. Это означает, что мы можем определить размер данной части. Если подмножество списка не вписывается в размер определенного фрагмента, заполнители должны быть вставлены вместо пустых держателей элементов. В этих случаях я буду использовать функцию None.

Давайте создадим новый файл и начнем программирование:

Приведенная выше функция func_chunk принимает аргументы: lst для списка и chunk_size для числа, на которое его нужно разделить. Функция выполняет итерацию по списку с приращением размера фрагмента n.

Ожидается, что каждый фрагмент будет иметь размер, заданный в качестве аргумента. Если элементов недостаточно для разделения на один и тот же размер, оставшиеся неиспользуемые элементы заполняются None.

Вывод программы:

Список был разделен на равные части по 3 элемента в каждой.

Python имеет утилиты для упрощения этого процесса. Мы можем использовать функцию из itertools для упрощения предыдущей функции.

Давайте создадим новый файл и напишем следующий код:

Этот код повторяет элементы и возвращает фрагмент желаемой длины на основе предоставленных вами аргументов.

Мы поместили в коде 4 аргументf i_. Функция zip_longest агрегирует и возвращает элементы из каждой итерации. В этом случае она будет агрегировать элементы из списка, который повторяется 4. Затем создается множество итераторов, содержащих 4 последовательных элементов, которые после преобразуются в список и возвращаются.

Вывод программы будет таков:

Эта более короткая функция приводит к тому же выводу программы. Однако этот метод более ограничен, так как нам приходится вручную писать, сколько элементов мы хотим в коде, и немного неудобно просто помещать кучу i_ в вызов zip_longest.

Лучшим решением было бы использование генераторов. Давайте создадим новый файл:

Этот генератор дает подсписок, содержащий n элементов. В конце концов, это дало бы подсписок для каждой части.

Вывод программы:

Этот метод работает лучше всего, если вам не нужно заполнение кода с помощью None или иным образом.

Функции

Функция – это часть кода, принимающая аргументы и возвращающая вычисленное значение. Аргумент – это объект, отправляемый в функцию. Аргументом может быть какое-нибудь значение или ссылка на него.

функции языка программирования Python

В функции используются параметры и их число не ограничено. Число аргументов соответствует параметрам. Функцию можно объявить в любом месте. Она записывается как:

— def <имя функции> (): — после определения функции ставиться двоеточие, аргументы функции заключаются в круглые скобки. После двоеточия идет со следующей строки отступ и тело функции.

Для выхода из функции используется оператор return, который возвращает значения. Если оператор return не указан, то произойдет возврат значения None.

Функции бывают встроенные и пользовательские. В интерпретаторе Python есть ряд часто используемых функций. Они всегда доступны и можно посмотреть документацию с их описанием и примерами применения. Например, при помощи функции input () можно ввести данные с клавиатуры, а при помощи функции print () вывести данные в консоль. Так, print (“Hello, World!”) выводит строку «Hello, World!».

Еще одной интересной функцией является декоратор. Декоратор позволяет расширить возможности функции, не меняя ее кода, при помощи обертывания функции другой функцией.

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

Когда использовать Decimal и Fraction?

Потребность в максимальной точности расчетов на практике чаще всего возникает в отраслях и ситуациях, где некорректно выбранная точность расчетов может обернуться серьезными финансовыми потерями:

  • Обмен валют. Особенно если этот процесс подразумевает не просто конвертацию евро в рубли, тенге или иную валюту, а выполнение более сложных операций.
  • Масштабируемые расчеты. К примеру, на фабрике начинают готовить печенье по бабушкиному рецепту, в котором упоминается «1/3 столовой ложки» определенного ингредиента. Сколько именно литров или миллилитров составит эта треть, если применять ее не к одной порции печенья, а к промышленным масштабам? А сколько это составит в пересчете на «неродную» систему мер, то есть фунтов или унций?
  • Работа с иррациональными числами. Если вы планируете запускать спутник или возводить энергетическую станцию, точность расчетов необходимо задать еще до того, как вы приступите к самым первым вычислениям. И оповестить об этом всех, кто имеет хоть какое-то отношение к проекту.

Таким образом, этих двух модулей должно быть достаточно, чтобы помочь вам выполнять общие операции как с десятичными, так и с дробными числами. Как мы уже говорили, вы можете использовать эти модули вместе с математическим модулем для вычисления значения всех видов математических функций в желаемом формате.

Модуль Decimal незаменим, если нужно считать деньги: с его помощью вы сможете подсчитать точную сумму, вплоть до копеек.

Fraction считает просто и честно: любители онлайн-игр приспособили его для подсчетов в игровой математике.

Операторы сравнения Python

Следующие допущения переменная а 10, Ь является переменной величиной 20:

операторы
описание
примеров
==
Равный — сравните объекты для равенства
(A == B) возвращает значение False.
! =
Это не равно — сравнить два объекта не равны
(A! = B) возвращает истину.

Это не равно — сравнить два объекта не равны
(A б) возвращает истину. Этот оператор подобен! =.
>
Больше — Возвращает ли х больше у
(A> B) возвращает значение False.

Обратите внимание, что эти переменные капитализации имя. (A

> =
Больше или равно — Возвращает ли х больше или равно у.
(A> = B) возвращает значение False.

Следующий пример иллюстрирует сравнение всех операций Python:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

a = 21
b = 10
c = 0

if ( a == b ):
   print "1 - a 等于 b"
else:
   print "1 - a 不等于 b"

if ( a != b ):
   print "2 - a 不等于 b"
else:
   print "2 - a 等于 b"

if ( a <> b ):
   print "3 - a 不等于 b"
else:
   print "3 - a 等于 b"

if ( a < b ):
   print "4 - a 小于 b" 
else:
   print "4 - a 大于等于 b"

if ( a > b ):
   print "5 - a 大于 b"
else:
   print "5 - a 小于等于 b"

# 修改变量 a 和 b 的值
a = 5;
b = 20;
if ( a <= b ):
   print "6 - a 小于等于 b"
else:
   print "6 - a 大于  b"

if ( b >= a ):
   print "7 - b 大于等于 b"
else:
   print "7 - b 小于 b"

Примеры вышеуказанного вывода:

1 - a 不等于 b
2 - a 不等于 b
3 - a 不等于 b
4 - a 大于等于 b
5 - a 大于 b
6 - a 小于等于 b
7 - b 大于等于 b

На n равных частей

В предыдущем разделе мы разбили список на основе размера отдельных фрагментов так, чтобы каждый фрагмент имел одинаковое количество элементов. Есть и другой способ интерпретировать эту проблему.

Что мы делаем, когда хотим разбить список не по количеству элементов в каждом фрагменте, а по количеству фрагментов, которые мы хотим создать?

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

Логика аналогична предыдущим методам, однако размер части — это предельное значение длины списка, деленное на количество требуемых частей. Как и в предыдущих примерах кода, если в части есть свободные места, они будут заполнены значением None:

Мы определяем, сколько списков нам нужно создать и сохранить это значение в n. Затем мы создаем подсписок для двух элементов одновременно, заполняя выходные данные в случае, если размер нашего фрагмента меньше желаемой длины.

Вывод программы:

Как видно из приведенных выше выходных данных, список был разделен на 3 отдельных подспискf равных размеров на основе предоставленного аргумента c_num.

Возведение в степень (**)

Нетипичный оператор для большинства других языков программирования. Тем он и удобен. Парная «звёздочка» (**) выполняет классическое математическое возведение числа «a» в степень «b»:

И показатель степени, и основание могут быть отрицательными:

И дробными:

Операндов у возведения в степень также может быть несколько. В таком случае, оператор «**» работает, как право-ассоциативный (т.е. операции выполняются справа-налево):

В завершении — про приоритет операций. Если в выражении используются разные операторы, то порядок их выполнения будет следующим:

  1. возведение в степень;
  2. умножение, деление, целочисленное деление и деление по модулю;
  3. сложение и вычитание.

Условные операторы

Python поддерживает дополнительный метод принятия решений, называемую условным выражением. (Он также упоминается как условный оператор или тернарный оператор в различных местах документации Python).

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

<expr1> if <conditional_expr> else <expr2>

Это отличается от форм операторов , перечисленных выше, потому что это не управляющая структура направляет поток выполнения программы. Он действует скорее как оператор, определяющий выражение. В приведенном выше примере сначала вычисляется . Если истина, то выражение вычисляется как . Если ложь, то выражение вычисляется как .

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

raining = False
print("Let's go to the", 'beach' if not raining else 'library')

raining = True
print("Let's go to the", 'beach' if not raining else 'library')


age = 12
s = 'minor' if age < 21 else 'adult'
s


'yes' if ('qux' in ) else 'no'

Примечание: условное выражение Python аналогично синтаксису ? : , используемому многими другими языками-C, Perl и Java. На самом деле, оператор ?: обычно называют тернарным оператором в этих языках, что, вероятно, является причиной того, что условное выражение Python иногда называют тернарным оператором Python.

Обычно условное выражение используется для выбора назначения переменной. Например, предположим, что вы хотите найти большее из двух чисел. Конечно, есть встроенная функция max (), которая делает именно это (и многое другое), что вы могли бы использовать. Но предположим, вы хотите написать свой собственный код с нуля.

Вы можете использовать стандартный оператор с предложением :

if a > b:
    m = a
else:
    m = b

Но условный оператор короче и, возможно, более читабельнее:

m = a if a > b else b

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

В следующем примере оператор + связывается более плотно, чем условное выражение, поэтому сначала вычисляются +x и y + 2, а затем условное выражение. Скобки во втором случае не нужны и результат не меняется:

x = y = 40

z = 1 + x if x > y else y + 2
z


z = (1 + x) if x > y else (y + 2)
z

Если вы хотите, чтобы условное выражение было вычислено первым, вам нужно окружить его группирующими скобками. В следующем примере сначала вычисляется (x, если x > y, иначе y). В результате получается y, который равен 40, поэтому присваивается z 1 + 40 + 2 = 43:

x = y = 40

z = 1 + (x if x > y else y) + 2
z

Если вы используете условное выражение как часть более крупного выражения, вероятно, будет хорошей идеей использовать группирующие скобки для уточнения, даже если они не нужны.

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

В выражении , если иначе :

Если <conditional_expr> правда, <expr1> и <expr2> не вычисляется.
Если <conditional_expr> имеет значение false, то возвращается <expr2> и <expr1> не вычисляется.

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

'foo' if True else 1/0

1/0 if False else 'bar'

В обоих случаях условия 1/0 не оцениваются, поэтому никаких исключений не возникнет.

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

s = ('foo' if (x == 1) else
     'bar' if (x == 2) else
     'baz' if (x == 3) else
     'qux' if (x == 4) else
     'quux'
)
s

Неясно, имеет ли это какое-либо существенное преимущество перед соответствующим оператором , но это синтаксически правильно для Python.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector