Feltételes utasítás
Van egy programunk, ami véletlen négyzeteket rajzol a grafikus felületre.
import tkinter
from random import *
canvas = tkinter.Canvas()
canvas.pack()
def veletlen_negyzet():
x = randrange(300)
y = randrange(300)
a = randint(20, 80)
canvas.create_rectangle(x, y, x+a, y+a)
for i in range(1, 21):
veletlen_negyzet()
canvas.update()
canvas.after(500)
Úgy szeretnénk módosítani ezt a programot, hogy a nagyobb négyzetek, ha az oldala nagyobb mint 50, piros, a kisebbek zöld színűek legyenek. Így fog kinézni a veletlen_negyzet() utasításunk:
def veletlen_negyzet():
x = randrange(300)
y = randrange(300)
a = randint(20, 80)
if a > 50:
canvas.create_rectangle(x, y, x+a, y+a, fill='red')
else:
canvas.create_rectangle(x, y, x+a, y+a, fill='green')
Az a>50 feltétel helyett írhatunk más feltételeket is:
a<50, a<=50, a>=50, a==50, a!=50 (nem egyenlő), 50<a<100, 50<=a<=100.
Nézzétek meg, az if és feltétel után kettőspont van, és az else után is, ami után írjuk azokat az utasításokat, amiket akkor kell végrehajtani, ha a feltétel NEM IGAZ. A feltételes utasításnál is fontos, hol kezdjük írni az utasításokat. Azokat amelyek az igaz ágban hajtódjanak végre - az if és feltétel után következő sorok - beljebb kell kezdeni. Hasonlóan a hamis ágban - az else után - szintén beljebb kell kezdeni. Ha nem kezdenénk beljebb, a program úgy tekintene arra az utasításra, hogy nem része a feltételes utasításnak.
Az if után több feltételt is megadhatunk, és logikai műveletekkel összekapcsolhatjuk őket: and (és), or (vagy). Ha minden feltételnek egyszerre teljesülni kell, akkor az and műveletet használjuk, ha elég egyetlen feltétel teljesülése, akkor az or-t.
import tkinter
canvas = tkintet.Canvas()
canvas.pack()
def kor(koordinatak):
x = koordinatak.x
y = koordinatak.y
if 100<x<150 and 100<y<200:
canvas.create_oval(x-5, y-5, x+5, y+5, fill='red')
else:
canvas.create_rectangle(x-5, y-5, x+5, y+5, fill='yellow')
canvas.bind('<Button-1>', kor)
Ez a program piros és sárga köröket fog rajzolni attól függően, hogy hova kattintunk. Próbáljátok ki, mit történik, ha a feltételt megváltoztatjátok: 100<x<150 or 100<y<200 vagy erre: x<150 or y>200.
A következő program kiír egy köszönést attól függően, melyik billentyűt nyomtuk le.
import tkinter
from random import *
canvas = tkinter.Canvas(width=300, height=300)
canvas.pack()
def irj(esemeny):
x = randrange(300)
y = randrange(300)
betu = esemeny.char
if betu == 's':
canvas.create_text(x, y, text = 'szia')
if betu == 'b':
canvas.create_text(x, y, text = 'bye')
if betu == 'c':
canvas.create_text(x, y, text = 'csao')
if betu == 'j':
canvas.create_text(x, y, text = 'jó napot')
if betu == 'u':
canvas.create_text(x, y, text = 'üdvözlet')
canvas.bind_all('<Key>', irj)
Ez a program láthatóan nem tartalmazza az összes betűt. Hogy tökéletesítsük a programot, kéne egy reakció a többi betűre is, pl "Ehhez a betűhöz nem tartozik köszönés". Ha csak a végére raknánk egy else ágat, akkor az az össze esetben lefut, mikor NEM 'u' betűt nyomtunk le. Ezért így módosítjuk helyesen az eljárásunkat:
def irj(esemeny):
x = randrange(300)
y = randrange(300)
betu = esemeny.char
if betu == 's':
canvas.create_text(x, y, text = 'szia')
elif betu == 'b':
canvas.create_text(x, y, text = 'bye')
elif betu == 'c':
canvas.create_text(x, y, text = 'csao')
elif betu == 'j':
canvas.create_text(x, y, text = 'jó napot')
elif betu == 'u':
canvas.create_text(x, y, text = 'üdvözlet')
else:
canvas.cretae_text(x, y, text = 'Ehhez a betűhöz nem tartozik köszönés')
Ha még elegánsabb kódot szeretnénk, akkor a következőképpen is felírhatjuk:
def irj(esemeny):
x = randrange(300)
y = randrange(300)
betu = esemeny.char
if betu == 's':
uzenet = 'szia'
elif betu == 'b':
uzenet = 'bye'
elif betu == 'c':
uzenet = 'csao'
elif betu == 'j':
uzenet = 'jó napot'
elif betu == 'u':
uzenet = 'üdvözlet'
else:
uzenet = 'Ehhez a betűhöz nem tartozik köszönés'
canvas.create_text(x, y, text = uzenet)
