2021. május 4., kedd

Python elmélet

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