Megyünk túrázni?

A fenének van kedve ma programozni, amikor ilyen szép az idő. Menjünk inkább túrázni!… Ja nem, ez hülyeség, inkább rohadjunk itt a gép előtt. Akarom mondani, gondoljuk át az egészet, de jól.

Elmegyünk túrázni, ha (tudod: if)

  • nyár van és akkor nem baj, ha esik az eső, mert majd mexáradunk
  • ősz van, de akkor nem eshet az eső
  • és a szelet meg utáljuk: szélhámosak vagyunk, azaz lehámlunk a széltől (az emberek nagy része naphámos, ők a naptól hámlanak le), azaz ha szél van, akkor ki nem mozdulunk, inkább programozunk.

A videóban lévő programkódok:

Első verzió, ami működik, de nem tudja kiírni, hogy ha itthon maradunk. Ebben a verzióban két, egymástól teljesen független if-ágat írtunk. Ha az első eset teljesül is, és kiírjuk, hogy ‘megyünk’, a második esetet is végiggondolja (kiértékeli) a Python, lévén teljesen külön fogalmaztuk meg. Csak a mi fejünkben tiszta, hogy a két eset közül csak az egyik valósulhat meg, a Pythonnak erről ezzel a megfogalmazással nem szólunk.


évszak = input('Nyár van, vagy ősz? (ny/ő) ')
esik = input('Esik? (i/n) ')
szél = input('Fúj a szél? (i/n) ')

if évszak == 'ny' and szél == 'n':
    print('megyünk')
if évszak == 'ő' and esik == 'n' and szél == 'n':
    print('megyünk')

Második verzió, amelyikben a két feltételt összekötöttük, és egy elágazásrendszerünk van. Vagy az egyik feltételegyüttes valósul meg (5. sor), vagy a másik (7. sor), vagy egyik sem (9. sor). Ebben a megoldásban a Python az első feltételegyüttes megvalósulása esetén el sem gondolkodik a másodikon, azaz spóroltunk gépidőt. Oké, most a másodperc töredékének töredékéről van szó, de így kezdődik a dolog. 


évszak = input('Nyár van, vagy ősz? (ny/ő) ')
esik = input('Esik? (i/n) ')
szél = input('Fúj a szél? (i/n) ')

if évszak == 'ny' and szél == 'n':
    print('megyünk')
elif évszak == 'ő' and esik == 'n' and szél == 'n':
    print('megyünk')
else:
    print('maradunk')

Harmadik verzió, amelyikben rájövünk, hogy az második verziójában az if- és az elif-ág végső soron ugyanazt eredményezi: hogy megyünk. Ha meg így van, akkor egyszerűen egy or utasítáásal összekötjük a kettőt és az elif-ágat kivágjuk a francba. Ez azért is jó, mert ha nem csak egy egyszerű kiírást végeznénk – print(‘megyünk’) -, hanem mindkét ágon hatezer soros kód volna, akkor mostantól csak egy helyen kell karbantartani, javítgatni a kódot. Figyeld meg a feltételben a visszapert (” \ “): arra jó, hogy az olvashatatlanul hosszú sort letörjük vele. Természetesen nem kötelező a használata, olyan hosszú sorokat írsz, amilyet akarsz.

évszak = input('Melyik évszak van? (ny/ő) ')
esik = input('Esik? (i/n) ')
szél = input('Fúj a szél? (i/n) ')

if (évszak == 'ny' and szél == 'n') or (évszak == 'ő' and esik == 'n' \
                                        and szél == 'n'):
    print('megyünk')
else:
    print('maradunk')

Negyedik és végső verzió, amelyikben rájövünk, hogy a feltételek alkalmas újraértelmezésével mennyit javulhat a helyzetünk.

évszak = input('Nyár van, vagy ősz? (ny/ő) ')
esik = input('Esik? (i/n) ')
szél = input('Fúj a szél? (i/n) ')

if szél == 'n' and (évszak == 'ny' or (évszak == 'ő' and esik == 'n')):
    print('megyünk')
else:
    print('maradunk')

Most akkor és vagy vagy?

A magyar nyelv néha másképp gondolkodik, mint az informatika. Na jó, sokszor gondolkodik máshogy:)

A klasszikus példa az volt, amikor 2009-ben az ukránok elzárták az Ukrajnán átmenő orosz gázvezetékeket, és így gyorsan mindenki szénnel, fával, olajjal kezdett tüzelni, és Budapesten annyira megnőtt a szálló por mennyisége, hogy az akkori polgármester rendelete szerint

  • páratlan napokon csak a páratlan rendszámú járművek,
  • míg a naptár szerinti páros napokon csak a páros és a nullára végződő rendszámú járművek (nyilván ez utóbbi kitétel azért került be, mert van-egy ősi vita, hogy a 0 az páros szám-e) közlekedhetnek

Namost, írjunk erre programot:


if páratlan(dátum) and páratlan(rendszám):
    print('mehet')
elif páros(dátum) and (páros(rendszám) and nulláravégződik(rendszám))
    print('mehet')
else:
    print('marad a parkolóhelyén')

Ha a mi autónk az ABC-100, akkor nincs gond, páros napokon megyünk. De mikor megyünk az ABC-102 rendszámúval?… Soha. Mert ugye soha nem teljesül az, hogy a 102 páros és nullára végződik.

Tanulság: vigyázzunk, amikor a szövegben megadott feltételt átírjuk kóddá: lehet, hogy ami a szövegben és, az a programban vagy. Néhány példa:

  • “Ez a szakma fiúknak és lányoknak való” – való nekem ez a szakma? Fiú és lány vagyok?
  • “Péntekenként az állatkereskedésben a halak és a madarak 10%-kal olcsóbbak” – biztos ilyet akarunk?

Feladatok

F0006a: Kérj be két számot, és írd ki a kisebbet!

F0006b: Írd meg az előző feladatot úgy, hogy csak egy olyan sor legyen a programkódodban, ami kiírást végez! (Megoldás az expand source-ra kattintva)


egyik = int(input('Mi az egyik szám? '))
másik = int(input('Mi a másik szám? '))
if egyik > másik:
    kiírandó = 'Az ' + str(egyik) + ' a nagyobb.'
elif egyik == másik:
    kiírandó = 'Egyenlőek.'
else:
    kiírandó = 'A ' + str(másik) + ' a nagyobb.'
print(kiírandó)

F0006c: Kérdezd meg, hogy a felhasználó hányadik lett a versenyen! Ha benne van az első háromban, írd ki, hogy “dobogós”! Csak egy if-sort használhatsz.

F0006d: Kérdezd meg, hogy a felhasználó hányadik lett a versenyen! Ha benne van az első háromban, írd ki, hogy milyen érmet kapott. Csak egy if-sort használhatsz, de elif-et annyit, amennyit úri kedved diktál. (Megoldás itt.)

F0006e:A háromszög bármely oldalának hossza kisebb a másik két oldal hosszának összegénél” – így a tétel. Írj programot, amely bekéri a b és c hosszát, majd megmondja, hogy szerkeszthető-e a háromszög. (Megoldás Itt.)

F0006f: Nézd meg az alábbi három mondatszerű leírást!


Ha darab > 100, akkor
    ki: ár * 0,9
Elágazás vége
Ha darab > 500, akkor
    ár: ár * 0,7
Elágazás vége


Ha darab > 500, akkor
    ki: ár * 0,7
Különben ha darab > 100, akkor
    ki: ár * 0,9
Elágazás vége


Ha darab > 100, akkor
    ki: ár * 0,9
Különben ha darab >; 500, akkor
    ki: ár * 0,7
Elágazás vége

A mondatszerű leírással megadott pszeudokódok közül melyik az, amelyik a kereskedő szándékának megfelelően (már ha nem őrült a kereskedő) írja ki az árat? (Juhász Tibor – Kiss Zsolt: Programozási Ismeretek, Műszaki Kiadó, 2011 nyomán)

F0006g: Kérdezd meg a felhasználótól a nevét, a nemét és a napszakot, majd köszöntsd őt a napszaknak megfelelően, angolul (vagy németül, vagy franciául, vagy akárhogy, ahol tudsz a nemnek megfelelő, Mr. illetve Ms. – jellegű előtagot)! Először állítsd elő a köszöntést, és egyetlen sorban használj print-et, mint a b feladatban! (Megoldás az “expand source”-ra kattintva.)


név = input('Mi a kedves vezetékneved? ')

nem = input('Lány vagy, avagy fiú vagy-é? (l/f) ')
if nem == 'l':
    előtag = 'Ms.'
elif nem == 'f':
    előtag = 'Mr.'
else:
    print('Íly nemet sajna nem ismerek. Nem fogok rendesen köszönni.')
    előtag = 'M?.'

napszak = input('Milyen napaszak van? (r/du/e/é) ')
# r = reggel, du = délután, e = este, é = éjjel
if napszak == 'r':
    angol_napszak = 'morning'
elif napszak == 'du':
    angol_napszak = 'afternoon'
elif napszak == 'e':
    angol_napszak = 'evening'
elif napszak == 'é':
    angol_napszak = 'night'
else:
    print('E napszakot sajnos nincs szerencsém ismerni. Aú! Revoár!')
    angol_napszak = 'i-don\'t-know'

print('Good ', angol_napszak, ', ', előtag, ' ', név, '!', sep='')

F0006h: Vedd elő a múltkori számkitalálós programot! Módosítsd úgy, hogy ha csak egy számmal térünk el a gondolt számtól (lefelé vagy felfelé), akkor más üzenetet adjon, mint ha jobban eltérünk! (Megoldás itt.)

F0006i: Kérdezd meg a felhasználó korát, és ha hat év alatti, akkor mondd meg neki, hogy nézze a Piroska és a farkast, ha már legalább hat, de legfeljebb 16, akkor nézze a Zootropoliszt, ha meg 16 elmúlt, akkor közöld vele, hogy már elég nagy hozzá, hogy bármit is megnézzen! (Megoldás itt. Akkor is érdemes megnézned, ha sikerült a feladat egyedül, emrt megnézzük, hogy miként hasonlítható egy változó két értékhez.) (Ez csak egy gyakorlófeladat, a jogi tartalmáért nem vállalok felelősséget :Đ)

 

A múltkor megismerkedtünk az elágazással. Legközelebb ciklust szervezünk.

Reklámok

Megyünk túrázni?” bejegyzéshez ozzászólás

  1. Szia. Tetszenek a leckéid és nagyon jók a gyakorlatok.
    Ezen az oldalon egy apró hiba van.
    Az F0006f programkód harmadik szegmensének 3. sorában a relációs jel helyett > szerepel, ami a > szimbólum HTML kódja, de valamiért nem jól jelenik meg.
    Csak így tovább!

    FI

    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