Закрепим пройденный материал с функциями и создадим реальный пример функции, которая вычисляет что-нибудь интересное.
Пожалуй, всякий начинающий программист должен написать самостоятельно программу перевода целого двоичного числа в десятичное. Именно этим мы и займёмся в этом примере.
Использование готовой функции перевода двоичного числа
На Питоне конечно уже есть готовое и весьма простое решение, которое делает перевод двоичной записи в десятичное число.
К примеру, есть функция int([object], [основание системы счисления]) – преобразование к целому числа в десятичной системе счисления. По умолчанию система счисления десятичная, но можно задать любое основание от 2 до 36 включительно.
В нашем случае, выбираем основание 2.
Вот пример выполнения этого кода:
Но мы ведь не ищем лёгких путей, а создаём свою функцию. Поэтому код будет следующий.
При помощи def задаём имя функции с соответствующим названием bin_to_dec и внутреннюю переменную.
Функция len(digit) будет возвращать длину числа или количество символов
Это необходимо, чтобы вычислить, сколько проходов будет для вычисления общей суммы по известной в информатике формуле перевода числа из двоичной формы в десятичную.
Проходы делает оператор цикла for i in range(0, dlina), где и i меняется от значения 0 до общего количества.
2**(dlina-i-1) – двойка как основание возводится в степень (dlina-i-1)
А вот эта конструкция вычисляет сумму, которая и будет числом в десятичной форме.
Пример выполнения программы показан на рисунке.
Конечно, данная функция достаточно простая и не имеет защиты от неправильного ввода, однако для образовательного примера вполне сгодится. Пробуем выполнить по памяти пример, а затем создать свои функции на Питоне.
Заметим, что в языке Python есть встроенная функция bin(), которая переводит десятичное число в двоичную систему счисления:
Здесь же рассматривается алгоритм такого перевода и его реализация на Python.
Обычно десятичное число преобразуют к двоичному представлению путем нахождения остатков от деления на 2. При этом полученное на предыдущем шаге частное выступает в качестве делимого на следующем шаге. Деление заканчивается, когда делимое обращается в ноль. Остатки собираются в двоичное число начиная с конца, то есть последний остаток будет первой цифрой двоичного числа. Например, надо перевести число 8 в двоичную систему:
- 8 / 2 = 4, остаток 0
- 4 / 2 = 2, остаток 0
- 2 / 2 = 1, остаток 0
- 1 / 2 = 0, остаток 1
- 0 – конец деления
- Сборка: 10002
При реализации данного алгоритма с помощью языка программирования надо организовать хранение остатков. Сделать это можно в переменной строкового типа или в списке. В случае строки каждый новый остаток следует добавлять в начало.
Числа в 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[, z]) | x y по модулю (если модуль задан) |
Также нужно отметить, что целые числа в python 3, в отличие от многих других языков, поддерживают длинную арифметику (однако, это требует больше памяти).
Битовые операции
Над целыми числами также можно производить битовые операции
x | y | Побитовое или |
x ^ y | Побитовое исключающее или |
x & y | Побитовое и |
x > y | Битовый сдвиг вправо |
Инверсия битов |
Дополнительные методы
int.bit_length() – количество бит, необходимых для представления числа в двоичном виде, без учёта знака и лидирующих нулей.
int.to_bytes(length, byteorder, *, signed=False) – возвращает строку байтов, представляющих это число.
Системы счисления
Те, у кого в школе была информатика, знают, что числа могут быть представлены не только в десятичной системе счисления. К примеру, в компьютере используется двоичный код, и, к примеру, число 19 в двоичной системе счисления будет выглядеть как 10011. Также иногда нужно переводить числа из одной системы счисления в другую. Python для этого предоставляет несколько функций:
- int([object], [основание системы счисления]) – преобразование к целому числу в десятичной системе счисления. По умолчанию система счисления десятичная, но можно задать любое основание от 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 реализует генератор случайных чисел и функции случайного выбора.
Комплексные числа (complex)
В Python встроены также и комплексные числа:
Также для работы с комплексными числами используется также модуль cmath.