Lekcja 15 - Nikola Horn

Lekcja 15 - Nikola Horn
Photo by Keila Hötzel / Unsplash

Projekt końcowy - Kalkulator VAT dla paczek z Japonii

import requests
import tkinter as tk
import customtkinter as ctk

parametry = {"amount": 1, "from": "JPY", "to": "PLN"}

jeny = requests.get("https://api.frankfurter.app/latest", params=parametry)
odczytanajpy = jeny.json()
jen=odczytanajpy["rates"]["PLN"]

parametryeuro = {"amount": 150, "from": "EUR", "to": "PLN"}

euro = requests.get("https://api.frankfurter.app/latest", params=parametryeuro)
odczytanaeur = euro.json()
czyclo=odczytanaeur["rates"]["PLN"]


okno = ctk.CTk()
okno.title("Kalkulator VAT dla paczek z Japonii")
ctk.set_appearance_mode("dark")
ctk.set_widget_scaling(1.1)



def przelicz1():
    kwota = int(wprowadz.get())
    kwotavat = round((kwota * 23) /100, 2)

    if kwota == 0:
        clo.configure(text=f"""Nie podałeś kwoty.""")
    elif kwota >= czyclo:
        przeliczone.configure(text=f"Kwota twojego zamówienia to {kwota} zł. \n Zapłacisz {kwotavat} zł podatku VAT + 8,50 zł opłaty pocztowej (´⊙ω⊙`)!")
        clo.configure(text=f"""Kwota zamówienia przekracza 150 EUR ({czyclo} zł). 
                      Możliwe oclenie paczki ಥ‿ಥ""")
    else:
        przeliczone.configure(text=f"Kwota twojego zamówienia to {kwota} zł. \n Zapłacisz {kwotavat} zł podatku VAT + 8,50 zł opłaty pocztowej (´⊙ω⊙`)!")
        clo.configure(text=f"Kwota zamówienia nie przekracza 150 EUR ({czyclo} zł). \n Nie musisz płacić cła ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ")
        
def przelicz2():
    kwotajpy = int(wprowadz.get())
    kwota = kwotajpy*jen
    kwotavat = round((kwota * 23) /100, 2)
    
    if kwota == 0:
        clo.configure(text=f"""Nie podałeś kwoty.""")
    elif kwota >= czyclo:
        przeliczone.configure(text=f"Kwota twojego zamówienia to {kwota} zł. \n Zapłacisz {kwotavat} zł podatku VAT + 8,50 zł opłaty pocztowej (´⊙ω⊙`)!")
        clo.configure(text=f"Kwota zamówienia przekracza 150 EUR ({czyclo} zł). \n Możliwe oclenie paczki ಥ‿ಥ")
                      
    else:
        przeliczone.configure(text=f"Kwota twojego zamówienia to {kwota} zł. \n Zapłacisz {kwotavat} zł podatku VAT + 8,50 zł opłaty pocztowej (´⊙ω⊙`)!")
        clo.configure(text=f"Kwota zamówienia nie przekracza 150 EUR ({czyclo} zł). \n Nie musisz płacić cła ٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ")


etykieta = ctk.CTkLabel(okno, text="Wpisz kwotę zamówienia wraz z kosztami przesyłki w jenach lub złotówkach:")
etykieta.pack(pady=20)

wprowadz = ctk.CTkEntry(okno, width=80)
wprowadz.pack()

etykieta = ctk.CTkLabel(okno, text="Wybierz walutę, w której podałeś cenę paczki i przesyłki:")
etykieta.pack(pady=20)

ramka = ctk.CTkFrame(okno)
ramka.pack()

przyciskpln = ctk.CTkButton(ramka, text="Złoty polski PLN", command=przelicz1, fg_color="Hotpink3", hover_color="Hotpink4")
przyciskpln.grid(row=0, column=0)

przyciskjpy = ctk.CTkButton(ramka, text="Jen japoński JPY", command=przelicz2, fg_color="Hotpink3", hover_color="Hotpink4")
przyciskjpy.grid(row=0, column=1)

przeliczone = ctk.CTkLabel(okno, text="")
przeliczone.pack(pady=10)
clo = ctk.CTkLabel(okno, text="")
clo.pack(pady=10)

okno.mainloop()

Notatki z zajęć:

Dictionary/list comprehension

moja_lisy_comp = [number for number in range (1,100)]

moja_lista_comp2 = [number for number in range (1,100) if not number %2]

Poetry

Poetry - Python dependency management and packaging made easy
Python dependency management and packaging made easy

Poetry - Python packaging and dependency manager

GIT

Git – rozproszony system kontroli wersji, który pozwala na niezależne zmiany w jednym kodzie, prowadzone w różnych gałęziach. System pozwala programistom zapisywać wszystkie zmiany w pisanym kodzie w taki sposób, aby niczego nie stracili.

Gry do nauki Gita:

Learn Git Branching
An interactive Git visualization tool to educate and challenge!
Oh My Git!
An open source game about learning Git

GitHub - jest serwisem, który służy do współpracy przy tworzeniu kodu. Jest jednym z najpopularniejszych serwisów internetowych hostujących repozytoria Git w chmurze. Obsługiwane obszary serwisu obejmują nie tylko przechowywanie kodu, ale również zbieranie informacji o błędach, zarządzanie projektem oraz wszystkie niezbędne procesy automatycznego budowania i testowania aplikacji.

Może służyć nam jako portolio!

GitHub: Let’s build from here
GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and fea…

Dokumentacja pracy

Zawsze dokumentuj swoją pracę!

Opisywanie funkcji:

def funkcja ():
  """opis funkcji""" #to się wyświetli jako opis funkcji!
#a to jest komentarz

Warto nauczyć się podstaw Markdowna:

Markdown Reference

Zamiana Markdowna na html jest bardzo prosta. W Joplinie/Obsidianie jest też opcja "export to PDF".

Pandoc - zmienia Markdown na wszystko.

Pandoc - index

Przydatne darmowe oprogramowanie do dokumentacji/notatek: Joplin (do szybkich, codziennych notatek), Obsidian:

Joplin website
Joplin, the open source note-taking application
Obsidian - Sharpen your thinking
Obsidian is the private and flexible note‑taking app that adapts to the way you think.

Wzorce projektowe

Sprawdzone rozwiązania powtarzalnego problemu.

Wzorzec projektowy to powtarzające się rozwiązanie pewnego problemu w programowaniu. Prosto mówiąc, jeżeli niezależnie pracujące od siebie osoby czy zespoły dochodzą do tego samego designu rozwiązującego dany problem, to właśnie mamy do czynienia z wzorcem.

Wzorce nie są przez nikogo wymyślane czy projektowane – są odnajdywane. Jeżeli ktoś zakoduje jakiś design i zacznie go nazywać wzorcem, to nagina rzeczywistość. Ale jeśli ta sama osoba odkryje, że podobne rozwiązanie pojawia się w wielu innych projektach i przypadkiem nie ma jeszcze nazwy, to wtedy może nazwać je wzorcem.
Wzorce projektowe / Design patterns
Wzorce projektowe to typowe rozwiązania problemów często napotykanych podczas projektowania oprogramowania. Każdy z nich stanowi plan, który po odpowiednim dostosowaniu pomaga poradzić sobie z konkretnym problemem w projekcie twojego kodu.

if name = main

if __name__ == "__main__":
    print("Hello, World!")
It's boilerplate code that protects users from accidentally invoking the script when they didn't intend to.

Służy do zabezpieczenia przed uruchomieniem zbędnego kodu z importowanych bibliotek.

SQL

Do pracy z danymi warto ogarnąć/odświeżyć sobie SQL!

SQLite is the most used database engine in the world.
SQLite Home Page