def formatuj(*args, **kwargs):
    # etap 1: łączę linie do pojedynczego napisu
    # zamiast tego można użyć join
    napis = ''
    for arg in args:
        if napis:
            napis += '\n'
        napis += arg

    # etap 2: podmieniam wszystkie wystąpienia $parametr wartościami parametrów
    for k, v in kwargs.items():
        napis = napis.replace('$'+k, str(v))
    return napis

def formatuj2(*args, **kwargs):
    import re
    return re.sub(r'\$(\w+)', lambda m: str(kwargs[m[1]]), '\n'.join(args))


def test_formatuj_1():
    wynik = formatuj2('Pierwsza linia', 'Druga linia', 'Trzecia linia')
    assert wynik == 'Pierwsza linia\nDruga linia\nTrzecia linia'

def test_formatuj_2():
    wynik = formatuj2('Koszt towaru $nazwa wynosi $cena',
                     'Wydaje mi się, że $cena PLN to trochę dużo',
                     cena = 3900, nazwa = 'karta graficzna')
    assert wynik == 'Koszt towaru karta graficzna wynosi 3900\nWydaje mi się, że 3900 PLN to trochę dużo'

