PythonPodcast 31 - itnett/FTD02H-N GitHub Wiki

Eventyret om Kodeland og Den Magiske Python – Del 5: Avslutningen – Bygg ditt første store prosjekt

I denne siste episoden skal vår helt, Variabel, samle alt han har lært om Python og programmering for å bygge sitt første store prosjekt. Variabel vil utforske hvordan man kombinerer alt fra variabler, kontrollstrukturer, objektorientering, API-er, og datasikkerhet for å lage en komplett applikasjon. Dette er klimakset på reisen hans gjennom Kodeland, der alt kommer sammen!


Kapittel 1: Planleggingen av prosjektet med UML

Variabel visste at han måtte begynne med en plan. Han tok frem kartet sitt, som UML Mapper hadde lært ham, og startet med å tegne opp de forskjellige delene av prosjektet sitt. Hans mål var å bygge en enkel bruktbil-applikasjon der brukere kunne registrere, søke etter og se detaljer om brukte biler.

Bruk UML til å lage et klasse-diagram som viser hvordan alle delene av applikasjonen henger sammen. Du bør ha en klasse for biler, en for brukere, og en for selve applikasjonen.

Eksempel på UML-diagram:


| BruktBil |

| + merke: str | | + modell: str | | + pris: int | | + kilometerstand: int|

| + vis_info(): void |

     |
     v

| Bruker |

| + navn: str | | + epost: str |

| + registrer_bil() |

Dette diagrammet gir oss et klart bilde av hvordan programmets ulike klasser og metoder vil samhandle med hverandre.

Kapittel 2: Bygg applikasjonen – Objektorientert Programmering

Med planen på plass, begynte Variabel å skrive koden for applikasjonen. Han startet med å lage BruktBil-klassen, der hver bil ville ha egenskaper som merke, modell, pris og kilometerstand. Han inkluderte også metoder for å vise informasjon om bilene.

class BruktBil: def init(self, merke, modell, pris, kilometerstand): self.merke = merke self.modell = modell self.pris = pris self.kilometerstand = kilometerstand

def vis_info(self):
    print(f"Bil: {self.merke} {self.modell}")
    print(f"Pris: {self.pris} kr")
    print(f"Kilometerstand: {self.kilometerstand} km")

Forklaring:

Klasse BruktBil: Denne klassen representerer en bil. Den har fire attributter (merke, modell, pris og kilometerstand) og en metode vis_info() som skriver ut bilens detaljer.

Neste trinn var å lage en Bruker-klasse der hver bruker kan registrere en bil og vise detaljer om den.

class Bruker: def init(self, navn, epost): self.navn = navn self.epost = epost self.biler = []

def registrer_bil(self, bil):
    self.biler.append(bil)
    print(f"{self.navn} har registrert en ny bil: {bil.merke} {bil.modell}")

def vis_biler(self):
    print(f"{self.navn}s biler:")
    for bil in self.biler:
        bil.vis_info()

Forklaring:

Klasse Bruker: Denne klassen representerer en bruker. Brukeren kan registrere biler, og hver bil blir lagret i en liste over biler.

Kapittel 3: Datasikkerhet – Beskytt brukerdata

Variabel ville sørge for at all sensitiv data var beskyttet. Han visste at det var viktig å ikke lagre passord i klartekst, så han brukte hashing for å sikre brukerens passord.

import hashlib

class Bruker: def init(self, navn, epost, passord): self.navn = navn self.epost = epost self.passord_hash = self.hash_passord(passord) self.biler = []

def hash_passord(self, passord):
    return hashlib.sha256(passord.encode()).hexdigest()

# Resten av metodene er de samme som før

Forklaring:

hashlib.sha256: Dette brukes til å lage en sikker hash av passordet slik at det ikke kan leses i klartekst. På denne måten er brukerens data beskyttet, selv om noen får tilgang til databasen.

Kapittel 4: Integrasjon med API – Bruke eksterne tjenester

Variabel ønsket å hente informasjon om bilers modeller og verdier fra et eksternt API. Han brukte et offentlig API for bilpriser og la til funksjonaliteten i applikasjonen.

import requests

class BruktBil: # Som før, men med en ny metode

def hent_bilverdi(self):
    url = f"https://bilapi.no/priser/{self.merke}/{self.modell}"
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        self.pris = data["verdi"]
        print(f"Oppdatert pris for {self.merke} {self.modell} er {self.pris} kr")
    else:
        print("Kunne ikke hente bilverdien.")

Forklaring:

requests.get(): Dette brukes til å hente data fra et eksternt API. API-et returnerer verdien for bilen, som vi deretter oppdaterer i vår applikasjon.

Kapittel 5: Filbehandling – Lagre og hente brukerdata

Variabel ville også sørge for at brukerne kunne lagre bilene sine til en fil, slik at de kunne hente dem igjen senere.

import json

class Bruker: # Som før, men med nye lagringsmetoder

def lagre_data(self):
    data = {
        "navn": self.navn,
        "epost": self.epost,
        "biler": [{"merke": bil.merke, "modell": bil.modell, "pris": bil.pris, "kilometerstand": bil.kilometerstand} for bil i self.biler]
    }
    with open(f"{self.navn}_data.json", "w") as fil:
        json.dump(data, fil)
    print(f"Data lagret for {self.navn}.")

def hent_data(self):
    try:
        with open(f"{self.navn}_data.json", "r") as fil:
            data = json.load(fil)
            self.navn = data["navn"]
            self.epost = data["epost"]
            for bil_data i data["biler"]:
                bil = BruktBil(bil_data["merke"], bil_data["modell"], bil_data["pris"], bil_data["kilometerstand"])
                self.biler.append(bil)
        print(f"Data hentet for {self.navn}.")
    except FileNotFoundError:
        print("Ingen data funnet.")

Forklaring:

json.dump(): Dette lagrer brukerdata til en fil i JSON-format.

json.load(): Dette laster brukerdata tilbake fra filen og oppretter bilene på nytt.

Kapittel 6: Testing og Debugging

Variabel sørget for at koden hans ble testet. Han skrev automatiserte tester som skulle sørge for at funksjonaliteten var korrekt.

def test_bil_info(): bil = BruktBil("Toyota", "Yaris", 100000, 50000) assert bil.merke == "Toyota" assert bil.kilometerstand == 50000 print("Test for bilinfo bestått.")

test_bil_info()

Forklaring:

assert: Dette brukes for å sjekke at en betingelse er sann. Hvis den ikke er det, vil programmet kaste en feilmelding.

Oppsummering av Del 5

Variabel har nå fullført sitt første store prosjekt. I løpet av reisen har han lært å bruke:

  1. UML: For å planlegge koden sin på forhånd.

  2. Objektorientert Programmering: For å strukturere koden ved hjelp av klasser og objekter.

  3. Datasikkerhet: For å beskytte brukerens data.

  4. API-integrasjon: For å hente informasjon fra eksterne tjenester.

  5. Filbehandling: For å lagre og hente data.

  6. Testing og Debugging: For å sørge for at koden fungerer som forventet.

Dette markerer slutten på Variabels reise gjennom Kodeland. Han har mestret grunnleggende og avanserte konsepter i Python, og nå er det din tur til å gjøre det samme!


Takk for følget!

Denne episoden markerer slutten på eventyret i Kodeland, men det er starten på ditt eget programmeringseventyr. Nå som du har sett hvordan Variabel har vokst