Erre megvannak az embereim

Ha büdös már a meló, bízzuk valaki másra. Ezt a valakmi mást a programozásban függvénynek hívják. Megfizetni nem kell, csak megírni.

Előtanulmányként javallom ezt a cikkemet. Ha lusta vagy, akkor… úgy kell neked.

Vigyázat, nagyon hosszú videó, csak a kemények nézhetik meg! – én szóltam.

A függvény áll tehát:

  • egy def szóból
  • a függvény nevéből
  • a bemeneti értékekből, más szóval paraméterekból, más szóval argumentumokból, ezekből annyi lehet, amennyit akarsz, akár nulla is
  • a függvény belsjéből (oké: törzséből), ami elvileg a bemeneti értékekkel kezd valalmit, de nem biztos, és lehet, hogy nincs is törzse
  • egy return szóból, ami azt jelenti, hogy visszatér, és amit a függvény visszatérési értéke követ, de lehet, hogy nincs visszatérési érték

Feladatok:

F0027a: Fogalmazd meg magadban, hogy mi a függvény bemeneti értéke (más szóval paramétere, még más szóval argumentuma)!

F0027b: Fogalmazd meg, hogy mi a különbség függvény és eljárás (más szóval procedúra) között! Szeretném, ha értenéd, hogy a Python nem különbözteti meg a kettőt, és mindkettőt függvénynek hívja. Van olyan nyelv, ami megkülönbözteti őket. Az eljárásokat esetleg szubrutinnak, vagy csak sub-nak hívják.

F0027c: Írj olyan függvényt, ami az átadott számnál eggyel nagyobbat ad vissza! A használatával írasd ki az első száz pozitív egész számot és az eggyel nagyobb szomszédjukat! (Megoldás az expand source-ra kattintva.)


def pluszegy(szám):
    #Ez a szám a függvény helyi
    #változója, nem azonos
    #a szám ciklusváltozóval.
    #Próbáld ki, hogy valamelyiket
    #megváltoztatotd, mondjuk
    #kisveréb-re
    return szám + 1

for szám in range(1,101):
    print(szám, pluszegy(szám))

F0027d: Mit ír ki az alábbi függvény?


def függvény(valami):
    print(valami)
    return 'Három, várom a párom.'

valami = 'Egy, megérett a megy.'
print(függvény('Kettő, csipkebokorvessző.'))

A c és a d feladat megmutatta, hogy mi a változó hatóköre (angolul: scope). Látjuk, hogy a főprogram valami-jéről a függvény nem is tud. Kicsit olyan, mintha egy pici, de teljesen önálló program lenne, és a külvilággal (a főprogrammal) csak a paramétereivel és a visszatérési értékével tart kapcsolatot. (Valójában van rá mód, hogy elérjük a főprogram változóit, de általában úgy tudjuk, hogy ha erre szükség van, akkor rossz a program. Úgyhogy most elő sem jövök ezzel, de pár videó múlva már nem ússzuk meg.)

F0027e: Tekintsük a c feladat pluszegy() függvényét! Mit ír ki a print(pluszegy(pluszegy(7))) utasítás? Minek ennyi zárójel? (Megoldás itt – jelöld ki: 9)

F0027f: A programozási tételeket sok esetben érdemes függvénybe kiírni. A sorozatszámítás tételénél tanultak alapján írjuk meg azt a függvényt, ami a paraméterül kapott sorozat átlagával tér vissza! (Megoldás itt.)

F0027g: Akkor ezek szerint a print() is függvény? Meg a range()? Meg a len(), sum(), min(), max()? Igen. Illetve a print() talán inkább eljárás – ugyan a python nem tesz különbséget – , de a többiek függvények.

F0027h: Írjuk meg azt a kicsi(lista, k) függvényt, ami úgy működik, mint az Excel és a LibreOffice Calc KICSI(tömb, k) függvénye, azaz az átadott számok közül a k-adik legkisebbet adja vissza! Az elgondolás az, hogy a listából kidobjuk a legkisebb számot, aztán a második legkisebbet, egészen k-ig. (Megoldás itt.)

F0027i: Írd meg a pénzfeldobás() függvényt, ami vagy azt adja vissza, hogy fej, vagy azt, hogy írás!

F0027j: Írd meg a párose(szám) függvényt, ami True értéket ad vissza, ha a szám páros, False-t, ha nem az!

Legközelebb fájlokat írunk meg olvasunk.

 

Advertisements

Erre megvannak az embereim” bejegyzéshez ozzászólás

  1. Szia! Ööö, hát izé… kicsit elbizonytalanodtam pénzfeldobás ügyben:

    import random

    def penzfeldob():
    valami = random.randint(1,2)
    if valami == 1:
    print(‘fej’)
    else:
    print(‘írás’)

    for i in range(0, 101):
    print(penzfeldob())

    Mi ez a None? Vagy az egész hülyeség?…

    Kedvelés

    • A None-s kérdésed nem értem, tedd föl másképp:)
      A programod azt nem működik jól, mert te eljárást írtál, nem függvényt.
      Ebben az esetben:
      Ha eljárás, akkor a def-en belül van print, és a for-on belül csak penzfeldob() van, print nélkül.
      Ha függvény, akkor a def-en belül nincs print, hanem return ‘fej’ és return ‘írás’ van, a for marad úgy, ahogy most van.
      Próbáld meg megírni mindkét módszerrel a programot, aztán mesélj, hogy most már érted-e!

      Kedvelés

      • Köszönöm, sikerült! Próbálom majd a párose-t, ott majd kibukik, hogy értem-e. 🙂 Jah, hogy akkor a None is egy visszatérési érték volt, csak a semmi íródott ki így…

        Kedvelés

  2. A h feladatban 2-szer is ki kellene javítani a “legnagyobb” szavakat “legkisebb”-re.

    A j feladatban ilyen egyszerű megoldásra gondoltál?:

    def páros(szám):
    if szám % 2 == 0:
    eredmény = True
    else:
    eredmény = False
    return eredmény

    print(páros(3))

    Merthogy persze visszaadja a függvény a False-t, de ugye True meg False logikai változók helyett akármilyen stringek is lehetnének a függvény törzsében, pl. ‘True’ és ‘False’. Naszóval a kérdésem lényege az, hogy valami trükkel kellett volna kihozni a visszatérési értéknek a logikai változókat?

    Köszönöm a válaszodat!

    Kedvelés

    • A h feladatot javítottam, köszönöm!

      A kérdésedet talán értem, úgyhogy válaszolok rá, aztán, ha nem arra válaszolok, amit kérdezni akarsz, akkor kérdezz újra.
      Szóval, az utolsó printet cseréld le arra, hogy
      if páros(3): #tudod, ez lehetne az is, hogy if páros(3) == True
      print(‘páros’)
      else:
      print(‘páratlan’)

      Ha logikai értéket adsz vissza, akkor működik, ha stringet, akkor nem, mert a strinngek logikai értéke akkor False, ha a string üres. Azaz ha te ‘False’ stringet adsz vissza, annak a logikai értéke True, mert nem üres string, azaz ki fogja írni, hogy “páros”, a 3-ra is.

      Természetesen írhatnád azt, hogy

      if páros(3) == ‘True’:
      print(‘páros’)
      else:
      print(‘páratlan’)

      és akkor működik visszaadott stringre is, de ennyi erővel már adhatsz vissza akármit is.

      Szigorúan véve a logikai típus fölösleges. A C nyelv régi verzióiban nincs is, használhatsz helyette 0 és 1 számot. Mégis bevezették oda is, gondolom azért, mert a kód olvashatóbb lesz vele.

      Kedvelés

      • Nagyon köszönöm a válaszodat!

        Értem, amit elmagyaráztál. Igazából rájöttem közben, hogy félreértettem a feladatodat. Azt hittem, hogy a feladat az, hogy amit a print kiír, az legyen True vagy False logikai érték (erre nem volt ötletem). De hát világosan leírtad a feladatadásban, hogy “True vagy False értéket ad vissza”, tehát a return-höz vártál True vagy False logikai értéket, akkor viszont maga a függvényem jó volt, gondolom.

        Kedvelés

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s