Teooria ja ülesanded - 6. tund

Funktsioonid


-----------------------


Kordamine. Eelmise tunni kodutööd


1. Pane Pykkar kõndima mööda seina ääri, nii et ta teeks maailmale tiiru peale

2. Loo suurem Pykkari maailm, kus on 3-4 koonust ja Pykkar peab nende ümbert mööda jalutama. - Vaata lahendust (variant 1 - Ave (?) kood ja variant 2 kood)


-----------------------


Funktsioonide defineerimine


Joonistame Turtle'iga ruudu:


##########################

from turtle import *

pikkus=100
nurk=90

mitmes_kylg = 1
while mitmes_kylg <= 4:
    forward(pikkus)
    left(nurk)
    mitmes_kylg = mitmes_kylg + 1
exitonclick()

##########################

-----------------------


Ülesanded 1


1. Joonista Turtle'ga kolm ruutu suvalistele kohtadele ekraanil. - Lahendus 1


-----------------------


Funktsioon


Selleks, et joonistada ruudud erinevatesse kohtadesse ekraanil, on tsüklit natuke ebamugav kasutada, sest tsükkel kordab tegevusi kindla intervalli järgi. Kui me ei taha korrata mingeid tegevusi kindla intervalli järgi, vaid suvalises ajas ja kohas, on lihtsam defineerida mingi funktsioon, mille ülesandeks on selle tegevuse tegemine (näiteks ruudu joonistamine) ja seejärel saame määrata ise, millal või kus soovime seda teha.

Funktsiooni saab defineerida näiteks nii:

##########################

def ruut():
    
    pikkus=100
    nurk=90
    mitmes_kylg = 1

    while mitmes_kylg <= 4: 


        forward(pikkus)

        left(nurk)
        mitmes_kylg = mitmes_kylg + 1

##########################

Defineerisime funktsiooni nimega ruut()
Funktsioon ei hakka tööle iseenesest, vaid see tuleb sobivas kohas välja kutsuda ehk tööle panna.
Funktsiooni välja kutsumiseks ja tööle panekuks tuleb Pythonis kirjutada funktsiooni nimi lihtsalt sobivasse kohta koodis: ruut()

Näide:

up()
forward(200)
down()
ruut()

-----------------------


Ülesanded 2


2. Joonista Turtle'ga kolm (või enam) ruutu suvalisse kohta ekraanil, kasutades funktsiooni defineerimist. - Lahendus 2
3. Salvesta arvutisse pallipilt oma Pythoni failide kausta (paremklahviga klõps pildil ja "Save Picture As" / "Salvesta pilt nimega")



4. Uude Pythoni faili kirjuta kood palli kuvamiseks Tkinteri aknas:



##########################

from tkinter import *
raam = Tk()
raam.title("Tahvel")
tahvel = Canvas(raam, width=600, height=600, background="white")
tahvel.grid()


# x ja y, palli koordinaadid:
x = 50
y = 50


# pildi kuvamisel on vaja kõigepealt laadida pilt ja panna see tahvlile:
pall = PhotoImage(file="pall.gif")
pallipilt1 = tahvel.create_image(x, y, image=pall)

raam.mainloop()

##########################

-----------------------


Ülesanded 3


5. Muuda eelmise ülesande palli programmi nii, et defineerid funktsiooni, mille ülesanne on joonistada Tkinteri aknasse pall.

VIHJE: Kuna funktsioon ei pane palle kohe otse aknale, vaid alles siis, kui ta käivitatakse, tuleb pall senikauaks kuhugi "hoiule panna" (muidu Tkinter viskab pallipildi minema). Selleks on vaja tekitada palli hoiustamiseks n-ö riiul ehk massiiv, kus pallipilti hoitakse, kuni seda vaja läheb.

Masiivi tekitamiseks on Pythonis käsk: set(). Paneme riiulile ehk massiivile nimeks näiteks "pildiriiul". Sel juhul tuleks kirjutada koodi lause: pildiriiul = set()

pildiriiul = set() - loob massiivi nimega pildiriiul

Pallipildi massiivi ehk "riiulile" panemiseks tuleb see lisada käsuga:
pildiriiul.add(pall)

Vaata lähemalt: https://programmeerimine.cs.ut.ee/tkinter.html#moned-lisanipid


Lahendused:
Lahendus 1 (ilma funktsioonita)
Lahendus 2 (funktsiooniga ja kommentaaridega)

-------------------

6. Muuda eelmise ülesande palli programmi nii, et programm joonistab aknasse 5 palli, suvalistesse kohtadesse.

VIHJE: Selleks tuleks importida juhuarvude moodul:

import random

Palli koordinaadid tuleks muuta juhuslikeks arvudeks, näiteks nii:
x = random.randint(0, 600)

See kood tekitab palli, mille x koordinaat on ekraanil vahemikus 0 kuni 600.

Lahendused: Lahendus 1

-------------------

7. Loo programm 1 palliga. Pane pall ekraanil hiirevajutuse peale suvalisse kohta hüppama.

VIHJE: 
Hiireklõpsudele reageerimise kohta leiad infot:
https://programmeerimine.cs.ut.ee/tkinter.html#hiireklopsudele-reageerimine

Palli saab liigutada Canvasel nimega "tahvel" käsuga: tahvel.coords(pallipilt, x, y)
https://programmeerimine.cs.ut.ee/tkinter.html#animatsioon

NB! Üks variant seda ülesannet lahendada, on defineerida vaid üks funktsioon, mis "kuulab" hiirevajutusi: def hiireklikk(event)


Sel juhul soovitav funktsiooni sees defineerida globaalsed koordinaadid, ehk:

def hiireklikk(event):
    global x, y 


LAHENDUS


-------------------

8. Lisa ekraanile ka värav. Kui pall läheb väravasse, tuleb teade "Värav!" - print("Värav!") 



Värava võid otsida Googlest või salvesta endale arvutisse Pythoni failide kausta allpool olev pilt:




-----------------------


Kodused tööd


1. Tee ära ülesanded, mida tunnis ei jõudnud

LISAÜLESANDED

2. Pane pall ekraanil järgnema hiirele (kuhu hiirega vajutad, sinna tuleb ka pall) -
LAHENDUS

3. Pane pall hiirevajutuse peale üles põrkama ja seepeale alla kukkuma. Vajadusel saab abi:
https://programmeerimine.cs.ut.ee/02_lihtlaused.html
https://programmeerimine.cs.ut.ee/tkinter.html#animatsioon








Kommentaare ei ole:

Postita kommentaar