Vytvoření kalkulačky spropitného a rozdělení účtu v Pythonu
Pojďme se společně podívat na postup, jak naprogramovat kalkulačku pro výpočet spropitného a rozdělení účtu mezi více lidí. Tento projekt je skvělou příležitostí k procvičení vašich programátorských dovedností v Pythonu. V tomto článku si ukážeme dva způsoby, jak takovou aplikaci vytvořit: nejprve jako nástroj pro příkazovou řádku a následně s grafickým uživatelským rozhraním (GUI).
Přehled
Aplikaci si představíme ve dvou variantách. První bude jednoduchý skript v Pythonu, který si vyžádá od uživatele potřebné vstupy a vypíše výsledky. Druhá verze pak bude disponovat grafickým rozhraním vytvořeným pomocí knihovny Tkinter.
Specifikace programu
Program bude vyžadovat následující tři vstupy:
- Celkovou částku účtu.
- Procento spropitného, které chcete zaplatit.
- Počet osob, mezi které se má účet rozdělit.
Na základě těchto vstupů program provede výpočty a zobrazí následující:
- Částku, kterou každý člověk přispívá na úhradu účtu.
- Výši spropitného, kterou každý člověk platí.
- Celkovou částku, kterou každý člověk platí (součet příspěvku na účet a spropitného).
Algoritmus
Kalkulačka pro výpočet spropitného a rozdělení účtu bude fungovat na základě následujícího algoritmu:
- Získej vstupy:
částka_účtu
,procento_spropitného
,počet_osob
. - Vypočti výši spropitného:
částka_účtu * procento_spropitného / 100
. - Vypočti příspěvek každého člověka na úhradu účtu:
částka_účtu / počet_osob
. - Vypočti příspěvek každého člověka na spropitné:
částka_spropitného / počet_osob
. - Vypočti celkový příspěvek každého člověka:
příspěvek_na_účet + příspěvek_na_spropitné
.
Požadavky
Pro úspěšné sledování tohoto návodu byste měli mít základní znalosti programování v jazyce Python. Je nutné, abyste rozuměli konceptům, jako jsou funkce a třídy. Kromě toho je nutné mít v systému nainstalovaný Python. Pokud jej ještě nemáte, můžete si jej stáhnout z oficiálních stránek Pythonu. Alternativně můžete využít online kompilátor Pythonu na etechblog.cz, kde můžete spouštět kód přímo v prohlížeči.
Kalkulačka v příkazovém řádku
Vytvoření složky projektu
Začněte tím, že si ve vašem systému vytvoříte prázdnou složku. Například v Ubuntu 22.04 můžete složku vytvořit a přejít do ní pomocí příkazu:
mkdir tip-calculator && cd tip-calculator
Vytvoření Python souboru
Následně si vytvořte soubor, do kterého budeme psát Python skript. K tomu můžete použít například příkaz touch
:
touch main.py
Otevření souboru v textovém editoru
Soubor otevřete ve svém oblíbeném textovém editoru, abyste mohli začít psát kód. Já budu používat nano, textový editor spouštěný v terminálu:
nano main.py
Získání vstupů
Na začátek souboru vložte následující kód pro získání vstupů od uživatele:
# Získání částky účtu jako desetinného čísla bill_amount = float(input("Zadejte částku účtu: ")) # Získání procenta spropitného jako desetinného čísla tip_percentage = float(input("Zadejte procento spropitného: ")) # Získání počtu lidí jako celého čísla number_of_people = int(input("Zadejte počet lidí: "))
Tento kód získá vstupy od uživatele a převede je z textového řetězce na vhodné datové typy (float
pro desetinná čísla, int
pro celá čísla).
Výpočet spropitného
Dalším krokem je výpočet celkové výše spropitného:
tip_amount = bill_amount * tip_percentage / 100
Rozdělení účtu a spropitného
Nyní spočítáme, kolik každý člověk platí za úhradu účtu a spropitné:
# Výpočet příspěvku každého člověka na úhradu účtu bill_contribution = bill_amount / number_of_people # Výpočet příspěvku každého člověka na spropitné tip_contribution = tip_amount / number_of_people
Výpočet celkového příspěvku
Spočítáme celkovou částku, kterou každý člověk platí (součet příspěvku na účet a spropitného):
total_contribution = bill_contribution + tip_contribution
Zobrazení výsledků
Nakonec zobrazíme výsledky uživateli:
# Zobrazení výsledků print("Příspěvek na úhradu účtu na osobu: ", bill_contribution) print("Příspěvek na spropitné na osobu: ", tip_contribution) print("Celkový příspěvek na osobu: ", total_contribution)
Kompletní kód kalkulačky
Kompletní obsah souboru main.py
by měl vypadat takto:
# Získání částky účtu jako desetinného čísla bill_amount = float(input("Zadejte částku účtu: ")) # Získání procenta spropitného jako desetinného čísla tip_percentage = float(input("Zadejte procento spropitného: ")) # Získání počtu lidí jako celého čísla number_of_people = int(input("Zadejte počet lidí: ")) tip_amount = bill_amount * tip_percentage / 100 # Výpočet příspěvku každého člověka na úhradu účtu bill_contribution = bill_amount / number_of_people # Výpočet příspěvku každého člověka na spropitné tip_contribution = tip_amount / number_of_people total_contribution = bill_contribution + tip_contribution # Zobrazení výsledků print("Příspěvek na úhradu účtu na osobu: ", bill_contribution) print("Příspěvek na spropitné na osobu: ", tip_contribution) print("Celkový příspěvek na osobu: ", total_contribution)
Spuštění aplikace
Aplikaci můžete spustit příkazem:
python3 main.py
Kalkulačka s grafickým rozhraním
V této části si ukážeme, jak vytvořit stejnou aplikaci s grafickým rozhraním (GUI). K tomu využijeme knihovnu Tkinter.
Nastavení
Tkinter je knihovna, která je součástí standardní instalace Pythonu, takže byste ji měli mít k dispozici. Nicméně na Linuxových systémech, kde je Python instalován standardně, Tkinter není předinstalován. Proto jej musíte nainstalovat ručně:
sudo apt-get install python3-tk
Vytvoření souboru projektu
Stejně jako v předchozím případě, vytvořte soubor, do kterého budeme psát Python skript. Poté soubor otevřete ve svém oblíbeném textovém editoru:
touch gui.py
Import Tkinter
Na začátek souboru vložte příkaz pro import knihovny Tkinter:
import tkinter as tk
Vytvoření uživatelského rozhraní
Nyní se můžeme pustit do vytváření grafického rozhraní:
# Vytvoření hlavního okna window = tk.Tk() # Nastavení nadpisu okna tk.Label(text="Kalkulačka spropitného a rozdělení účtu").pack() # Vstupní pole pro částku účtu tk.Label(text="Zadejte částku účtu").pack() ent_bill = tk.Entry(width=40) ent_bill.pack() # Vstupní pole pro procento spropitného tk.Label(text="Zadejte procento spropitného").pack() ent_tip = tk.Entry(width=40) ent_tip.pack() # Vstupní pole pro počet lidí tk.Label(text="Zadejte počet lidí").pack() ent_people = tk.Entry(width=40) ent_people.pack() # Tlačítko pro spuštění výpočtu btn_enter = tk.Button(text="Spustit výpočet")
Tento kód vytvoří okno s nadpisem a vstupními poli pro částku_účtu
, procento_spropitného
a počet_osob
. Také se zde vytváří tlačítko pro spuštění výpočtu.
Funkce pro výpočet výstupů
Dále vytvoříme funkci, která se spustí po kliknutí na tlačítko. Tato funkce získá hodnoty z vstupních polí, provede výpočty a zobrazí výsledky. Všechny kroky jsou popsány v komentářích:
def handle_click(event): # Získání vstupních hodnot z polí # a převod na správný datový typ bill_amount = float(ent_bill.get()) tip_percentage = float(ent_tip.get()) number_of_people = int(ent_people.get()) # Výpočet spropitného tip_amount = bill_amount * tip_percentage / 100 # Výpočet příspěvku na úhradu účtu na osobu bill_contribution = bill_amount / number_of_people # Výpočet příspěvku na spropitné na osobu tip_contribution = tip_amount / number_of_people # Výpočet celkového příspěvku na osobu total_contribution = bill_contribution + tip_contribution # Vytvoření textu pro zobrazení výsledku output = f'Účet na osobu: {bill_contribution:.2f} Kč\nSpropitné na osobu: {tip_contribution:.2f} Kč\nCelkem na osobu: {total_contribution:.2f} Kč' # Zobrazení výsledku v textovém poli tk.Label(text=output).pack() # Aktualizace okna pro zobrazení změn window.update()
Propojení události s tlačítkem
Nyní je třeba funkci handle_click
propojit s událostí kliknutí na tlačítko. Událost kliknutí na tlačítko se v Tkinter reprezentuje řetězcem <Button-1>
. Pro propojení události s funkcí se používá metoda bind
:
btn_enter.bind('<Button-1>', handle_click) btn_enter.pack()
Spuštění okna
Pro spuštění okna je nutné zavolat metodu mainloop()
:
window.mainloop()
Kompletní kód kalkulačky
Kompletní kód gui.py
by měl vypadat takto:
import tkinter as tk # Vytvoření hlavního okna window = tk.Tk() # Nastavení nadpisu okna tk.Label(text="Kalkulačka spropitného a rozdělení účtu").pack() # Vstupní pole pro částku účtu tk.Label(text="Zadejte částku účtu").pack() ent_bill = tk.Entry(width=40) ent_bill.pack() # Vstupní pole pro procento spropitného tk.Label(text="Zadejte procento spropitného").pack() ent_tip = tk.Entry(width=40) ent_tip.pack() # Vstupní pole pro počet lidí tk.Label(text="Zadejte počet lidí").pack() ent_people = tk.Entry(width=40) ent_people.pack() # Tlačítko pro spuštění výpočtu btn_enter = tk.Button(text="Spustit výpočet") def handle_click(event): # Získání vstupních hodnot z polí # a převod na správný datový typ bill_amount = float(ent_bill.get()) tip_percentage = float(ent_tip.get()) number_of_people = int(ent_people.get()) # Výpočet spropitného tip_amount = bill_amount * tip_percentage / 100 # Výpočet příspěvku na úhradu účtu na osobu bill_contribution = bill_amount / number_of_people # Výpočet příspěvku na spropitné na osobu tip_contribution = tip_amount / number_of_people # Výpočet celkového příspěvku na osobu total_contribution = bill_contribution + tip_contribution # Vytvoření textu pro zobrazení výsledku output = f'Účet na osobu: {bill_contribution:.2f} Kč\nSpropitné na osobu: {tip_contribution:.2f} Kč\nCelkem na osobu: {total_contribution:.2f} Kč' # Zobrazení výsledku v textovém poli tk.Label(text=output).pack() # Aktualizace okna pro zobrazení změn window.update() btn_enter.bind('<Button-1>', handle_click) btn_enter.pack() window.mainloop()
Spuštění GUI aplikace
Aplikaci můžete spustit pomocí příkazu:
python3 gui.py
Po spuštění by se mělo zobrazit okno s aplikací:
Aplikaci můžete vyzkoušet zadáním ukázkových vstupů:
Závěrem
V tomto návodu jsme si ukázali, jak vytvořit kalkulačku pro výpočet spropitného a rozdělení účtu dvěma způsoby. První byla varianta v příkazovém řádku, druhá s grafickým rozhraním pomocí knihovny Tkinter. Tento tutoriál slouží jako příklad, jak vytvořit jednoduchý projekt v Pythonu. Pokud si chcete procvičit své dovednosti, doporučujeme kurzy na Datacampu. Pro další inspiraci se můžete podívat na náš článek, jak vytvořit generátor náhodných hesel v Pythonu.