Перевод чисел в Python
В данной статье мы рассмотрим встроенные функции языка программирования Python по переводу чисел в различные системы счисления. А так же напишем универсальную функцию по переводу десятичных чисел в другие системы счисления.
Перевод чисел из десятичной системы счисления
Для перевода числа из десятичной системы счисления в двоичную можно воспользоваться оператором bin(). В качестве аргумента нужно передать значение в виде числа, а оператор вернет строку с двоичным числом. У результата также будет префикс 0b, указывающий на основание системы счисления.
number = 123 result = bin(number) print(result)
>'0b1111011'
Для перевода в восьмеричную систему счисления есть оператор oct(). Он также возвращает строку с восьмеричным числом и префиксом 0o.
number = 123 result = oct(number) print(result)
>'0o173'
При переводе в шестнадцатеричную систему счисления воспользуемся оператором hex(). Он вернет строку шестнадцатеричным числом и префиксом 0x
number = 123 result = hex(number) print(result)
>'0x7b'
Если же вам не нужен префикс у результата перевода, то всегда можно взять срез у полученной строки.
print(bin(123)[2:]) print(oct(123)[2:]) print(hex(123)[2:])
>'1111011' >'173' >'7b'
Так же выводить числа в других системах счисления можно используя f-строки и формат вывода. Для этого в строке, через символ : указываем буквы b — для двоичной, o — для восьмеричной и x — для шестнадцатеричной системы счисления.
n = 1984 print(f'Двоичное: ') print(f'Восьмеричное: ') print(f'Шестнадцатеричное: ')
Двоичное: 11111000000 Восьмеричное: 3700 Шестнадцатеричное: 7c0
А теперь напишем универсальную функцию convert_to() по переводу чисел из десятичной системы счисления в систему счисления в любым основанием. Наша функция будет ограничена только наличием символов в переводимой системе счисления.
Данная функция принимает три аргумента, два из которых обязательные. Это десятичное целое число number и основание переводимой системы счисления base. Третий аргумент upper служит для указания регистра вывода строки переведенного числа. По умолчанию он установлен в значение False.
def convert_to(number, base, upper=False): digits = '0123456789abcdefghijklmnopqrstuvwxyz' if base > len(digits): return None result = '' while number > 0: result = digits[number % base] + result number //= base return result.upper() if upper else result
Во второй строке мы задаем переменную digits, содержащую набор символов цифр и букв английского языка. Она нам понадобится для составления символов переведенного числа на основании остатков.
В третьей строке мы проверяем основание переданной системы счисления на его длину. Если основание окажется больше, чем количество символов в нашей строке digits, то мы прекращаем выполнение функции через вызов оператора return и возвращаем None. Это такая своеобразная защита функции от неправильно переданных аргументов. Если мы попробуем перевести число в большую систему счисления по основанию, чем у нас есть символов для его записи, то мы его не сможем записать.
Дальше заведем переменную result для хранения результата работы функции и зададим ей значение в виде пустой строки. Теперь с помощью цикла с условием будем находить остаток от деления числа number на основание base, а также уменьшать number в base раз используя целочисленное деление.
Остаток от деления числа на основание переводимой системы счисления мы будем использовать как индекс для получения символа в строке digits и добавлять его к результату result. Добавлять это значение следует слева, т.к. самый первый остаток является самым правым разрядом. Цикл выполняется до тех пор, пока исходное значение переменной number больше нуля.
После завершения цикла мы вернем результат через вызов return. Для этого воспользуемся тернарным оператором и проверим наш третий аргумент. Если он будет в значении True, то для строки result вызовем строкой метод .upper() который заменит все прописные символы английского языка на строчные. Иначе, вернем результат как есть.
А теперь проверим работу нашей функции. Для этого попробуем перевести числа в 2ю, 8ю, 16ю, 32ю и 64ю системы счисления. Для перевода в 32ю систему счисления мы укажем третий необязательный аргумент upper и зададим ему значение True.
print(convert_to(123, 2)) print(convert_to(123, 8)) print(convert_to(123, 16)) print(convert_to(123, 32, upper=True)) print(convert_to(123, 64))
>'1111011' >'173' >'7b' >'3R' >None
Перевод чисел в десятичную систему счисления
Для обратного перевода в десятичную систему счисления мы будем использовать оператор int(). Для этого передадим ему два аргумента, первый — это строка с числом в какой-то системе счисления, а второй — это основание системы счисления самого числа. По умолчанию для этого необязательного аргумента стоит значение равное 10.
В качестве самого числа нужно обязательно передать строку. Строка может содержать или само число или число с префиксом системы счисления.
Для перевода из двоичной системы счисления:
number = '11001' result = int(number, 2) print(result)
number = '0b11001' result = int(number, 2) print(result)
ПРЕОБРАЗОВАНИЕ ТИПОВ ДАННЫХ В PYTHON
С помощью функции complex() удобно формировать комплексные числа, указывая через запятую два аргумента: действительную часть и мнимую часть.
a = complex(3.2, 1.5) print(a)
(3.2+1.5j)
Смешанная арифметика
Python поддерживает смешанную арифметику в выражениях, состоящих из чисел разных типов. При этом целочисленный тип (int) при необходимости расширяется до дробного (float), а дробный — до комплексного (complex). То же самое происходит при сравнении чисел разного типа.
Системы счисления
Для преобразования чисел в двоичную, восьмиричную и шестнадцатиричную систему служат функции bin(), oct() и hex(). Эти функции возвращают строковые представления чисел, что необходимо учитывать при работе с ними.
a = hex(38) print(a)
0x26
Преобразовать строковое представление недесятичного числа в десятичную систему можно с помощью функции int(), указав вторым аргументом основание системы счисления (от 2 до 36 включительно).
a = '0x26' b = int(a, base=16) print(b)
Округление
Для округления чисел с плавающей точкой используется функция round(). Функция использует банковское округление (по Гауссу) до ближайшего чётного целого, чтобы избежать серийного накопления погрешности. Например, round(1.5) + round(2.5) будет равен 4. При обычном математическом округлении сумма округленных чисел будет равна 5.
С помощью второго аргумента функции round() можно округлить число до заданного количества знаков после запятой. Если воторой аргумент не задан, то число округляется до целого.
a = round(1.5) print(a) b = round(2.5) print(b) c = round(6.4567, 2) print(c) d = round(4.35, 1) print(d) e = round(4.45, 1) print(e)
2 2 6.46 4.7 4.5
Преобразование в строку
Для преобразования в строку используется функция str(). Аргументом функции str() может выступать число, строка, кортеж, список, множество, словарь, логическое значение, None.
Любой объект, преобразованный в строку, становится просто набором символов.
a = 5.3 x = str(a) print(x, type(a), type(x))
Преобразование в список
Для преобразования в список используется функция list(). Аргументом функции list() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).
При преобразовании строки в список, мы получаем список, состоящий из символов строки.
Стоит обратить внимание на то, что при преобразовании словаря в список, в списке оказываются только ключи.
b = 'Python' x = list(b) print(x) c = (3, 4) x = list(c) print(x) d = [5, 6] x = list(d) print(x) e = x = list(e) print(x) f = x = list(f) print(x)
['P', 'y', 't', 'h', 'o', 'n'] [3, 4] [5, 6] [8, 7] [1, 2]
Преобразование в кортеж
Для преобразования в кортеж используется функция tuple(). Аргументом функции tuple() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).
Преобразование в кортеж происходит по тому же принципу, по которому происходит преобразование в список.
Преобразование в множество
Для преобразования в множество используется функция set(). Аргументом функции set() может выступать любой итерируемый тип данных (строка, кортеж, список, множество, словарь).
Преобразование в множество происходит по тому же принципу, по которому происходит преобразование в список, но следует учитывать, что повторяющиеся элементы в множестве будут представлены только один раз.
a = [5, 6, 5, 6, 7] x = set(a) print(x)
С помощью последовательного преобразования числа в строку, а затем в множество, можно найти набор символов, которые встречаются в числе.
a = 227 x = set(str(a)) print(x)
Преобразование в словарь
Для преобразования в словарь используется функция dict().
Для преобразования в словарь каждый элемент преобразуемой последовательности должен быть парой. Первым элементом в паре может быть любой неизменяемый тип данных (число, строка, кортеж), а вторым — любой тип данных.
f = [[1, 'яблоко'], [2, 'тыква']] x = dict(f) print(x)
Преобразование в логический тип
Для преобразования в логический тип используется функция bool().
Функция bool() вернет False, если в качестве аргумента выступает пустая строка, нулевое число, None, пустой список, пустой кортеж или пустое множество. Непустая строка, ненулевое число, даже если оно отрицательное, вернут True. Непустое множество, непустой список или непустой кортеж, даже если они содержат один пустой элемент, вернут True.
a = -7 x = bool(a) print(x) b = '' x = bool(b) print(x) c = x = bool(c) print(x)
True False True
Преобразование строки в число в Python
Преобразование данных одного типа в другой является обычной задачей в программировании. В Python типы данных можно легко преобразовать друг в друга.
Алексей Кодов
Автор статьи
7 июля 2023 в 17:34
Преобразование данных одного типа в другой является обычной задачей в программировании. В Python типы данных можно легко преобразовать друг в друга. Это облегчает обработку данных и помогает избежать ошибок. В этой статье рассмотрим, как преобразовать строку в число (целое или дробное).
Преобразование строки в целое число
В Python для преобразования строки в целое число используется встроенная функция int() . Она принимает на вход строку и возвращает целое число. Если строка не может быть преобразована в целое число, Python выдаст ошибку ValueError .
число = int("123") print(число) # Выведет: 123
Преобразование строки в число с плавающей точкой
Если нужно преобразовать строку в число с плавающей точкой (дробное число), используется функция float() . Она работает аналогично функции int() , но возвращает число с плавающей точкой.
дробное = float("123.45") print(дробное) # Выведет: 123.45
Нужно быть аккуратным с преобразованием строк в числа, так как если строка содержит символы, которые не могут быть интерпретированы как число (например, буквы), Python выдаст ошибку. Поэтому перед преобразованием строки в число рекомендуется убедиться, что это возможно.
Для проверки, можно ли строку преобразовать в число, можно использовать метод isdigit() для проверки целых чисел и немного более сложную проверку для чисел с плавающей точкой:
строка = "123" print(строка.isdigit()) # Выведет: True строка_с_плавающей_точкой = "123.45" try: float(строка_с_плавающей_точкой) print(True) except ValueError: print(False) # Если строка не может быть преобразована во float, выведет False
Понимание, как преобразовывать строки в числа, является важным навыком при работе с данными в Python.
Преобразование числа из строки в тип int и float
Python не позволит сложить строку и число, даже если строка выглядит как число, то есть содержит только цифры:
>>> '50' + 1 # TypeError: cannot concatenate ‘str’ and ‘int’ objects
В архитектуре языка оператор ‘+’ может означать как операцию сложения, так и операцию конкатенации, вследствие чего выбор типа преобразования становится неочевидным. Поэтому интерпретатор воспринимает такую инструкцию как ошибочную. В этом случае нужно использовать инструменты преобразования, чтобы можно было интерпретировать строку как число или наоборот.
Преобразование строковой версии числа в int или float .
- Преобразование строки в тип int ;
- Преобразование строки в тип float ;
- Преобразование списка строк в список чисел.
Преобразование строки в тип int .
# преобразование строки в число >>> num = '50' >>> if num.isdigit(): . int('50') # 50 >>> float('1.5') # 1.5 # преобразование числа в строку >>> str(50) # '50'
Функции int и float преобразует строку в число, функция str преобразует число в строковое представление. В Python нельзя смешивать строковые и числовые типы в таких операторах, как ‘+’ , но можно вручную выполнить необходимые преобразования перед выполнением.
Преобразование строки в тип float .
>>> x = '50' >>> y = 1 >>> z = '1.5' # Операция сложения >>> int(x) + y + float(z) # 52.5 # Операция конкатенации >>> x + str(y) + z # '5011.5' # Преобразование строки с записью вещественного # числа в число с плавающей точкой >>> text = '5.79E-10' >>> float(text) # 5.79e-10
Преобразование списка строк в список чисел.
Для преобразования списка строк с числами в список целых чисел можно ввести проверку перед преобразованием на то, что строка состоит только из десятичных чисел str.isdigit() .
>>> str_list = ['8.3', '11', 'девять', '1', '5', '3', '9', . 'пять', '15', '13', '7', '13.9', 'число'] >>> num_list = [] >>> for i in str_list: . if i.isdigit(): . num_list.append(int(i)) >>> num_list.sort() >>> num_list # [1, 3, 5, 7, 9, 11, 13, 15]
Для преобразования списка строк с числами включая десятичные c разделением их по типам, необходимо перед преобразованием в тип float проверять строку на вхождение точки ‘.’ .
>>> str_list = ['8.3', '11', 'девять.', '1', '5', '3', '9', . '.пять', '15', '13', '7', '13.9', 'число'] >>> def str_to_num(str): . if '.' in str and str.replace('.', '').isdigit(): . return float(str) . elif str.isdigit(): . return int(str) . >>> num_list = [] >>> for i in str_list: . n = str_to_num(i) . if n is not None: . num_list.append(str_to_num(i)) >>> num_list # [8.3, 11, 1, 5, 3, 9, 15, 13, 7, 13.9]
Для преобразования всех чисел в тип float , можно просто заменять точку в строке с числом и проверять получившуюся строку на десятичное число.
>>> str_list = ['8.3', '11', 'девять.', '1', '5', '3', '9', . '.пять', '15', '13', '7', '13.9', 'число'] >>> def is_num(str): . if str.replace('.', '').isdigit(): . return True . >>> num_list = [] >>> for i in str_list: . if is_num(i): . num_list.append(float(i)) . >>> num_list.sort() >>> num_list # [1.0, 3.0, 5.0, 7.0, 8.3, 9.0, 11.0, 13.0, 13.9, 15.0]
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Преобразование строки в число
- Строку в список, кортеж или множество символов
- Одинарные, двойные и тройные кавычки в строке Python
- Вывод специальных символов в строке Python «как есть»
- Объединение и повторение строк
- Индексирование строк
- Использование срезов строк
- Cрез строки Python от заданного символа/знака до конца строки
- Создание макета для печати базовыми методами строк
- Способы форматирования текстовых строк
- Подсчет повторений слов в тексте, деление строки на список слов
- Удаление слова из строки Python по фрагменту или шаблону
- Удаление пунктуации из строки
- Деление строки по заглавным буквам
- Создание отчетов и писем по шаблонам