Az algoritmus építő elemei a feltétel a ciklus és a szekvencia!
Online fordító
https://www.programiz.com/python-programming/online-compiler/
FELTÉTELEK ÉS A „HA” (IF) KULCSSZÓ
A Python támogatja a matematikában megszokott logikai feltételeket:
Egyenlő: a == b
Nem egyenlő: a! = B
Kevesebb, mint: a <b
Kevesebb vagy egyenlő: a <= b
Nagyobb, mint: a> b
Nagyobb vagy egyenlő: a> = b
Ezeket a feltételeket többféle módon, többféle kombinációban lehet használni, leggyakrabban a döntéshozatal és a ciklusok esetében.
Az első egyszerű példa a döntéshozatalra bekér két numerikus értéket, és összehasonlítja azokat:
a = input("az első szám: ")
b = input("a második szám: ")
if b >a:
print("a második szám nagyobb mint az első")
A példában két változót használunk (a,b) amiket az input paranccsal „töltünk fel” értékkel. Az ifb > a feltétel igaz értéke esetén végrehajtódik a print parancs, ami a terminál ablakba írja az összehasonlítás eredményét.
A programnak ez a verziója nem reagál az összehasonlítás hamis értékére, illetve csak egyszer hajtódik végre. Fontos szintaktikai szabály, hogy az if…. összehasonlítás sorát „:” zárja, valamint az, hogy az utána következő, az összehasonlítás igaz értéke esetén végrehajtódó sorok behúzással, tabulátorral íródjanak! A program alábbi beírása esetén:
a = input("az első szám: ")
b = input("a második szám: ")
if b >a:
print("a második szám nagyobb mint az első")
AZ „ELIF” KULCSSZÓ
Az elif kulcsszó a pythonban kb. azt jelenti: “Ha a korábbi feltételek nem voltak igazak, akkor próbáld ki ezt a feltételt”.
Nézzük meg az előbbi programot ezzel a bővítéssel:
a = input("az első szám: ")
b = input("a második szám: ")
if b >a:
print("a második szám nagyobb mint az első")
elif a==b:
print("a két szám egyenlő")
Ez a programváltozat már két esetet tud levizsgálni:ha a második szám a nagyobb, illetve, ha a két szám egyenlő.
Az összes lehetőséget az alábbi megoldással értékelhetjük ki:
a = input("az első szám: ")
b = input("a második szám: ")
if b >a:
print("a második szám nagyobb mint az első")
elif a==b:
print("a két szám egyenlő")
elifa > b:
print("az első szám nagyobb mint a második")
A fenti megoldást adja az „else” parancs használata is:
AZ „ELSE” KULCSSZÓ
Az alapvető különbség, hogy míg az „elif” kulcsszóval konkrét leválogatást tettünk meg, az „else” bármi egyéb értékre ugyan azt a választ adja. Ez ebben az esetben azonos mint az előbbi példában, hiszen csak három lehetőség van.
a = input("az első szám: ")
b = input("a második szám: ")
if b >a:
print("a második szám nagyobb mint az első")
elif a==b:
print("a két szám egyenlő")
else:
print("az első szám nagyobb mint a második")
Ha csak egy végrehajtandó utasítás van, akkor ugyanabba a sorba is írhatjuk, mint az if utasítást.
if a > b: print("a nagyobb mint b")
EGYMÁSBA ÁGYAZOTT DÖNTÉSHOZATAL (NESTED IF)
A programozás során előfordulhat olyan helyzet, hogy egy feltétel teljesülését egy korábbi feltétel teljesülése esetén szeretnénk levizsgálni. Ilyen esetekben használhatjuk a beágyazott if szerkezetet. Erre olyankor lehet szükség, ha pl. két feltétel egyidejű teljesülését szeretnénk kimutatni.
Az ún. beágyazott if megoldás esetében egy második if-elif-else szerkezetet használunk az első if-elif-else belsejében.
A fent említett megoldás szintaxisa:
if kifejezés1:
parancs(ok)
if kifejezés2:
parancs(ok)
elif kifejezés3:
parancs(ok)
else
parancs(ok)
elif kifejezés4:
parancs(ok)
else:
parancs(ok)
Nézzünk egy példát a fenti esetre. Legyen a feladat annak eldöntése, hogy egy adott szám osztható-e egyszerre 3-mal illetve 2-vel, vagy csak az egyikkel, vagy a másikkal, vagy egyikkel se. A megoldásban alkalmazzuk a Python un. modulo (%) (maradék nélküli osztás) függvényét, ami az oszthatóság teljesülése esetén 0-t ad eredményül.
A mintaprogram:
x = int(input("írj be egy számot: "))
if x%2 == 0:
if x%3 == 0:
print ("a szám osztható 3-mal és 2-vel")
else:
print ("a szám osztható 2-vel de nem osztható 3-mal")
else:
if x%3 == 0:
print ("a szám osztható 3-mal de nem osztható 2-vel")
else:
print ("a szám sem 2-vel, sem 3-mal nem osztható")
KOMBINÁLT DÖNTÉSHOZATAL
Bizonyos esetekben szükségünk lehet a leválogatásokat bizonyos értékhatárokhoz kötni, pl. ponthatárok és osztályzatok esetén. Könnyítsük meg a dolgozatokat javító és pontozó tanár dolgát egy olyan egyszerű kis algoritmussal, ami kiszámolja az adott pontszámhoz tartozó érdemjegyet!
A ponthatárok legyenek: – 20: elégtelen, 21 – 30: elégséges, 31 – 50: közepes, 51 – 80: jó, 81 – 100: jeles.
x = int(input("írd be a pontszámot: "))
ifx > 80:
print("jeles")
if x > 50 and x <80:
print("jó")
if x > 30 and x <50:
print("közepes")
if x > 20 and x <30:
print("elégséges")
elif x < 20:
print("elégtelen")
A fenti példaprogramot érdemes kombinálni egy ciklussal, hogy ne kelljen minden egyes érték megadása utána újra futtatni az alkalmazást. Erre szolgál a python „While” illetve „For” parancsa!
a = input("az elsĹ szĂĄm: ")
b = input("a mĂĄsodik szĂĄm: ")
if b > a:
print("a mĂĄsodik szĂĄm nagyobb mint az elsĹ")
a = input("az elsĹ szĂĄm: ")
b = input("a mĂĄsodik szĂĄm: ")
if b > a:
print("a mĂĄsodik szĂĄm nagyobb mint az elsĹ")
elif a==b:
print("a kĂŠt szĂĄm egyenlĹ")
a = input("az elsĹ szĂĄm: ")
b = input("a mĂĄsodik szĂĄm: ")
if b > a:
print("a mĂĄsodik szĂĄm nagyobb mint az elsĹ")
elif a==b:
print("a kĂŠt szĂĄm egyenlĹ")
elif a > b:
print("az elsĹ szĂĄm nagyobb mint a mĂĄsodik")
x = int(input("Ărj be egy szĂĄmot: "))
if x > 10:
print("A szĂĄm nagyobb mint 10!")
if x > 20:
print("A szĂĄm nagyobb mint 20!")
else:
print("A szĂĄm nem nagyobb mint 20!")
else:
print("A szĂĄm kisebb mint 10!")
x = int(input("Ărd be a pontszĂĄmot: "))
if x > 80:
print("jeles")
if x > 50 and x <80:
print("jĂł")
if x > 30 and x <50:
print("kĂśzepes")
if x > 20 and x <30:
print("elĂŠgsĂŠges")
elif x < 20:
print("elĂŠgtelen")
CIKLUSOK (ITERÁCIÓ) – A WHILE CIKLUS
Az iteráció röviden azt jelenti, hogy a program ugyanazt a kódblokkot újra és újra végrehajtja, a feladattól függő számban, vagy egy logikai feltétel bekövetkeztéig. Az iterációt végrehajtó programozási struktúrát ciklusnak, huroknak nevezzük. A programozásban az iterációnak kétféle típusa van: határozatlan és határozott.
Határozatlan iteráció: a ciklus végrehajtásának száma nincs pontosan előre megadva. A kijelölt blokkot a program többször végrehajtja, mindaddig, amíg bizonyos feltétel(ek) teljesülnek.
Határozott iteráció: a kijelölt programblokk végrehajtásának száma egyértelműen meghatározott már akkor, amikor a ciklus elindul.
A WHILE CIKLUS
A Python „while” ciklus felépítése nagyon egyszerű:
while <expr>:
<statement(s)>
A „statements” rész tulajdonképpen a létrehozott ciklus magja, az a programblokk, ami meghatározott számban lefut, az „expr” részben szabjuk meg, hogy ez hányszor történjen meg.
Nézzünk egy egyszerű példaprogramot:
n = 5
while n > 0:
n -= 1
print (n)
Mi történik ebben a példában:
Az n értéke kezdetben 5. A 2. sorban a while állítás vizsgálatána eredménye(n> 0), ami igaz, tehát a ciklusmag lefut. A 3. sorban a ciklusmagban n-t 1-el csökkentjük, majd az eredményt kinyomtatjuk.
Amikor a ciklusmaglefutott, a program végrehajtása visszatér a hurok tetejére a 2. sorba, és a kifejezést újra kiértékeljük. Még mindig igaz, tehát a ciklusmag újra végrehajtja a feladatot, és az eredmény nyomtatásra kerül.
Ez addig folytatódik, amíg n nullává nem válik. Ezen a ponton, amikor a kifejezést teszteljük, az eredmény hamis, így a hurok véget ér.
Fontos, hogy a while hurok a vezérlő logikai kifejezést előbb teszteli, mielőtt bármi más megtörténik. Ha hamis a kiértékelés eredménye, akkor a ciklusmag egyszer sem fut le.
A ciklusmagban szereplő n -= 1 kifejezés jelentése: n értékét csökkentsed eggyel.
n = 0
while n > 0:
n -= 1
print (n)
A fenti program az előzőek értelmében egyszer sem fut le, mert a kiindulási feltétel (n > 0) hamis.
Nézzünk egy példát „felfelé” számlálásra, amikor a ciklusváltozó értékét egyesével növeljük!
count = 0
while (count < 9):
print ('The count is:', count)
count = count + 1
print ("Good bye!")
Az első sorban a count változó értékét nullára állítjuk, a while állítás vizsgálatát pedig úgy állítjuk be, hogy a vizsgálat mindaddig igaz legyen, míg a változó kisebb mint 9.
A VÉGTELEN CIKLUS
A ciklus végtelen ciklussá válik, ha avizsgálati részben beállított feltétel soha nem válik hamissá(FALSE). Ezzel a megoldással azonban óvatosan kell eljárni a ciklusok programozása során, mert olyan ciklust állíthatunk elő, amiből a programunk nem tud kilépni.Az ilyen ciklust végtelen ciklusnak hívják.
var = 1
while var == 1 : # This constructs an infinite loop
num = int(input("Enter a number :"))
print ("You entered: ", num)
print ("Good bye!")
A második sorban beállított logikai feltétel állandóan igaz értéket ad, így a ciklus végtelenné válik. A ciklusból való kilépés egyetlen módja a Ctrl + c billentyűkombináció alkalmazása.
Elegánsabb megoldás, ha figyeljük a bevitt értékeket, és egy előre megadott szám bevitelekor (pl. 0) a „break” paranccsal kilépünk a ciklusból:
while True: # This constructs an infinite loop
num = int(input("Enter a number :"))
print ("You entered: ", num)
if num == 0:
break # break here
print ("Good bye!")
Hasonló megoldást eredményez a cikluson belül elhelyezett felhasználói döntést kérő vezérlésátadó utasítás, aminek segítségével elegánsan tudunk kilépni a programból:
import random
while True:
input("Press enter to roll the dice")
# get a number between 1 to 6
num = random.randint(1,6)
print("You got",num)
option = input("Roll again?(y/n) ")
# condition
if option == 'n':
break
A példa kockadobást szimulál. A program első sora importálja a véletlenszám generáláshoz szükséges library-t, ennek a segítségével állítjuk elő az 1-6 közé eső egész számot, ami egy „whileTrue” típusú végtelen cikluson belül mindaddig fut, amíg az „új dobás?” (Roll again?) kérdésre y(es) a válasz. Nem válasz esetén kilépünk a ciklusból.
Az utolsó példaprogram Raspberry Pi-n futtatható, aminek a GPIO portjára három darab LED diódát kapcsolunk, sorban a 11-es, a 13-as, valamint a 15-ös lábra.
A program első két sorában a szükséges library-k importálása történik, az első az időzítés, a második a GPIO port kezelése miatt. A következő négy sorban beállítjuk a tüskesor számozásának módját (BOARD – panel szerint), valamint a három kimeneti tüske (11,13,15) adatirányát (OUT).
A következő három sor inicializálj, alaphelyzetbe állítja a kimeneteket, azaz kikapcsolja az ide kötött LED-eket.
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
GPIO.output(11, False)
GPIO.output(13, False)
GPIO.output(15, False)
while True:
GPIO.output(11, GPIO.HIGH)
time.sleep(3)
GPIO.output(13, GPIO.HIGH)
time.sleep(3)
GPIO.output(11, GPIO.LOW)
GPIO.output(13, GPIO.LOW)
GPIO.output(15, GPIO.HIGH)
time.sleep(5)
GPIO.output(15, GPIO.LOW)
GPIO.output(13, GPIO.HIGH)
time.sleep(3)
GPIO.output(13, GPIO.LOW)
n = 5
while n > 0:
n -= 1
print (n)
count = 0
while (count < 9):
print ('The count is:', count)
count = count + 1
print ("Good bye!")
var = 1
while var == 1 : # This constructs an infinite loop
num = int(input("Enter a number :"))
print ("You entered: ", num)
print ("Good bye!")
while True: # This constructs an infinite loop
num = int(input("Enter a number :"))
print ("You entered: ", num)
if num == 0:
break # break here
print ("Good bye!")
import random
while True:
input("Press enter to roll the dice")
# get a number between 1 to 6
num = random.randint(1,6)
print("You got",num)
option = input("Roll again?(y/n) ")
# condition
if option == 'n':
break
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.OUT)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(15, GPIO.OUT)
GPIO.output(11, False)
GPIO.output(13, False)
GPIO.output(15, False)
while True:
GPIO.output(11, GPIO.HIGH)
time.sleep(3)
GPIO.output(13, GPIO.HIGH)
time.sleep(3)
GPIO.output(11, GPIO.LOW)
GPIO.output(13, GPIO.LOW)
GPIO.output(15, GPIO.HIGH)
time.sleep(5)
GPIO.output(15, GPIO.LOW)
GPIO.output(13, GPIO.HIGH)
time.sleep(3)
GPIO.output(13, GPIO.LOW)
Nincsenek megjegyzések:
Megjegyzés küldése