Jak vytvořit tip a kalkulačku rozdělení v Pythonu

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:

  1. Získej vstupy: částka_účtu, procento_spropitného, počet_osob.
  2. Vypočti výši spropitného: částka_účtu * procento_spropitného / 100.
  3. Vypočti příspěvek každého člověka na úhradu účtu: částka_účtu / počet_osob.
  4. Vypočti příspěvek každého člověka na spropitné: částka_spropitného / počet_osob.
  5. 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.