Python. Средства преобразования строк и одиночных символов.
Средства преобразования строк и одиночных символов. Функции int() , str() , repr() , float() , ord() , chr()
Поиск на других ресурсах:
1. Функция int() . Преобразование в целое число
Функция int() есть конструктором класса int . Эта функция возвращает целочисленный объект, который может быть образован из:
- целого числа или объекта;
- числа или объекта с плавающей запятой;
- строки символов или строчного объекта, содержащего последовательность цифр.
Функция может вызваться одним из двух способов:
- int() – в этом случае функция возвращает значение 0;
- int(x, base) – в этом случае обрабатывается объект x . Значение base определяет систему исчисления, в которую нужно конвертировать объект x . По умолчанию base = 10. Если явным образом задана система исчисления, то тип объекта x должен быть строчным, другие типы в этом случае запрещаются.
Пример.
# Функция int() # 1. Вызов без параметров a = int() # a = 0 # 2. Вызов с целочисленным значением a = int(15) # a = 15 # 3. Вызов с числом с плавающей запятой a = int(2.85) # a = 2 # 4. Вызов со строкой s = '28' a = int(s) # a = 28 # 5. Вызов с конвертированием в другую систему исчисления - только для строк # конвертировать 155 из 16-й системы в десятичную s = '155' a = int(s, 16) # a = 341, значение 155 в 16-й системе # конвертировать 111 из двоичной системы в десятичную s = '111' a = int(s, 2) # a = 7 # 6. Так нельзя # a = int(111,2) - ошибка, нельзя конвертировать число, должна быть строка
2. Функция str() . Преобразование в строку
Функция str() есть конструктором класса str . Функция возвращает объект в виде строки. Функция используется для конвертирования из одного типа (например числового) в строчный тип.
Функция имеет две реализации:
- str() – без параметров. В этом случае функция возвращает пустую строку;
- str(x) – с параметром x . Параметр x есть объектом некоторого типа. Данный вызов может также содержать еще два дополнительных параметра, которые определяют систему кодирования (по умолчанию система кодирования устанавливается utf-8) и схему обработки ошибок (по умолчанию установлена схема вызова исключения типа UnicodeError).
Результат функции str() может использоваться для вывода в функции print() .
Пример.
# Функция str() # 1. Вызов с целым числом x = 25 s = str(x) # s = '25' - строка символов # 2. Вызов с числом с плавающей запятой y = 2.338 s = str(y) # s = '2.338' # 3. Вызов со строкой s = str("3.778") # s = '3.778' # 4. Вызов со строкой, которая не отображает число s = str("abcdef") # s = 'abcdef' # 5. Вызов без параметров s = str() # s = ''
3. Функция repr() . Преобразование в строку как литерал
Функция repr() реализует преобразование в строку таким образом, если бы эта строка была литералом в программном коде.
Функция repr() может быть применена к:
- целым числам;
- числам с плавающей запятой;
- строкам символов.
Пример 1. Конвертировать целое число в строку, которая представлена литералом.
# Функция repr() # конвертировать целое число в строку number = 25 snumber = repr(number) # snumber = '25' - как строка символов number = -100029 snumber = repr(number) # snumber = '-100029' - как строка символов
Пример 2. Конвертировать в строку число с плавающей запятой.
# Функция repr() # конвертировать число с плавающей запятой в строку number = 25.233 snumber = repr(number) # snumber = '25.233' snumber = repr(-1e-2) # snumber = '-0.01'
Пример 3. Конвертировать строку символов в другую строку так если бы она была литералом.
# Функция repr() # конвертировать строку в строку s1 = 'Text string' s2 = repr(s1) # s2 = "'Text string'" s1 = "Text string" s2 = repr(s1) # s2 = "'Text string'"
Пример 4. Конвертирование кортежа.
# Функция repr() - обработка кортежа x = ( 2.85, 15, 'Hello') str_x = repr(x) # str_x = "(2.85, 15, 'Hello')"
4. Какое отличие между функциями repr() и str() ?
В языке Python функции repr() и str() преобразуют произвольные объекты в их строчное представление.
Разница между функциями проявляется в том, как они конвертируют строку.
Функция repr() возвращает представление строчного объекта в виде строки программного кода, которую можно выполнить чтобы воссоздать этот объект. Иными словами, функция repr() возвращает строку в виде строки. При использовании такого объекта в функции print() будут выведены ограничивающие строку кавычки (строка во вложенных кавычках).
В свою очередь, функция str() используется для конвертирования строки в строку без ее преобразования в предшествующую форму. При использовании результата функции str() в функции print() будет выведена обычная строка в одинарных кавычках.
Например.
# Функции repr() и str() # конвертировать строку в строку s1 = 'Text string' # функция repr() s2 = repr(s1) # s2 = "'Text string'" # функция str() s3 = str(s1) # s3 = 'Text string'
Как видно из вышеприведенного кода, функция repr() возвращает строку как литерал
"'Text string'"
а функция str() возвращает обычную строку
'Text string'
5. Функция float() . Преобразование в число с плавающей запятой
Функция float() возвращает число с плавающей запятой, которое может быть образовано от другого числа или от строки. Функция может вызываться одним из двух способов:
- float() – без параметра. В этом случае возвращается значение 0.0;
- float(x) – где параметр x задает число или строку, которую нужно конвертировать.
В качестве входного параметра или исходного результата функция может использовать грамматические символы:
- «Infinity» или «inf» – обозначают бесконечность. Бесконечность может быть отрицательной: «-Infinity» или «-inf» ;
- «nan» – обозначает неопределенность.
Пример.
# Функция float() - возвращает число с плавающей запятой # 1. Результат получается из числа a = 25 # целое число x = float(a) # x = 25.0 b = 21.555e-2 # число с плавающей запятой x = float(b) # x = 0.21555 # 2. Результат получается из строки # s = 'abcdef' - ошибка, строка не имеет вида числа # x = float(s) # строка в экспоненциальном формате s = '-1.23e-2' x = float(s) # x = -0.0123 # строка в обычном формате s = "288.75" x = float(s) # x = 288.75 - как число # использование в выражении x = float(5.2)+float(3.8)*float(-2.1) # x = -2.7799999999999994 # использование со знаком + x = float('+2.34') # x = 2.34 # использование со словом "Infinity" или "inf" x = float("Infinity") # x = inf x = float('-inf') # x = -inf - с отрицательным знаком # использование со словом "nan" x = float("nan") # x = nan x = float() # x = 0.0
6. Функции ord() и chr() . Преобразование кодов символов
Функции ord() и chr() используются для одиночных символов. Эти функции являются инверсными друг к другу.
Функция chr() позволяет получать символ на основе его кода. Функция ord() позволяет получить код на основе представления символа.
Общая форма вызова функции chr() следующая
c = chr(i)
где c – символьное представление символа с Unicode-кодом i .
Общая форма вызова функции ord()
i = ord(c)
где i – код символа c .
Пример.
# Функции chr() и ord() # 1. Функция chr() code = 49 # код в десятичной системе исчисления symbol = chr(code) # symbol = '1' - цифра '1' code = 100 symbol = chr(code) # symbol = 'd' code = 7785 symbol = chr(code) # symbol = 'ṩ' - кодирование Unicode # 2. Функция ord symbol = '5' code = ord(symbol) # code = 53 symbol = 'ṩ' code = ord(symbol) # code = 7785 symbol = ' ' # символ пробел code = ord(symbol) # code = 32
7. Можно ли в Python сложить строку с числом?
Нет, нельзя. Если нужно сложить число в форме строки, то для этого используется соответствующая функция преобразования. Если нужно сложить две строки (конкатенация строк), то число конвертируется в строку с помощью соответствующей функции.
Пример.
# Сложить строку с числом не получится s = '25' # это строка a = 30 # это число # Случай 1. Сложить (суммировать) два числа # Предварительно нужно конвертировать строку в число b = int(s) res = a + b print('As numbers: a + s = ', res) # Случай 2. Сложить две строки # Предварительно нужно конвертировать число в строку res_str = str(a) + s print('As strings: a + s = ', res_str)
Результат выполнения программы
As numbers: a + s = 55 As strings: a + s = 3025
Связанные темы
- Строки. Общие понятия. Объявление строки. Операции над строками. Примеры
- Экранированные последовательности. Неформатированные строки. Многострочные блоки текста
- Доступ по индексам. Срезы. Получение фрагмента строки. Примеры
Пользовательский ввод чисел в строку
Функция input() возвращает все в виде строки, поэтому нужно выполнить явную конвертацию, чтобы получить целое число. Для этого пригодится функция int() .
# вывод суммы двух чисел, введенных пользователем
num_1 = int(input("Введите первое число: "))
num_2 = int(input("Введите второе число: "))
print("Тип num_1:", type(num_1))
print("Тип num_2:", type(num_2))
result = num_1 + num_2
print("Сумма введенных чисел:", result)int(string) конвертирует переданную строку в целое число.
Ввода числа float
По аналогии можно использовать функцию float() .
float_1 = float(input("Введите число: "))
print("Тип float_1:", type(float_1))
result = float_1 ** 2
print("Число в квадрате:", result)Введите число: 1.8 Тип float_1: Число в квадрате: 3.24
Ввод чисел в строку через пробел
Но что произойдет, если вы не знаете количество элементов ввода?
Предположим, что от пользователя нужно получить список чисел и вернуть их сумму. При этом вы не знаете количество элементов в этом списке. Как же запросить ввод для него?
Для этого можно использовать split и функции map . Метод split() делит введенную строку на список подстрок. После этого map() выполняет функцию int() для каждого элемента списка.
entered_list = input("Введите список чисел, разделенных пробелом: ").split()
print("Введенный список:", entered_list)
num_list = list(map(int, entered_list))
print("Список чисел: ", num_list)
print("Сумма списка:", sum(num_list))Введите список чисел, разделенных пробелом: 1 34 4 6548 Введенный список: ['1', '34', '4', '6548'] Список чисел: [1, 34, 4, 6548] Сумма списка: 6587
- input() возвращает список, содержащий числа, разделенные запятыми.
- split() возвращает список строк, разделенных пробелами.
- map() выполняет операцию int() для всех элементов списка и возвращает объект map .
- list() конвертирует объект map снова в список.
Есть альтернативный способ получить список:
entered_list = input("Введите список чисел, разделенных пробелом: ").split()
num_list = [int(i) for i in entered_list]
print("Список чисел: ", num_list)Обработка ошибок при пользовательском вводе
Часто при конвертации типов возникает исключение ValueError .
Это происходит в тех случаях, когда введенные пользователем данные не могут быть конвертированы в конкретный тип.
Например, пользователь вводит случайную строку в качестве возраста.
num = int(input("Введите возраст: "))Функция int() ожидает целочисленное значение, обернутое в строку. Любое другое значение приводит к ошибке. Вот что будет, если, попробовать ввести «Двадцать»:
Введите возраст: Двадцать --------------------------------------------------------- ValueError Traceback (most recent call last) in ----> 1 num_1 = int(input('Введите возраст: ')) ValueError: invalid literal for int() with base 10: 'Двадцать'
Чтобы убедиться, что пользователь вводит только подходящую информацию, нужно обработать массу подобных ошибок. Для этого будем использовать перехват исключений.
try:
num = int(input("Введите число: "))
print("Все верно. Число:", num)
except ValueError:
print("Это не число.")Посмотрим, как ввод «Двадцать» сработает теперь:
Введите число: Двадцать Это не число.
В этом примере если пользователь вводит нечисловое значение, то возникает исключение. Однако оно перехватывается инструкцией except , которая в ответ выводит: «Это не число». Благодаря использованию конструкции try-except программа не прекратит работать при некорректном вводе.
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ.
Мои контакты: Почта
Python Q https://yandex.ru/q/loves/python OnlinePython Q CEO Pythonru admin@pythonru.com https://secure.gravatar.com/avatar/b16f253879f7349f64830c64d1da4415?s=96&d=mm&r=g CEO Pythonru Python Александр Редактор https://t.me/cashncarryhttps://pythonru.com/https://yandex.ru/q/profile/cashnc/ PythonRu.com admin@pythonru.com Alex Zabrodin 2018-10-26 Online Python, Programming, HTML, CSS, JavaScript
[python]Сконвертировать целое число в байтовую строку
Какой самый эффективный способ сконвертировать целое число в байтовую строку в питоне (2.7)? Есть такой вариант:
binascii.unhexlify("%x" % n)
Подозреваю, что это не самый эффективный метод. Через struct сделать не выходит - не работает для больших чисел.
provaton ★★★★★
13.03.12 14:28:21 MSK
jessey
( 13.03.12 14:31:31 MSK )в StringIO записать как двоичные данные?
anonymous
( 13.03.12 14:45:24 MSK )
anonymous
( 13.03.12 14:45:38 MSK )
Ответ на: комментарий от anonymous 13.03.12 14:45:38 MSKГоворю же - не работает для больших чисел.
provaton ★★★★★
( 13.03.12 14:52:31 MSK ) автор топика
Ответ на: комментарий от jessey 13.03.12 14:31:31 MSKТы хоть понял о чем я?
provaton ★★★★★
( 13.03.12 14:52:41 MSK ) автор топика
Ответ на: комментарий от anonymous 13.03.12 14:45:24 MSKЧтоб записать двоичные данные как раз и надо иметь байтовую строку.
provaton ★★★★★
( 13.03.12 14:57:17 MSK ) автор топика
Ответ на: комментарий от provaton 13.03.12 14:52:31 MSKИспользуй в struct q:
>>> struct.unpack('q', struct.pack('q', 100000000000000000)) (100000000000000000,)
anonymous
( 13.03.12 14:57:38 MSK )
Ответ на: комментарий от anonymous 13.03.12 14:57:38 MSKНе работает, у меня очень большое число (битовая длина - 4096)
In [3]: struct.unpack('q', struct.pack('q', a)) --------------------------------------------------------------------------- error Traceback (most recent call last) /home/nss/ in () ----> 1 struct.unpack('q', struct.pack('q', a)) error: integer out of range for 'q' format code
provaton ★★★★★
( 13.03.12 15:15:25 MSK ) автор топика
Ответ на: комментарий от provaton 13.03.12 15:15:25 MSKу меня очень большое число (битовая длина - 4096)
И в каком «двоичном представлении» ты хочешь его видеть? %)
tailgunner ★★★★★
( 13.03.12 15:16:26 MSK )
Ответ на: комментарий от tailgunner 13.03.12 15:16:26 MSK> И в каком «двоичном представлении» ты хочешь его видеть? %)
Мне надо закодировать RSA-подпись так, что можно было ее верифицировать в php (пока пробую через http://phpseclib.sourceforge.net/). pycrypto возвращает подпись числом. phpseclib число не читает, читает байтовую строку. Вот и думаю что делать. Брать openssl не хочется, там API какой-то жуткий, а задача-то простейшая.
provaton ★★★★★
( 13.03.12 15:19:57 MSK ) автор топика
Ответ на: комментарий от provaton 13.03.12 15:19:57 MSKМде. Тогда просто используй hex(твоечисло).
Числа в строке
Напишите функцию from_string_to_list(string, container), которая принимает два аргумента: строку string, состоящую из целых чисел, написанных через пробел, и список container. Функция должна извлечь из строки числа и добавить их в конец списка.
Ввод Вывод
a = [1, 2, 3] 1 2 3 1 3 99 52
from_string_to_list("1 3 99 52", a)
print(*a)Ввод Вывод
a = [77, 'abc'] 77 abc
from_string_to_list("", a)
print(*a)Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:Определите среднее геометрическое чисел от числа в строке А к числу в строке В включительно
Не могу понять что нужно сделать с числами. Задано текстовый файл, в каждой строке которого.Работа с массивами. Поиск наименьшего числа в строке и наибольшего в строке
Добрый вечер. Надо найти наименьшее число в строке и наибольшее в столбце. Примерно вот так.два числа в первой строке и один из знаков +,-,*,/ во второй строке
Товарищи, помогите составить прогу в паскале которая позволит ввести два числа в первой строке и.Как сделать так, чтобы программа различала числа и другие символы в строке в строке?
Например: из строки 54+3 программа должна записать числа 54 и 3 в вектор, и сложить их.Найти все числа в строке и вывести каждое число в отдельной строке (ошибка в коде)
Помогите пожалуйста с кодом. Задание такое: Найти все числа в строке, каждое число вывести в.3540 / 2144 / 566
Регистрация: 02.09.2015
Сообщений: 5,435Сообщение было отмечено ArtAndreev21 как решение
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13In [1]: def from_string_to_list(string, container): . container.extend(map(int, string.split())) . In [2]: a = [1, 2, 3] . from_string_to_list("1 3 99 52", a) . print(*a) 1 2 3 1 3 99 52 In [3]: a = [77, 'abc'] . from_string_to_list("", a) . print(*a) 77 abc