"""
    фОРМАТИРОВАНИЕ СТРОК В PYTHON

    https://python-scripts.com/string-formatting#old-formatting
    https://pythonworld.ru/osnovy/formatirovanie-strok-metod-format.html
"""

errno = 50159747054
num_float = 123.456789
name = 'Bob'
"""
    Основываясь на этих переменных,
    вы хотите создать строку вывода,
    содержащую простое уведомление об ошибке:

'Hey Bob, there is a 0xbadc0ffee error!'
"""

# неформатированный вывод используя print
print(name)
print(errno)
print('Number float',num_float)

#вывод нескольких переменных в одном print
print(name, errno)

#1 Форматирование строк “По старинке” (оператор %)
"""
    Строки в Python содержат уникальную встроенную операцию,
    доступ к которой можно получить через оператор %.
    Это позволяет заметно упростить позиционное форматирование.
    Если вы когда-либо работали с функцией printf в С, вы сразу узнаете, как это работает.
    Вот простой пример:
"""
print('Hello, %s' % name)
print('Number %.3f' % num_float)
print('Number %2i' % num_float)

# Вывод: "Hello, Bob"

"""
    Я использую определитель формата %s в данном случае, чтобы сказать Python,
    где именно заменить значение имени, представленного в виде строки.

    Существуют другие определители формата, которые позволяют вам контролировать формат выдачи.
    Например, возможно конвертировать числа в шестнадцатеричную нотацию или добавлять пробелы
    для создания хорошо отформатированных таблиц и отчетов.
"""

# Оператор %
# Это позволяет заметно упростить позиционное форматирование

print('Hello, %s' % name)

# Вывод: "Hello, Bob"

print('%x' % errno)
 
# Вывод: 'badc0ffee'

# Так как оператор % принимает только один аргумент,
# вам нужно обернуть правую часть в кортеж, вот так:

print('Hey %s, there is a 0x%x error!' % (name, errno))

# 'Hey Bob, there is a 0xbadc0ffee error!'

print('Hey %s, there is a %i error!' % (name, errno))


#2 Форматирование строк “По новому” (str.format)
"""
    Python 3 предоставил новый способ форматирования,
    который также был внесен в раннюю версию Python 2.7.
    Этот “новый стиль” форматирования строк избавляется от специального синтаксиса оператора %
    и делает синтаксис для форматирования строк более регулярным.
    Теперь форматирование обрабатывается вызовом .format() в объекте строки.

    Вы можете использовать format(), чтобы выполнить простое позиционное форматирование,
    также, как мы делали это по старинке:
"""
print('Hello, {}'.format(name))
# Вывод: 'Hello, Bob'

print('Hello, {}, code error: {}'.format(name, errno))
# Вывод: 'Hello, Bob'
"""
    Или, вы можете сослаться на свои подстановки переменных по имени,
    и использовать их в том порядке, в котором вам хочется.
    Это достаточно мощный способ, так как он позволяет повторно упорядочить порядок
    отображения без изменения переданных функции format() аргументов:
"""


#3 Интерполяция строк / f-Строки (Python 3.6+)
"""
    Python 3.6 Добавил новый подход форматирования строк
    под названием форматированные строчные литералы, или “f-строки”.
    Этот новый способ форматирования строк позволяет вам использовать
    встроенные выражения Python внутрь строковых констант.
    Вот простой, наглядный пример:
"""
print(f'Hello, {name}!')
# Вывод: 'Hello, Bob!'

"""
    Как вы видите, это добавляет префикс к константе строки с буквой “f” — следовательно,
    названием становится “f-strings”. Этот новый синтаксис форматирования — очень мощный.
    Так как вы можете вставлять произвольные выражения Python,
    вы можете даже проводить встроенную арифметику.
    Посмотрим на пример:
"""

a = 5
b = 10
print(f'Five plus ten is {a + b} and not {2 * (a + b)}.')
 
# Вывод: 'Five plus ten is 15 and not 30.'

"""
    Форматированные строчные литералы — это особенность парсера Python,
    которая конвертирует f-строки в серию строчных констант и выражений.
    Затем, они соединяются и составляют итоговую строку.

    Представьте, что у вас есть следующая функция greet(), которая содержит f-строку:
"""
 
def greet(name, question): 
    return f"Hello, {name}! How's it {question}?"

print(greet('Bob', 'going'))
 
# Вывод: "Hello, Bob! How's it going?"
