C-style форматирование через % и оператор %
less_12__str_formatting/theory_01__c_style.md
Разбирает старейший способ форматирования строк в Python, унаследованный от C: спецификаторы %s/%d/%f/%x внутри строки и оператор % справа, с кортежем значений при их множественности. Таблица покрывает все основные спецификаторы плюс приёмы ширины/выравнивания/нулей (%10s, %-10s, %05d). Показаны две частые ошибки — несовпадение типа со спецификатором (TypeError) и забытые скобки вокруг кортежа значений — с реальными трассировками.
- Таблица спецификаторов: %s, %d, %f, %e, %x, %X, %o, %c, %%
- '%10s' % "hi" и '%-10s' % "hi" — ширина и выравнивание
- '%05d' % 7 — дополнение нулями
- "Name: %d" % ("Alice", 30) → TypeError (тип не совпал со спецификатором)
- "..." % "Alice", 30 без скобок → TypeError: not enough arguments
- Плюс формата: шаблон можно сохранить в переменную и применять % позже
Показать начало файла (72 строк всего)
# C-style
## Правило C-style форматирования (%)
- В строке пишутся спецификаторы вида `%s`, `%d`, `%f`, `%x` и т. д.
- После строки ставится оператор `%`
- Справа от него указываются значения, которые должны подставиться на место спецификаторов:
- Если одно значение → можно без скобок.
- Если несколько значений → обязательно кортеж (…).
- Тип значения должен совпадать со спецификатором.
## Таблица спецификаторов
| Спецификатор | Описание | Пример кода | Результат |
|--------------|------------------------------------------|----------------------------------|---------------------|
| %s | Строка | `"Hello %s" % "World"` | Hello World |
| %d | Целое число (десятичное) | `"Возраст: %d" % 25` | Возраст: 25 |
| %i | Целое число (то же, что и %d) | `"%i" % 42` | 42 |
| %f | Число с плавающей точкой (6 знаков) | `"%.2f" % 3.14159` | 3.14 |
| %e | Экспоненциальная форма (с `e`) | `"%e" % 1500` | 1.500000e+03 |
| %E | Экспоненциальная форма (с `E`) | `"%E" % 1500` | 1.500000E+03 |
| %x | Целое в шестнадцатеричном (строчные) | `"%x" % 255` | ff |
| %X | Целое в шестнадцатеричном (заглавные) | `"%X" % 255` | FF |
| %o | Целое в восьмеричной системе | `"%o" % 10` | 12 |
| %c | Один символ (по коду Unicode/числу) | `"%c" % 65` | A |
| %% | Символ процента | `"Скидка 50%%"` | Скидка 50% |
## Дополнительно: ширина, выравнивание, нули
```python
print("'%10s'" % "hi") # ' hi' (справа, ширина 10)
print("'%-10s'" % "hi") # 'hi ' (слева, ширина 10)
print("'%05d'" % 7) # '00007' (число с нулями до 5 символов)
```
## Примеры
```python
s1 = "Hello %s" % "World"
print(s1) # Hello World
s2 = "Name: %s, Age: %d" % ("Alice", 30)
print(s2) # Name: Alice, Age: 30
s3 = "Name: %d, Age: %d" % ("Alice", 30)
print(s3) # Name: Alice, Age: 30
# s3 = "Name: %d, Age: %d" % ("Alice", 30)
# ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
# TypeError: %d format: a real number is required, not str
s4 = "Name: %s, Age: %d" % "Alice", 30
print(s4)
# s4 = "Name: %s, Age: %d" % "Alice", 30
# ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~
# TypeError: not enough arguments for format string
…