PythonPodcast 52 - itnett/FTD02H-N GitHub Wiki

Python Symboler og Konsepter forklart i detalj – Del 7 🌟

Velkommen tilbake til del 7 av vår Python-serie! I denne delen skal vi fortsette å utforske avanserte emner som algoritmer, grafisk brukergrensesnitt (GUI) med Python, og grunnleggende sikkerhetstiltak i programmering. Vi kommer også til å dekke mer om hvordan man kan strukturere koden for bedre skalerbarhet og lesbarhet.


🛠️ Symboler og konsepter i Python – Del 7

  1. lambda (Anonyme funksjoner)
    ➡️ Norsk: lambda brukes for å lage små, anonyme funksjoner som ofte brukes for kortvarige operasjoner.
    ➡️ Engelsk: lambda is used to create small, anonymous functions that are often used for temporary operations.
# Funksjon som legger til 10
legg_til_10 = lambda x: x + 10
print(legg_til_10(5))  # Output: 15
  1. Rekursjon
    ➡️ Norsk: Rekursjon er når en funksjon kaller seg selv. Dette kan være nyttig for å løse problemer som kan deles opp i mindre underproblemer, som for eksempel faktorisering.
    ➡️ Engelsk: Recursion is when a function calls itself. This can be useful for solving problems that can be broken down into smaller subproblems, such as factorials.
def faktorielle(n):
    if n == 1:
        return 1
    else:
        return n * faktorielle(n - 1)

print(faktorielle(5))  # Output: 120
  1. Algoritmer (Grunnleggende sorteringsalgoritmer)
    ➡️ Norsk: En algoritme er en oppskrift eller en prosess som brukes for å løse et problem. En grunnleggende sorteringsalgoritme er "bubblesort", som sorterer en liste ved å sammenligne og bytte elementer.
    ➡️ Engelsk: An algorithm is a recipe or process used to solve a problem. A basic sorting algorithm is "bubblesort," which sorts a list by comparing and swapping elements.
def bubblesort(liste):
    for i in range(len(liste)):
        for j in range(0, len(liste) - i - 1):
            if liste[j] > liste[j + 1]:
                liste[j], liste[j + 1] = liste[j + 1], liste[j]
    return liste

print(bubblesort([64, 34, 25, 12, 22, 11, 90]))  
# Output: [11, 12, 22, 25, 34, 64, 90]

🎨 Grafisk Brukergrensesnitt (GUI)

  1. Tkinter (GUI-programmering i Python)
    ➡️ Norsk: Tkinter er en standardbibliotek i Python som lar deg lage enkle grafiske brukergrensesnitt (GUI). Dette gjør det mulig for brukere å samhandle med programmet via vinduer og knapper.
    ➡️ Engelsk: Tkinter is a standard library in Python that allows you to create simple graphical user interfaces (GUIs). This enables users to interact with the program via windows and buttons.
import tkinter as tk

def klikk_knapp():
    print("Knappen ble klikket!")

vindu = tk.Tk()
knapp = tk.Button(vindu, text="Klikk her", command=klikk_knapp)
knapp.pack()

vindu.mainloop()  # Starter GUI-vinduet
  1. Canvas (Tegneflater i Tkinter)
    ➡️ Norsk: I Tkinter kan vi bruke Canvas-widgeten til å tegne objekter som linjer, sirkler og rektangler. Dette er nyttig for å lage visuelle elementer i et program.
    ➡️ Engelsk: In Tkinter, we can use the Canvas widget to draw objects such as lines, circles, and rectangles. This is useful for creating visual elements in a program.
import tkinter as tk

vindu = tk.Tk()
lerret = tk.Canvas(vindu, width=200, height=100)
lerret.pack()

# Tegn en linje fra (0,0) til (200, 100)
lerret.create_line(0, 0, 200, 100)

vindu.mainloop()
  1. Filbehandling med GUI
    ➡️ Norsk: Med Tkinter kan du også la brukere velge filer via en filvelger-dialog. Dette gjør det enkelt å jobbe med filer i GUI-programmer.
    ➡️ Engelsk: With Tkinter, you can also allow users to choose files via a file picker dialog. This makes it easy to work with files in GUI programs.
from tkinter import filedialog
from tkinter import *

rot = Tk()
rot.filename = filedialog.askopenfilename(initialdir="/", title="Velg fil")

print("Filen du valgte:", rot.filename)

🔒 Sikkerhet og Feilhåndtering

  1. Input Validering
    ➡️ Norsk: Input validering er kritisk for sikkerhet. Ved å validere input kan vi hindre brukere fra å sende ondsinnede data inn i programmet vårt.
    ➡️ Engelsk: Input validation is critical for security. By validating input, we can prevent users from sending malicious data into our program.
alder = input("Skriv inn din alder: ")

if alder.isdigit():
    alder = int(alder)
    if alder > 0:
        print(f"Du er {alder} år gammel.")
    else:
        print("Alder kan ikke være mindre enn 1.")
else:
    print("Vennligst skriv inn et gyldig tall.")
  1. SQL Injection Beskyttelse
    ➡️ Norsk: Når du jobber med databaser, er det viktig å bruke sikre spørringer for å unngå SQL-injections, som er en vanlig angrepstype der ondsinnet SQL-kode kan bli injisert.
    ➡️ Engelsk: When working with databases, it's important to use secure queries to avoid SQL injections, which are a common attack where malicious SQL code can be injected.
import sqlite3

conn = sqlite3.connect('database.db')
cur = conn.cursor()

# Sikker spørring med parameterisering
bruker_input = "admin"
cur.execute("SELECT * FROM brukere WHERE brukernavn = ?", (bruker_input,))

conn.commit()
conn.close()

📁 Avanserte Dataoperasjoner og Algoritmer

  1. Filkryptering
    ➡️ Norsk: Når vi arbeider med sensitive data, er det viktig å kryptere filer slik at informasjonen er sikker, selv om filen blir stjålet.
    ➡️ Engelsk: When working with sensitive data, it's important to encrypt files so that the information is secure, even if the file is stolen.
from cryptography.fernet import Fernet

# Generer en nøkkel
nøkkel = Fernet.generate_key()
f = Fernet(nøkkel)

# Krypter en melding
kryptert_melding = f.encrypt(b"Hemmelig melding")
print(kryptert_melding)

# Dekrypter meldingen
dekryptert_melding = f.decrypt(kryptert_melding)
print(dekryptert_melding)
  1. Avanserte Algoritmer (Dijkstra’s algoritme)
    ➡️ Norsk: Dijkstra’s algoritme brukes for å finne den korteste veien mellom to noder i en graf. Dette er nyttig for problemer som navigasjon og ruting.
    ➡️ Engelsk: Dijkstra’s algorithm is used to find the shortest path between two nodes in a graph. This is useful for problems like navigation and routing.
import heapq

def dijkstra(graf, start):
    avstand = {node: float('infinity') for node in graf}
    avstand[start] = 0
    prioritet = [(0, start)]
    
    while prioritet:
        nåværende_avstand, node = heapq.heappop(prioritet)
        
        for nabo, vekt in graf[node]:
            distanse = nåværende_avstand + vekt
            if distanse < avstand[nabo]:
                avstand[nabo] = distanse
                heapq.heappush(prioritet, (distanse, nabo))
    
    return avstand

# Eksempel på en graf
graf = {
    'A': [('B', 1), ('C', 4)],
    'B': [('C', 2), ('D', 5)],
    'C': [('D', 1)],
    'D

': []
}

print(dijkstra(graf, 'A'))

🎯 Oppsummering Del 7:

I denne delen har vi utforsket:

  • Anonyme funksjoner (lambda) og rekursjon.
  • Grunnleggende algoritmer som bubblesort og Dijkstra’s algoritme.
  • Hvordan du lager grafiske brukergrensesnitt med Tkinter.
  • Sikkerhetstiltak som input validering og SQL-injection beskyttelse.
  • Avanserte operasjoner som filkryptering.

🚀 Neste steg: I neste del vil vi fokusere på nettverksprogrammering, API-integrasjoner og sikker autentisering i Python-applikasjoner!