# Початкові нулі

Для Python >= 3.6, використовуйте **f-string**:

```
x = 10
print(f'{x:05}')
#           ^ бажана довжина рядка
00010
```

або метод рядків **format**, який працює в усіх версіях:

```
'{:05}'.format(10)   # '00010'
#   ^ бажана довжина рядка
```

### Увага! <a href="#ale" id="ale"></a>

**Якщо змінна, що перетворюється - рядок, а не число - нулі додадуться позаду!**

Числа:

```
year = 2022
mon = 9
day = 5

print(f'{year}-{mon:02}-{day:02}')  # '2022-09-05'
```

Рядки, які зазвичай отримуємо з web-форм, або вводу з консолі:

```
year = '2022'
mon = '9'
day = '5'

print(f'{year}-{mon:02}-{day:02}')  # '2022-90-50' !!!!
```

### Для рядків існує: `str.zfill()` - доповнює рядок нулями зліва <a href="#dlya-strok-stringzfill-dopovnyuye-stroku-nulyami-zliva" id="dlya-strok-stringzfill-dopovnyuye-stroku-nulyami-zliva"></a>

```
a = "hello"
b = "welcome to the jungle"
c = "10.000"

print(a.zfill(10))  # '00000hello'
print(b.zfill(10))  # 'welcome to the jungle'
print(c.zfill(10))  # '000010.000'
```

### Более подробно: <a href="#bolee-podrobno" id="bolee-podrobno"></a>

Желательно знать или вычислить максимальное количество позиций, которое потребуется для вывода числа *max\_width*.

Если есть отрицательные числа, нужно учитывать, что знак будет занимать одну из позиций. Можно сделать так, чтобы знак выводился всегда.

Для дробных чисел нужно учитывать позицию для точки (запятой).

```
max_width = 5
print(f'{10:0{max_width}}')      # 00010   - вывод с добавлением нолей
print(f'{-10:0{max_width}}')     # -0010   - минус забирает одну позицию
print(f'{-10000:0{max_width}}')  # -10000  - если число слишком большое, 
                                 #           строка будет длиннее, чем max_width
print(f'{10:+0{max_width}}')     # +0010   - обязательный вывод знака
print(f'{10.5:0{max_width}}')    # 010.5   - точка забирает одну позицию
print(f'{10:{max_width}}')       #    10   - можно заполнять пробелами
```

Подробнее про возможности форматирования можно почитать в документации:

* Описание мини-языка форматирования <https://docs.python.org/3/library/string.html#format-specification-mini-language>
* f-string <https://docs.python.org/3/reference/lexical_analysis.html#f-strings>
* str.format <https://docs.python.org/3/library/stdtypes.html#str.format>
