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: