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:
-
UML: For å planlegge koden sin på forhånd.
-
Objektorientert Programmering: For å strukturere koden ved hjelp av klasser og objekter.
-
Datasikkerhet: For å beskytte brukerens data.
-
API-integrasjon: For å hente informasjon fra eksterne tjenester.
-
Filbehandling: For å lagre og hente data.
-
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