Ga met deze oefeningen aan de slag. Zoek informatie op in de slides, op het internet (start met het zoekwoord python en ga daarna meer in detail; w3schools.com is een goede site), bij je buurman/-vrouw in gather.town en uiteraard bij de begeleiders van deze open les!
Als je over de groene vraagtekens hovert, krijg je een tip. Een gele sleutel leidt naar de oplossing. Gebruik deze niet te snel!
for teller in range(5): print(f"{teller}") print("gedaan...")
Van waar tot waar loopt de range
?
Blijkbaar loopt de range vanaf 0 tot net voor 5, dus tot en met 4.
Merk op dat de tweede regel inspringt: deze staat niet aan de linkerkantlijn, maar start met een aantal spaties. Dat is zeer belangrijk. De code wordt immers voorwaardelijk uitgevoerd: alleen als de teller in range(5)
zit, zal de code uitgevoerd worden. Zodra de teller niet meer in die range zit, wordt de opdracht
print(f"{teller}")
niet meer uitgevoerd. Dan wordt er overgegaan naar de code die weer helemaal links aan de kantlijn staat, hier dus de opdracht print("gedaan...")
.
Te onthouden: na een regel die start met for
komt er een dubbele punt; alles wat herhaald moet worden springt twee of vier spaties meer naar rechts (maar wees consequent met dat aantal).
print("Dag") print("allemaal...")
print("Dag", end = "-") print("allemaal...")Hoe kan je dit veranderen, zodat er exact onderstaande output komt? Dag allemaal...
hip
er staat, komt overeen met de leeftijd van de gebruiker. De woorden moeten naast elkaar staan.
leeftijd_tekst = input("geef je leeftijd: ")
. Let op! Het resultaat is een stukje tekst, en nog geen getal. Daarom kozen we ook voor de naam leeftijd_tekst
!
leeftijd_tekst
om met de code leeftijd = int(leeftijd_tekst)
. Dan ben je nu zeker dat de variabele leeftijd
een getal bevat.
leeftijd = int(input("Hoe oud ben je?")) for i in range(leeftijd): print("hip", end = " ") print("hoera")
for i in range(5): print("*", end = "")
Vragen staat niet vrij. Vragen is een must.Ben je bezig met leerstofverwerkende bezigheden? Dan maximaliseer je de opbrengst van die bezigheden als je constant vragen stelt. Vragen kan je stellen aan
Als toegift, eentje om even bij stil te staan...
Why do kids ask so many questions - but more importantly why do they stop?
woord = input("tik 'hoi', ik stop van zodra je iets anders tikt: ") while woord == "hoi": woord = input("tik nog 's 'hoi': ") print("ai, jammer, dat was niet 'hoi'")Op de tweede regel staat een dubbel gelijkheidsteken. Waar staat dat teken voor? Wat is het verschil met het enkele gelijkheidsteken?
==
. Het gaat hier dus om een vergelijking, waarop 'true' (waar) of 'false' (niet waar) geantwoord kan worden. Het enkele gelijkheidsteken =
is een (asymmetrisch) toekenningsteken. Dit teken is asymmetrisch, omdat a = b
niet hetzelfde betekent als b = a
. Lees het teken =
als "krijgt de waarde van"!
woord = input("tik een woord, ik stop met vragen als je 'stop' tikt: ") while woord != "stop": woord = input("geef nog een woord (stop met 'stop'): ")Op de tweede regel staat het teken
!=
. Waarvoor zou dat staan?
!=
gaat na of linker- en rechterlid verschillend zijn.
Stel dat je in de wiskundeles zit. Kunnen onderstaande uitspraken dan?
x = x * 5
a = a + 7
Uit de eerste uitspraak zal afgeleid worden dat
x
de waarde 0 heeft. De tweede uitspraak is niet mogelijk, geen enkel getal is gelijk aan zichzelf + 7.
Stel dat je in de informaticales zit. Wat betekent volgende regel code dan?
x = x * 5
x
wordt uitgeprint zolang dat niet groter is dan 100
. Na elke printopdracht wordt het getal met 10
verhoogd.
x = int(input("Geef een getal op, best niet groter dan 50: "))
Het begrip rekenkundige operatoren doet misschien geen belletje rinkelen, maar je gebruikt ze in elke wiskundeles. Dit zijn enkele binaire rekenkundige operatoren:
+
, -
, *
, /
, %
(modulo-operator, zoek op!). Deze operatoren worden binair genoemd omdat ze
op twee (bi) operandi inwerken: in de bewerking a + b
is a
de linkeroperand, b
de rechteroperand en +
de operator.
Werkt een operator op slechts één operand in, dan wordt er gesproken van een unaire operator. Een voorbeeld hiervan is de absolute waarde. In de wiskunde wordt deze operator genoteerd met twee vertikale strepen rond de operand, dus |a|
. In de informatica noteren we dit zoals we de sinus van een getal noteren: abs(a)
is de absolute waarde van het getal a
. We werken hier dus eerder met de functie-notaties uit de wiskunde.
Naast rekenkundige operatoren zijn er ook andere categorieën.
Gebruik Ecosia (desnoods Google) om op het internet te zoeken; gebruik de zoekwoorden python w3schools logical operators. Bekijk de voorbeelden. Welke logische operatoren bestaan er in Python, en zijn die unair of binair?
and
en or
zijn binair; de operator not
is unair. Het zijn operatoren die inwerken op logische variabelen.
Tot nu toe gebruikten we variabelen enkel om er een stukje tekst of een getal in te bewaren. We kunnen in een variabele ook een logische waarde bewaren: de waarde True
(waar) of False
(vals). Een voorbeeld: de logische variabele het_is_weekend
zal vandaag False
bevatten (tenminste, als ons programma goed op de kalender gekeken heeft 😏 ).
Variabelen die getallen bevatten kunnen gebruikt worden in berekeningen met rekenkundige operatoren: optelling, verschil, deling, vermenigvuldiging, machtsverheffing, modulo-berekening,... Met logische variabelen kan ook `gerekend' worden, maar hier zijn de operatoren dan logische operatoren zoals and
, or
en not
.
x = 2 while x < 10000: print(x) x = x * xVervang nadien
x = 2
door x = 1
en laat opnieuw lopen. Wat gebeurt er nu? (Gebruik de sneltoets-combinatie Ctrl C om weer voort te kunnen...)
x = 1
blijft de lus eeuwig doorlopen (tenzij we ze hardhandig afbreken), omdat de voorwaarde altijd voldaan blijft.
x
).Deel 2 bestaat altijd uit één regel (eventueel met een ingewikkelde uitspraak, die bestaat uit verschillende stukjes). Deel 1 en 4 gelijken meestal heel erg op elkaar, maar kunnen meerdere regels bevatten. Deze delen ontbreken echter nooit! Deel 3 kan heel lang of heel kort zijn - en zelfs helemaal leeg; dan is er dus geen deel 3.
Duid de vier delen van de while-lus aan.
woord = input("geef een woord met meer dan 3 letters: ") lengte = len(woord) while lengte < 3: woord = input("geef een woord met meer dan 3 letters: ") lengte = len(woord)
lengte
. Deel 3 ontbreekt dus in deze lus! Deze structuur is typisch voor een lus die test op input: er wordt een input gevraagd die aan bepaalde voorwaarde voldoet, en zolang die voorwaarde niet voldaan is, wordt er opnieuw input gevraagd.
Pas oefening 10 zo aan, dat de lus maximaal 10 keer doorlopen wordt. Dat kan, door een teller bij te houden. Dit is een extra variabele die in de voorwaarde van de while-lus gecontroleerd wordt - dus moet ze ook klaargezet worden in deel 1, en vervangen worden in deel 4. Gebruik logische operatoren om beide voorwaarden (het getal mag niet te groot worden, de teller mag niet te groot worden) te combineren tot één uitspraak. Schrijf nadien ook uit hoeveel getallen er geprint werden.
Als x
de startwaarde 2 heeft, dan komt er deze output:
2
4
16
256
er werden 4 getallen geprint
Als x
de startwaarde 1 heeft, dan komt er deze output:
1
1
1
1
1
1
1
1
1
1
er werden 10 getallen geprint
x = 2 teller = 0 while x < 10000 and teller < 10: print(x) x = x * x teller += 1 print(f"er werden {teller} getallen geprint")
import tkinter as tk #-- constanten: width = 200 # breedte heigth = 200 # hoogte #-- start hoofdprogramma: venster = tk.Tk() venster.title("Hello world") doek = tk.Canvas(venster, width=width, height=heigth) doek.pack() #-- verander dit stuk, als je iets anders wil tekenen; #-- nu komt er een lijn ('line') en een rechthoek ('rectangle') doek.create_line(0,0,width/2,heigth/2) doek.create_rectangle(20, 40, 40, 60, fill="black", outline="") #-- laat dit stuk staan, zet er niets bij of onder tk.mainloop()Kopieer dit programma dan in replit, en laat het lopen.
Een computer tekent kleuren aan de hand van rgb-waarden: rood, groen en blauw. Of eigenlijk red, green en blue. Op w3schools kan je er meer over lezen, en op verschillende online sites kan je gekende rgb-waarden omzetten in de bijhorende kleur, of van een gekende kleur op een foto de rgb-waarden opvragen - zo kan je die kleur ook in een eigen programma of website gebruiken.
Een paar voorbeelden:
rgb-waarde | |
rood | rgb(255,0,0) |
groen | rgb(0,255,0) |
blauw | rgb(0,0,255) |
wit | rgb(255,255,255) |
zwart | rgb(0,0,0) |
import tkinter as tk #-- constanten: width = 200 heigth = 200 #-- dit is een hulpmethode om kleuren te helpen tekenen #-- deze code moet je niet 'ver-'staan, enkel 'laten' staan #-- als je een bepaalde kleur wil gebruiken om te tekenen, #-- dan schrijf je rgb(a,b,c) met #-- de juiste waarden voor a, b en c. def rgb(red,green,blue): return "#%02x%02x%02x" % (red,green,blue) #-- hoofdprogramma: venster = tk.Tk() doek = tk.Canvas(venster, width=width, height=heigth) doek.pack() #-- verander dit stuk, als je iets ander wil tekenen; #-- nu staan er drie rechthoekjes (eigenlijk vierkantjes) doek.create_rectangle(20, 40, 40, 60, fill=rgb(255,0,0), outline="") doek.create_rectangle(40, 60, 60, 80, fill=rgb(0,255,0), outline="") doek.create_rectangle(60, 80, 80, 100, fill=rgb(0,0,255), outline="") #-- haal de code hieronder uit commentaar om uit te proberen #for i in range(0,200,20): # for j in range(0,200,20): # doek.create_rectangle(i,j,i+20,j+20,fill=rgb(i,j,(i*j)%256),outline="") # doek.create_rectangle(i,j,i+20,j+20,fill=rgb(i,j,0),outline="") #-- laat dit stuk staan, zet er niets bij of onder tk.mainloop()
import tkinter as tk #-- constanten: width = 180 heigth = 220 #-- dit is een hulpmethode om kleuren te helpen tekenen #-- deze code moet je niet 'ver-'staan, enkel 'laten' staan #-- als je een bepaalde kleur wil gebruiken om te tekenen, #-- dan schrijf je rgb(a,b,c) met #-- de juiste waarden voor a, b en c. def rgb(red,green,blue): return "#%02x%02x%02x" % (red,green,blue) #-- hoofdprogramma: venster = tk.Tk() doek = tk.Canvas(venster, width=width, height=heigth) doek.pack() doek.create_rectangle(80,150,140,200, fill=rgb(255,0,0), outline="") doek.create_rectangle(90,170,110,180, fill=rgb(0,255,0), outline="") doek.create_rectangle(120,170,130,200, fill=rgb(0,0,255), outline="") doek.create_rectangle(120,120,130,140, fill=rgb(100,100,100), outline="") doek.create_polygon(110,120,140,150,80,150, fill=rgb(0,255,255), outline="") doek.create_rectangle(50,140,60,200,fill=rgb(200,255,0),outline="") doek.create_oval(25,60,85,140,fill=rgb(255,0,255),outline="") #-- laat dit stuk staan, zet er niets bij of onder tk.mainloop()
import tkinter as tk breedte = 200 hoogte = 200 max_stappen = 30 bovengrens = 1000 linksboven = complex(-2, 2) rechtsonder = complex(2, -2) # meer ingezoomd: (haal de 2 regels hieronder uit commentaar) # linksboven = complex(0, 0) # rechtsonder = complex(1, -1) # nog meer ingezoomd: (haal de 2 regels hieronder uit commentaar) # linksboven = complex(1/2, 0) # rechtsonder = complex(1, -1/2) # deze code moet je niet 'ver-'staan, enkel 'laten' staan def rgb(red,green,blue): return "#%02x%02x%02x" % (red,green,blue) root = tk.Tk() canvas = tk.Canvas(root, width=breedte, height=hoogte) canvas.pack() xfactor = (rechtsonder.real - linksboven.real) / breedte yfactor = (rechtsonder.imag - linksboven.imag) / hoogte #-- kies voor c één bepaalde waarde, #-- door hieronder één regel uit commentaar te halen # c = complex(-0.1, 0.1) # c = complex(-0.12375, 0.56508) # c = complex(-0.12, 0.74) # konijn van douady c = complex(-0.11, 0.6557) # c = complex(0, 1) # c=complex(0,0) # cirkel for x in range(0, breedte): for y in range(0, hoogte): z = complex(x * xfactor + linksboven.real, y * yfactor + linksboven.imag) aantal = 0 while aantal < max_stappen and abs(z) < bovengrens: z = z ** 2 + c # FORMULE aantal = aantal+1 # als het getal niet boven de bovengrens uitkomt, # en de lus zou blijven doordraaien zonder 'rem' op het aantal # stappen: if aantal == max_stappen: line = canvas.create_rectangle(x, y, x + 1, y + 1, fill="black", outline="") # anders, als het getal wel boven de bovengrens uitkomt, # dan weten we aan 'aantal' hoe SNEL dat getal boven # de bovengrens uitkwam - en hoe sneller, hoe feller rood else: color = rgb((int)(aantal * 256.0 / max_stappen), 0, 125) line = canvas.create_rectangle(x, y, x + 1, y + 1, fill=color, outline="") usingIDLE = 0 if not usingIDLE: root.mainloop()
In deze workshop werden verschillende lessen uit eerste bachelor Industrieel Ingenieur gecombineerd. Met de volledige uitleg van de for- en de while-lus is een student uit eerste bachelor al snel anderhalve week bezig. En elke week telt 2u30 theorie en 3 uur labo. Laat je dus niet ontmoedigen als je vond dat dit `nogal snel' ging, want je hebt gelijk! We hopen wel dat je een inkijk kreeg in wat er van een student verwacht wordt tijdens een labo: lezen, nieuwsgierig zijn, buren helpen en vragen stellen. En bij elke geslaagde oefening een speekmedaille.
Heb je nog vragen over informatica, over de opleiding Industrieel Ingenieur, over studeren tout court? Je kan ons bereiken via leen.brouns@ugent.be en ben.vanherbruggen@ugent.be.
Of gebruik de zoektermen student ugent industrieel ingenieur, en je komt op de site https://www.ugent.be/ea/nl/voor-toekomstige-studenten/industrieel-ingenieur-gent waar er heel wat (audio-visuele) informatie te vinden is.