Строковое представление числа: от int до string в Python
Основной и самый простой способ получить строковое представление числа - использовать встроенную функцию str(). Она возвращает человекочитаемую строку, которая подходит для вывода на экран или записи в файл.
number = 123
string_number = str(number)
print(string_number) # '123'
print(type(string_number)) # <class 'str'>
изменить тип в python (изменить тип в python)
Функция работает с любыми числовыми типами: целыми (int), вещественными (float), комплексными (complex). Проблемы возникают только при передаче нечислового объекта, но в рамках преобразования типов это основной инструмент.
Типичная ошибка: попытка сложить число и строку без явного преобразования. Например:
age = 25
print("Возраст: " + age) # TypeError: can only concatenate str (not "int") to str
Python int to str (преобразование int в строку в python)
Исправляется предварительным вызовом str(age).
Как получить строку для воссоздания объекта с помощью repr()?
Функция repr() возвращает строку, которая, будучи переданной в eval(), воссоздаст исходный объект (насколько это возможно). Для чисел отличие заметно у вещественных чисел: repr() даёт более точное представление.
from decimal import Decimal
x = 1.0 / 3.0
print(str(x)) # 0.3333333333333333
print(repr(x)) # 0.3333333333333333 (на практике совпадает, но гарантировано больше знаков)
y = Decimal('0.1')
print(repr(y)) # Decimal('0.1')
Python bytes to string (преобразование байтов в строку в python)
Использование eval() на непроверенной строке, полученной через repr(), может быть небезопасным. Не рекомендуется применять eval() к строкам из ненадёжных источников.
Как вставить число в строку с форматированием (f-строки)?
F-строки (Python 3.6+) позволяют включать выражения прямо в строковый литерал. Можно задать количество знаков после запятой, выравнивание, символ-заполнитель и другие спецификаторы.
pi = 3.1415926535
print(f"Число π примерно {pi:.3f}") # Число π примерно 3.142
print(f"{pi:10.2f}") # ' 3.14' (ширина 10)
print(f"{123456789:,}") # '123,456,789' (разделители тысяч)
как выводить в строку python (преобразование вывода в строку в python)
Ошибка: неправильный синтаксис спецификатора (например, :.2f для целого числа вызовет ValueError). Если переменная не определена, возникает NameError.
Какие старые способы форматирования существуют (format() и %)?
Метод format() и оператор % (старый стиль) тоже преобразуют числа в строки с контролем представления.
# Метод format()
print("{:.2f}".format(3.14159)) # '3.14'
print("{:<10}".format(42)) # '42 ' (выравнивание влево)
# Оператор %
print("%.2f" % 3.14159) # '3.14'
print("%d %x %o" % (255, 255, 255)) # '255 ff 377'
Python list to string (преобразование списка в строку python)
Путаница между типами спецификаторов: %d для целых, %f для вещественных. Использование неверного спецификатора ведёт к TypeError.
Как получить строку в другой системе счисления (двоичной, восьмеричной, шестнадцатеричной)?
Встроенные функции bin(), oct(), hex() возвращают строку с префиксом системы. Для вывода без префикса используют format() или f-строки.
n = 255
print(bin(n)) # '0b11111111'
print(oct(n)) # '0o377'
print(hex(n)) # '0xff'
print(f"{n:#x}") # '0xff' (с префиксом)
print(f"{n:08b}") # '11111111' (двоичное без префикса, 8 бит с ведущими нулями)
Python string integer (преобразование строки в целое число python)
Ошибки: передача нецелого числа (например, float) вызовет TypeError: 'float' object cannot be interpreted as an integer.
Как из строки получить число (обратное преобразование)?
Для преобразования строки в число используются int() и float(). Можно указать основание системы счисления для int().
int("123") # 123
int("ff", 16) # 255
float("3.14") # 3.14
# Не рекомендуется:
eval("123") # 123 (опасно)
преобразовать тип данных python (преобразование типа данных в python)
Ошибка: ValueError возникает, если строка не является валидным числом или содержит лишние символы (например, int("12.3")). Пробелы в начале и конце допускаются. Для вещественных чисел с ведущими нулями проблем нет, но int("0x1A") не сработает без указания base=16.
Что делать, если строка может быть не числом? Обработка ошибок.
Для безопасного преобразования используется конструкция try-except.
def safe_int(s):
try:
return int(s)
except ValueError:
return None
print(safe_int("42")) # 42
print(safe_int("abc")) # None
Некорректная обработка: перехват слишком общего исключения (например, except Exception) может скрыть другие ошибки. Лучше ловить только ValueError.
Расширенные примеры и советы по строковому представлению чисел
Ниже приведены более сложные случаи, которые могут потребоваться на практике.
Форматирование с выравниванием, заполнением и знаками
# Выравнивание вправо, ширина 10, заполнитель '0'
print(f"{42:010d}") # '0000000042'
# Выравнивание влево с заполнением '*'
print(f"{42:*<10}") # '42********'
# Центрирование
print(f"{42:=^10}") # '====42===='
# Принудительный вывод знака
print(f"{42:+} {42:-} {42: }") # '+42 42 42'
0000000042 42******** ====42==== +42 42 42
Научная (экспоненциальная) нотация
big = 1.234e6
print(f"{big:.2e}") # '1.23e+06'
print(f"{big:.2E}") # '1.23E+06'
print(f"{big:.0e}") # '1e+06'
1.23e+06 1.23E+06 1e+06
Форматирование с разделителями тысяч и локалью
import locale
locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8') # может отличаться в зависимости от ОС
print(locale.format_string("%d", 1234567, grouping=True)) # '1 234 567' (с пробелом)
# В f-строках без locale:
print(f"{1234567:,}") # '1,234,567'
1 234 567 1,234,567
Преобразование с сохранением точности (decimal.Decimal)
from decimal import Decimal, getcontext
getcontext().prec = 6
d = Decimal('1.23456789')
print(f"{d:.4f}") # '1.2346' (округление)
print(str(d)) # '1.23456789' (полное значение)
print(repr(d)) # "Decimal('1.23456789')"
1.2346
1.23456789
Decimal('1.23456789')
Комплексные числа и их строковое представление
c = 3 + 4j
print(str(c)) # '(3+4j)'
print(repr(c)) # '(3+4j)'
print(f"{c:.2f}") # '(3.00+4.00j)' (форматирование компонент)
(3+4j) (3+4j) (3.00+4.00j)
Парсинг чисел из строк с нестандартным форматом
# Удаление разделителей и замена запятой на точку
s = "1 234,56"
s_clean = s.replace(' ', '').replace(',', '.')
value = float(s_clean)
print(value) # 1234.56
1234.56
Использование регулярных выражений для извлечения чисел
import re
text = "Цена: 199.99 руб., количество: 5 шт."
matches = re.findall(r"\d+\.?\d*", text)
print(matches) # ['199.99', '5']
numbers = [float(x) if '.' in x else int(x) for x in matches]
print(numbers) # [199.99, 5]
['199.99', '5'] [199.99, 5]