Program részének ismételtetése - for ciklus

2019.11.10

Utasításokat ismétlünk

Írassuk ki a vászonra az 1, 2, 3, 4 és 5 számokat véletlen helyre.

import tkinter
from random import *

canvas = tkinter.Canvas()
canvas.pack()

canvas.create_text(randrange(400), randrange(300), text='1')
canvas.create_text(randrange(400), randrange(300), text='2')
canvas.create_text(randrange(400), randrange(300), text='3')
canvas.create_text(randrange(400), randrange(300), text='4')
canvas.create_text(randrange(400), randrange(300), text='5')
  

Figyeljük meg, hogy a random modult ezúttal másképp importáltuk a programunkba. Így a random.randrange() utasítást már rövidebb alakban is felírhatjuk. Elég csak a randrange() utasítást használnunk.

Ha 10-ig szeretnénk kiírni a számokat, akkor elég lenne lemásolnunk a create_text utasítást és átírni a text paraméterét. Képzeljük el, hogy 50, 100 vagy akár sokkal több számot szeretnénk kiíratni. Ha másolgatni fogjuk az utasításokat, akkor nagyon hosszú kódot kapnánk, és a másolgatás is sok időt igényelne. Van egy egyszerűbb megoldás!
Ha egy vagy több utasítást ismételtetni szeretnénk, akkor használhatjuk a for ciklust.

for i in range(1, 6):
      canvas.create_text(randrange(400), randrange(300), text=i)

A range(1, 6) utasítás létrehoz egy halmazt a következő elemekkel: 1, 2, 3, 4, 5. Az i változóba fokozatosan hozzárendelődnek ezek az értékek. A ciklus elején az i értéke 1 lesz. Végrehajtódnak azok az utasítások, amelyek ezután egy szinttel beljebb kezdődnek. Az megkapja a következő értéket a halmazból, vagyis a 2-t. Végrehajtódnak az utasítások. És így tovább...

for i in range(10, 16):
     canvas.create_text(randrange(400), randrange(300), text=i) 

Kérdések

1.  Milyen számokat fog kiírni a fenti program?

2.  Mit fog csinálni a program, ha a text = i helyett text = '1' lesz benne?

3.  Hogyan kéne megváltoztatni a határokat, hogy
      a) 15-től 19-ig írja ki a számokat?
      b) 23-től 4 számot írjon ki?

4.  Milyen számokat fog kiírni a program, ha a következőképpen adjuk meg a range() utasítást:
     a) range(50, 60)
     b) range(15, 16)
     c) range(10, 10)
     d) range(15, 10)
     e) range(5)
     f) range(3)
     
g) range(-10, -5)
     h) range(-10, 3)

5.   Mit fog csinálni a következő program?
      for i in range(20, 25):
            print(i*10)

Mi a különbség az alábbi két programrészlet között?

for i in range(10, 16):
      x = randint(0, 300)
      y = randint(0, 300)
      canvas.create_rectangle(x-10, y-10, x+10, y+10)
      canvas.create_text(x, y, text = i)

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

for i in range(10, 16):
      x = randint(0, 300)
      y = randint(0, 300)
      canvas.create_rectangle(x-10, y-10, x+10, y+10)
canvas.create_text(x, y, text = i)

A második program az utolsó utasítást nem ismétli, csak egyszer hajtja végre. Miután kirajzol 5 négyzetet, az utolsóba beleírja a 15-ös számot.  Míg az első programnál minden négyzetbe ír egy számot 10-től 15-ig.

Ábrákat rajzolunk for ciklussal

Mit rajzol az alábbi program?

y = 0
for i in range(1, 6):
     y = y + 10
     canvas.create_line(10, y, 200, y)

Az y változónak kezdőértéket adunk még a ciklus előtt. Ezután a ciklusban fokozatosan növeljük y értékét, ami 10, 20, 30, 40 és 50 lesz. Minden növelés után kirajzolunk egy vonalat. Ugyanezt az ábrát kapjuk az alábbi programmal:

canvas.create_line(10, 10, 200, 10)
canvas.create_line(10, 20, 200, 20) 
canvas.create_line(10, 30, 200, 30) 
canvas.create_line(10, 40, 200, 40) 
canvas.create_line(10, 50, 200, 50) 

Az alábbi két programrészlet is hasonló ábrát eredményez. Vizsgáljátok meg őket!

for i in range(1, 6):
      canvas.create_line(10, i*10, 200, i*10)

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

for i in range(10, 60, 10):
     canvas.create_line(10, i, 200, i)

Ebben a programban a range utasítás 3 számot tartalmaz. A harmadik szám adja meg, milyen lépéssel emelkedjenek az értékek a  létrejött halmazban. Ha hiányzik ez a harmadik szám, akkor automatikusan 1-gyel növekszenek az értékek, mint azt eddig is láttuk.

A for ciklus nagyon gyorsan elvégzi egymás után ezeket az utasításokat, így mi már csak a végeredményt látjuk. Ha szeretnénk lelassítani ezt a folyamatot, akkor a canvas.after(1000) utasítással megtehetjük. Ez az utasítás megállítja az utasítások végrehajtását a megadott időre. Az idő itt ezredmásodpercben van megadva, tehát a canvas.after(1000) 1 másodpercet vár. Ehhez az utasításhoz használnunk kell még a canvas.update() utasítást, ami biztosítja, hogy a várakozások között is frissüljön a vászon. Ha ezt kihagynánk, akkor lassabban dolgozna a program - a várakozás miatt - és a ciklus végén rajzolná ki az eredményt. A programunk most így néz ki:

for i in range(1, 6):
     canvas.create_line(10, i*10, 200, i*10) 
     canvas.update()
     canvas.after(1000)

© 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