Vorige | Home | Volgende

 

PTT Python 2011: Opdracht 2


Deze opdrachten zijn onderdeel van een programmeercursus gegeven in de opleiding Informatiekunde van de Rijksuniversiteit Groningen.

Achtergrondinformatie bij deze opdracht is te vinden in hoofdstuk 4 van het boek van Zelle en in de onlinehandleiding van de module graphics.py (PDF).

Inleiding

Om inzicht te krijgen in informatie die is opgeslagen in grote hoeveelheden tekst zijn samenvatten en visualisatie nuttige technieken. Hiervoor kunnen programma's zoals Excel, SPSS of R worden gebruikt. Maar ook programmeertalen als Python zijn hiervoor geschikt. Zij bevatten vaak modules waarmee objecten op het scherm getekend kunnen worden.

In deze opdracht gebruiken we Python om mee te tekenen en een animatie mee te maken. Hierbij hebben we de module graphics.py van John Zelle nodig. Download deze module en sla hem op in dezelfde directory als jouw Pythonbestanden.

Hier is een voorbeeld van een programma dat grafische elementen op het scherm tekent:

# laad de graphicsmodule
# download van http://mcsp.wartburg.edu/zelle/python/graphics.py  
from graphics import *
# laad de functie sleep van de timemodule (voor animatie)
from time import sleep

# definieer window van 150 bij 250 pixels
MAXX=150
MAXY=250
mijnWindow = GraphWin("Mijn Window",MAXX,MAXY)

# teken een horizontale lijn op hoogte 200
punt1 = Point(0,200) 
punt2 = Point(MAXX,200) 
mijnLijn = Line(punt1,punt2)
mijnLijn.draw(mijnWindow) # tekent het lijnobject in mijnWindow

# teken een groene cirkel met straal 25
punt1 = Point(75,175)          # midden
mijnCirkel = Circle(punt1,25)  # 25 is de straal
mijnCirkel.setFill('green')    # definieer kleur
mijnCirkel.draw(mijnWindow)

# teken een blauw vierkant
punt1 = Point(50,100)          # linkeronderhoek
punt2 = Point(100,50)          # rechterbovenhoek
mijnVierkant = Rectangle(punt1,punt2)
mijnVierkant.setFill('blue')
mijnVierkant.draw(mijnWindow)

# teken een rode driehoek
punt1 = Point(50,150)          # linkeronderhoek
punt2 = Point(100,150)         # rechteronderhoek
punt3 = Point(75,100)          # top
mijnDriehoek = Polygon(punt1,punt2,punt3)
mijnDriehoek.setFill('red')
mijnDriehoek.draw(mijnWindow)

# schrijf een tekst
punt1 = Point(75,25)           # centrum van tekstblok
mijnTekst = Text(punt1,"Mijn Tekst")
mijnTekst.setSize(14)          # fontgrootte
mijnTekst.setTextColor('purple')
mijnTekst.draw(mijnWindow)

# beweeg het vierkant
sleep(1.00) # wacht 1 seconde voor de animatie begint
# verplaats het vierkant tot de rand
while mijnVierkant.getP2().getX() < MAXX:
   # getP2() geeft het tweede punt uit de definitie van het vierkant: punt2
   # getX geeft de horizontale coordinaat van dit punt (100)
   # verplaats het vierkant 1 pixel naar onder en rechts
   mijnVierkant.move(1,1)
   sleep(0.02) # wacht 0.02 seconde voor de volgende stap

# wacht totdat de gebruiker een teken geeft
input("Druk op Enter om het programma te stoppen")
# verwijder het window
mijnWindow.close()

Lees dit programma en probeer de instructies zo goed mogelijk te begrijpen. Zoek de instructies die je niet begrijpt of vraag om hulp. Sla daarna het programma op in een tekstbestand en draai het programma. Komt het gedrag overeen met wat je verwachtte?

Opdracht 2.1

Schrijf een Pythonprogramma dat een vlag van een land of provincie tekent. De vlag moet minstens twee kleuren bevatten.

Tip: met de functie color_rgb() van de graphicsmodule kan je andere kleuren dan de standaardkleuren definiëren, zie handleiding, sectie 6 (PDF).

22

Opdracht 2.2

Schrijf een Pythonprogramma dat drie woorden of woordcombinaties in een window tekent op een willekeurige positie, met een willekeurige kleur letters die een willekeurig formaat hebben. Hiernaast zie je een voorbeeld van de uitvoer van het programma. Het resultaat van het programma mag niet steeds hetzelfde zijn. Het geeft niet als de woorden elkaar soms overlappen of soms gedeeltelijk buiten het window vallen.

Tip: in opdracht 1.3 wordt uitgelegd hoe je in Python willekeurige getallen kan genereren.

23

Opdracht 2.3

Schrijf een Pythonprogramma dat de gebruiker vraagt om vijf getallen en deze getallen vervolgens tekent in een staafdiagram. Plaats lijnen op de horizontale en verticale as van de grafiek en geef met getallen aan wat de minimum- en maximumwaarden zijn. Een voorbeeld van de uitvoer van het programma staat hiernaast. Hier is ook een voorbeeld van de interactie met het programma:

$ python3 23.py
Geef een getal tussen 0 en 100: 50
Geef een getal tussen 0 en 100: 25
Geef een getal tussen 0 en 100: 75
Geef een getal tussen 0 en 100: 95
Geef een getal tussen 0 en 100: 33
Druk op Enter om het programma te stoppen

Tip: bewaar de ingetikte getallen niet maar teken voor elk getal meteen na het inlezen een nieuwe staaf in het uitvoerwindow.

Opdracht 2.4

Schrijf een Pythonprogramma dat in een rechthoekig window (geen vierkant) een cirkel tekent op een willekeurige positie. Vervolgens moet de cirkel gaan bewegen in willekeurige constante richting met stapjes 1: -1 of +1 horizontaal en tegelijkertijd -1 of +1 verticaal. Als de cirkel de rand bereikt dan moet hij terugstuiteren: bereikt hij een horizontale rand dan verandert de verticale snelheid van positief in negatief of omgekeerd. Bereikt hij een verticale rand dan verandert de horizontale snelheid op dezelfde manier.

Tips: gebruik het commando move uit het voorbeeldprogramma hierboven om de cirkel te verplaatsen en gebruik het commando sleep uit hetzelfde voorbeeld om ervoor te zorgen dat de animatie niet te snel verloopt. Gebruik eventueel mijnWindow.checkMouse() om te controleren of op het window wordt geklikt om de animatie te stoppen (zie handleiding graphicsmodule, sectie 2: PDF).


Lever jouw programma's, testresultaten en antwoorden op vragen in op Nestor samengevoegd in 1 tekstbestand met naam studentnummer-weeknummer.txt, bijvoorbeeld s1234567-2.txt, voor maandag 9 mei 2011, 12:00.
Antwoorden
Last update: May 10, 2011. erikt(at)xs4all.nl