12. Formátované řetezce#
12.1. Teorie#
F-řetězce (f-strings) jsou moderní způsob formátování řetězců v jazyce Python, který byl představen ve verzi Python 3.6. Umožňují jednoduché vkládání proměnných nebo výrazů přímo do řetězců bez nutnosti používat složité konstrukce pro formátování.
F-řetězce se vyznačují tím, že obsahují prefix f
před samotným textovým řetězcem. V rámci f-řetězce můžete vkládat proměnné nebo výrazy pomocí složených závorek {}
. Tyto proměnné a výrazy budou nahrazeny svými hodnotami při vyhodnocování řetězce.
Metod jak sestavit řetězec obsahující vhodnoty proměnných je v Pythonu několik. Například převod čísla na řetězec a spojování řetezců. Použití f-řetězců namísto těchto jiných metod usnadňuje čitelnost kódu a zjednodušuje práci s formátováním řetězců. Je možné je využít například pro počítačem generované nadpisy grafu nebo poznámky k tabulkám.
12.2. Ukázky#
12.2.1. Vkládání proměnných#
Vkládání obsahů proměnných do řetězce je snadné. Před řetězec přidáme příznak f
a uvnitř řetězce použijeme jméno proměnné ve složených závorkách.
datum= "31.12.2022"
strom = 1
# Jednoduchý f-řetězec
nadpis= f"Kmity stromu, strom číslo {strom}, měřeno {datum}."
print(message)
# Výstup: Kmity stromu, strom číslo 1, měřeno 31.12.2022.
12.2.2. Vkládání výrazů obsahujících proměnné#
Ve složených závorkách může být kromě proměnné i výraz nebo funkce, používající tyto proměnné. Například zde do řetězce dosadíme součet dvou čísel.
a = 3
b = 5
result = f"Součet čísel {a} a {b} je {a + b}."
print(result)
# Výstup: Součet čísel 3 a 5 je 8.
12.2.3. Formátování desetinných čísel#
Někdy je vhodné čísla zakrouhlit nebo zapsat předem daným formátem. Například příkaz np.arange(0.1,0.5,0.05)
vygeneruje seznam čísel od 0.1 do 0.5 (vyjma koncové hodnoty) po krocích 0.05. Vlivem výpočtů ve dvojkové soustavě však nemáme přesně čísla 0.1, 0.15, 0.20 atd, ale čísla se mohou lišit, viz následující kód a jeho výstup. První číslo je zpracovávané číslo, poslední číslo je zakrouhlené na dvě desetinná místa pomocí funkce np.round
. Protože ale zakrouhlování vynechává koncové nuly, úpo zaokrouhlení jsou některá čísla dvouciferná a některá jednociferná. Toto není vyhovující. Řešením je formátování pomocí f-řetězce, kdy ke jménu proměnné za dvojtečku připojíme informaci o tom, že se hodnota má zapsat na dvě desetinná místa, včetně případné koncové nuly. (Další možnosti formátování f-řetězců objevíte v nápovědě nebo s pomocí AI.)
for i in np.arange(0.1,0.5,0.05):
print (f"{i}, po zformátování: {i:.2f}, po zaokrouhlení {np.round(i,2)}")
Výstupem je
0.1, po zformátování: 0.10, po zaokrouhlení 0.1
0.15000000000000002, po zformátování: 0.15, po zaokrouhlení 0.15
0.20000000000000004, po zformátování: 0.20, po zaokrouhlení 0.2
0.25000000000000006, po zformátování: 0.25, po zaokrouhlení 0.25
0.30000000000000004, po zformátování: 0.30, po zaokrouhlení 0.3
0.3500000000000001, po zformátování: 0.35, po zaokrouhlení 0.35
0.40000000000000013, po zformátování: 0.40, po zaokrouhlení 0.4
0.45000000000000007, po zformátování: 0.45, po zaokrouhlení 0.45
12.3. Úkol#
Uvažujme logistický růst populace, kde rychlost růstu populace o velikost \(x\) v prostředí s nosnou kapacitou \(K\) je dána vztahem
Nadefinujte proměnné x
, r
a K
na hodnoty 0.6, 1.2 a 2.5. Vypočtěte rychlost růstu a uložte do proměnné rychlost
. Do proměnné info
vložte řetězec „Populace o velikosti … roste rychlostí ….“, kde tři tečky budou nahrazeny hodnotami proměnných x
a rychlost
. (Čtvrtá tečka na konci věty je tečka za větou, tu ponechejte.) Desetinná čísla formátujte na tři desetinná místa.