Deze website is een hulpmiddel bij P2-K1. De officiële examendocumenten en beoordelingscriteria blijven leidend.

De uitleg helpt je op weg. Lees altijd het examendocument op itslearning goed door en controleer wat er voor jouw opdracht gevraagd wordt.

Naslag

Python-cheatsheet

Even opzoeken hoe iets werkt? Hier vind je korte voorbeelden voor Python 3. Probeer ze in een apart oefenbestand en pas ze daarna aan voor je eigen project.

Python starten

Sla je code op in een bestand zoals oefenen.py. Open een terminal in die map en start je bestand. Op Windows kun je ook py gebruiken in plaats van python.

python oefenen.py

Gebruik vier spaties voor inspringen. Na if, for, while en def komt een dubbele punt. Een regel met # is commentaar.

Variabelen en datatypes

Een variabele bewaart een waarde. Kies een naam die vertelt wat erin staat.

naam = "Sam"              # str: tekst
aantal = 3                # int: geheel getal
prijs = 19.95             # float: kommagetal (gebruik een punt)
actief = True             # bool: True of False
medewerkers = ["Sam", "Noor"]  # list: meerdere waarden
medewerker = {"naam": "Sam", "afdeling": "ICT"}  # dict

print(medewerkers[0])      # Sam: tellen begint bij 0
print(medewerker["afdeling"])  # ICT
print(type(aantal))        # <class 'int'>

= geeft een waarde. == vergelijkt twee waarden. True en False schrijf je met een hoofdletter.

Invoer, uitvoer en omzetten

input() levert altijd tekst op. Gebruik int() of float() om ermee te rekenen. strip() haalt spaties aan het begin en einde weg.

naam = input("Naam: ").strip()
aantal = int(input("Aantal accounts: "))
print(f"Voor {naam} worden {aantal} accounts voorbereid.")

Een f-string zet waarden tussen { } in je tekst. Ongeldige getallen geven een fout; zie de foutafhandeling hieronder.

Beslissingen: if / elif / else

Gebruik een voorwaarde om te bepalen welke code wordt uitgevoerd.

afdeling = "ICT"
actief = True

if afdeling == "ICT" and actief:
    print("Actieve ICT-medewerker")
elif afdeling == "HR":
    print("HR-medewerker")
else:
    print("Andere afdeling of niet actief")

Vergelijken: ==, !=, <, >, <=, >=. Combineren: and, or en not.

Loops: for en while

for herhaalt voor elk item. range(3) geeft 0, 1 en 2.

medewerkers = ["Sam", "Noor", "Alex"]
for naam in medewerkers:
    print(f"Verwerk {naam}")

for nummer in range(3):
    print(nummer)

while herhaalt zolang de voorwaarde waar is. Zorg dat de loop kan stoppen.

pogingen = 0
while pogingen < 3:
    pogingen += 1
    print(f"Poging {pogingen}")

break stopt de loop. continue slaat de rest van de huidige herhaling over.

Functies: parameters en return

Een functie voert één taak uit. Parameters zijn waarden die je meegeeft. Met return geef je het resultaat terug.

def maak_gebruikersnaam(voornaam, achternaam):
    """Maak een gebruikersnaam van twee namen."""
    return f"{voornaam.strip()}.{achternaam.strip()}".lower()

gebruikersnaam = maak_gebruikersnaam("Sam", "Voorbeeld")
print(gebruikersnaam)  # sam.voorbeeld

print() toont iets op het scherm; return geeft een waarde terug aan de aanroepende code. Dit voorbeeld maakt een gebruikersnaam, geen echt account.

Fouten afhandelen

Vang verwachte fouten gericht af. Laat de gebruiker weten wat er misging.

try:
    aantal = int(input("Aantal accounts: "))
    if aantal < 1:
        print("Vul minimaal 1 in.")
    else:
        print(f"Aantal: {aantal}")
except ValueError:
    print("Vul een geheel getal in.")

Veelvoorkomende fouten: ValueError (ongeldige waarde), FileNotFoundError (bestand ontbreekt) en KeyError (sleutel ontbreekt in een dictionary).

Tekstbestanden lezen en schrijven

Gebruik with open(...): het bestand wordt daarna automatisch gesloten. Met encoding="utf-8" blijven speciale tekens goed bewaard. Een relatief pad verwijst naar de werkmap waarin je het programma start.

# Schrijven: maakt het bestand of overschrijft de inhoud
with open("notities.txt", "w", encoding="utf-8") as bestand:
    bestand.write("Sam is geregistreerd.\n")

# Lezen: het bestand moet bestaan
with open("notities.txt", "r", encoding="utf-8") as bestand:
    inhoud = bestand.read()
print(inhoud)

# Toevoegen aan het einde
with open("notities.txt", "a", encoding="utf-8") as bestand:
    bestand.write("Noor is geregistreerd.\n")
try:
    with open("ontbreekt.txt", "r", encoding="utf-8") as bestand:
        for regel in bestand:
            print(regel.strip())
except FileNotFoundError:
    print("Dit bestand bestaat niet.")

CSV-bestanden

CSV is handig voor meerdere records. Dit voorbeeld schrijft en leest een bestand met de kolommen naam en afdeling. newline="" laat de CSV-module de regelafbreking regelen.

import csv

medewerkers = [
    {"naam": "Sam", "afdeling": "ICT"},
    {"naam": "Noor", "afdeling": "HR"},
]

with open("medewerkers.csv", "w", encoding="utf-8", newline="") as bestand:
    schrijver = csv.DictWriter(bestand, fieldnames=["naam", "afdeling"])
    schrijver.writeheader()
    schrijver.writerows(medewerkers)

with open("medewerkers.csv", "r", encoding="utf-8", newline="") as bestand:
    for medewerker in csv.DictReader(bestand):
        print(medewerker["naam"], medewerker["afdeling"])

Gebruikt je CSV puntkomma’s? Geef dan delimiter=";" mee aan de reader en writer. Controleer ingevoerde waarden voordat je ze verwerkt.

JSON-bestanden

JSON bewaart lijsten en dictionaries. dump() schrijft naar een bestand; load() leest het terug.

import json

medewerker = {"naam": "Sam", "afdeling": "ICT", "actief": True}
with open("medewerker.json", "w", encoding="utf-8") as bestand:
    json.dump(medewerker, bestand, ensure_ascii=False, indent=2)

with open("medewerker.json", "r", encoding="utf-8") as bestand:
    opgeslagen = json.load(bestand)
print(opgeslagen["naam"])

MySQL: installeren en voorbereiden

Installeer de connector in de Python-omgeving van je project:

python -m pip install mysql-connector-python

De pakketnaam is mysql-connector-python, maar in je code gebruik je import mysql.connector.

Je hebt een werkende MySQL-server nodig. Maak als beheerder onderstaande oefendatabase en tabel. Maak ook een databasegebruiker app_user met de benodigde rechten op deze oefendatabase. Zie W3: gebruikers en rechten.

CREATE DATABASE IF NOT EXISTS novatech_oefen;
USE novatech_oefen;

CREATE TABLE IF NOT EXISTS medewerkers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    naam VARCHAR(100) NOT NULL,
    afdeling VARCHAR(50) NOT NULL,
    actief BOOLEAN NOT NULL DEFAULT TRUE
);

Deze kleine oefentabel is voor de cheatsheet. Het uitgebreidere databaseontwerp op W3 gebruikt andere tabel- en veldnamen. De website zelf heeft geen database nodig.

MySQL: verbinden en SELECT

Pas host, gebruikersnaam en database aan je testomgeving aan. Voer het wachtwoord in tijdens het starten; zet het niet in je broncode.

import getpass
import mysql.connector
from mysql.connector import Error

config = {
    "host": "localhost",
    "port": 3306,
    "user": "app_user",
    "password": getpass.getpass("Databasewachtwoord: "),
    "database": "novatech_oefen",
    "connection_timeout": 5,
}

try:
    with mysql.connector.connect(**config) as verbinding:
        with verbinding.cursor(dictionary=True) as cursor:
            cursor.execute(
                "SELECT id, naam FROM medewerkers WHERE afdeling = %s",
                ("ICT",),
            )
            medewerkers = cursor.fetchall()
            for medewerker in medewerkers:
                print(medewerker["id"], medewerker["naam"])
except Error:
    print("Databaseactie mislukt. Controleer server, gegevens en rechten.")

**config geeft de instellingen uit de dictionary door. De cursor voert query’s uit. fetchall() haalt alle resultaatrijen op; een lege tabel levert een lege lijst op. De with-blokken sluiten cursor en verbinding.

MySQL: INSERT, UPDATE en DELETE

Voeg deze functie en from mysql.connector import Error toe aan je script. De functie krijgt een al geopende verbinding. Na een wijziging slaat commit() deze op. Bij een databasefout maakt rollback() de niet-opgeslagen wijzigingen ongedaan (bij transactionele tabellen, zoals InnoDB).

from mysql.connector import Error

def voer_wijziging_uit(verbinding, sql, waarden):
    """Voer een wijziging uit en geef het aantal gewijzigde rijen terug."""
    try:
        with verbinding.cursor() as cursor:
            cursor.execute(sql, waarden)
            aantal = cursor.rowcount
        verbinding.commit()
        return aantal
    except Error:
        verbinding.rollback()
        raise

Gebruik de volgende aanroepen binnen het with mysql.connector.connect(**config) as verbinding:-blok uit het vorige voorbeeld. Kies de actie die je wilt testen; voer niet zomaar alles achter elkaar uit.

# INSERT: nieuwe medewerker
naam = "Sam"
afdeling = "ICT"
aantal = voer_wijziging_uit(
    verbinding,
    "INSERT INTO medewerkers (naam, afdeling) VALUES (%s, %s)",
    (naam, afdeling),
)
print(f"Toegevoegd: {aantal}")

# UPDATE: één medewerker wijzigen (gebruik een bestaand test-ID)
medewerker_id = 1
voer_wijziging_uit(
    verbinding,
    "UPDATE medewerkers SET actief = %s WHERE id = %s",
    (False, medewerker_id),
)

# DELETE: alleen de gekozen testmedewerker verwijderen
voer_wijziging_uit(
    verbinding,
    "DELETE FROM medewerkers WHERE id = %s",
    (medewerker_id,),
)

Even controleren

  • Is de inspringing goed en staat er een dubbele punt na de voorwaarde of functie?
  • Vergelijk je met == in plaats van =?
  • Kan je while-loop stoppen?
  • Bestaat het bestand en klopt je werkmap?
  • Draait de MySQL-server en heeft je gebruiker de juiste rechten?
  • Heb je parameters gebruikt, en wijzigingen opgeslagen met commit()?

De voorbeelden helpen je oefenen. Schrijf code voor je eigen casus en zorg dat je iedere regel kunt uitleggen. Lees het examendocument op itslearning voor de eisen van je opdracht.

Verder lezen

Officiële documentatie: