Feltételes utasítás

2019.11.11

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_recta
ngle(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)

© 2023 Minden jog fenntartva.
Az oldalt a Webnode működteti
Készítsd el weboldaladat ingyen! Ez a weboldal a Webnode segítségével készült. Készítsd el a sajátodat ingyenesen még ma! Kezdd el