Python gyerekeknek - változók és műveletek

Kategória: Python gyerekeknek.

Szöveg

Elmélet

A program futása során keletkező adatokat eltároljuk a számítógép memóriájában, és ezekre változónevekkel hivatkozunk. Az előző példában láttuk, hogy a nevet a name változóba tettük. Az, hogy Csaba, eltárolódott valahol a memóriában, és ahol kiírattuk, ott a változó segítségével hivatkozunk rá.

A változó értékét közvetlenül is megadhatjuk:

>>> name = 'Csaba'
>>> print('Szia, ' + name + '!')
Szia, Csaba!

Ugyanez Scratch-ben:

strvaltozo.png

A Python shellben (pl. IDLE shell) a print() el is hagyható:

>>> 'Szia, ' + name + '!'
'Szia, Csaba!'

A változóknak vannak típusaik. A name változó típusa szöveg, angolul string. A fenti példában láthattunk szövegműveletet is: szövegeket egymás után a plusz (+) művelettel tudunk fűzni. Vannak még egyéb szövegműveletek is.

A szöveg adott betűjének lekérdezése:

>>> name[2]
'a'

Ez 0-tól számolja a betűket, tehát a nulladik betű a C, az első sorszámú a s, emiatt a kettes sorszámú az a. Ezt fontos megjegyezni: a Pythonban mindenhol, és általában más programozási nyelvekben is a sorszámozás 0-tól indul. Ellentétben ezzel, a Scratch-ben a sorszámozás 1-től indul:

betuje.png

A szöveg hossza:

>>> len(name)
5

Ez Scratch-ben az alábbi:

hossza.png

Nagybetűsítés:

>>> name.upper()
'CSABA'

Ennek megfelelő művelet nincs a Scratch-ben! Elértünk tehát az első olyan ponthoz ami benne van a Pythonban, de nincs a Scratch-ben! Nagyon sok ilyen művelet létezik, emiatt komolyabb programokat már nem szoktak Scratch-ben írni. Például csak ehhez hasonló szöveg műveletből több tucat létezik.

Feladat

Próbáljuk meg kitalálni, hogy hogyan lehet kisbetűsíteni! Kérjünk be egy mondatot, és írjuk ki kisbetűsítve és nagybetűsítve is!

sentence = input('Kérlek, ír be egy mondatot! ')
print(sentence.upper())
print(sentence.lower())

Önálló feladat

Kérjen be 3 mondatot külön sorban, és utána írja ki mindegyiket nagybetűsen, majd mindegyiket kisbetűsen.

Teszt

1. feladat

Mit ír ki az alábbi kód?

hello = 'Helló, '
vilag = 'Világ!'
print(hello.upper() + vilag.lower())

A Helló, Világ!
B HELLÓ, világ!
C HELLÓvilág
D HellóVilág

2. feladat

Mit ír ki az alábbi kód?

hello = 'Helló, '
vilag = 'Világ!'
hello.upper()
vilag.lower()
print(hello + vilag)

A Helló, Világ!
B HELLÓ, világ!
C HELLÓvilág
D HellóVilág

3. feladat

Mit ír ki az alábbi kód?

print('Helló, Világ!'.swapcase())

A Helló, Világ!
B HELLÓ, világ!
C hELLÓ, vILÁG!
D HeLlÓ, vIlÁg!

Szám

Áttekintés

Számokat is megadhatunk a változókban. Pl.:

szám = 3
print(szám + 2) # 5

A fenti kód a Scratch-ben:

szam.png

A változó értékét meg tudjuk változtatni:

szám = 5
print(szám + 2) # 7

Az értékadás lehet egy művelet eredménye:

egyik_szám = 3
másik_szám = 2
eredmény = egyik_szám + másik_szám
print(eredmény) # 5

Az értékadás olyan is lehet, hogy egy olyan változónak adunk értéket, ami szerepel az értékadás jobb oldalán, pl.:

szám = 3
szám = szám + 2
print(szám) # 5

A szám = szám + 2 kicsit furcsa lehet első ránézésre, és a matektanárok foghatják a fejüket, hogy hogyan lehet olyan butaságot írni, hogy egy szám megegyezik a kettővel növelt értékével. Ennek a sorbak az értelmezése a következő:

  • Vesszük a szám változó korábbi értékét, ami 3.
  • Hozzáadunk 2-t, ami 5.
  • Az = operátor itt nem összehasonlítást, hanem értékadást jelent, így a szám változó értékül kapja az eredményt, ami 5.

A valóságban olyan gyakori az, hogy egy változóval végrehajtunk egy műveletet, és ugyanaz a változó kapja az eredményt, hogy a következő egyszerűsítést is használhatjuk:

szám = 3
szám += 2
print(szám) # 5

Ugyanez Scratch-ben:

szamnovel.png

A szokásos alapműveletek Pythonban is rendelkezésre állnak:

print(3 + 2) # 5
print(3 - 2) # 1
print(3 * 2) # 6
print(3 / 2) # 1.5
print(3 // 2) # 1
print(3 % 2) # 1
print(3 ** 2) # 9

Az összeadás (+), a kivonás (-) és a szorzás (*) talán ismert mindenki számára. Utána viszont háromféle osztás jön:

  • /: osztás a valós számok halmazán. Így a 3 osztva 2-vel eredménye másfél. Figyeljük meg, hogy nem tizedesvesszőt, hanem tizedespontot tartalmaz az eredmény (1.5). Mi is használhatunk nem egész számokat, ugyanígy, tizedespontot használva.
  • //: osztás az egész számok halmazán. Ebben a példában az eredmény amiatt 1, mert 3 osztva 2-vel egyenlő 1, és a maradék 1. Pl. 7/3=2.
  • %: az osztás maradéka az egész számok halmazán. Itt tehát emiatt 1 az eredmény, mert a 3 osztva 2-vel művelet maradéka 1. Pl. 7%3=1. A % jel kiolvasva modulo; ezt érdemes használni, hogy ne keverjük a százalékszámítással.

A végén a hatványozás művelet látható: a 3**2 amiatt 9, mert 3**2 = 3*3 = 9.

A hatványozást kivéve a Scratch-ben is elérhetőek ezek a műveletek:

muveletek.png

A műveletek sorrendje a szokásos: először jön a hatványozás, utána a szorzás és osztás, végül az összeadás és kivonás. Zárókelekkel lehet a sorrendet befolyásolni:

print(1 + 2 * 3) # 7
print((1 + 2) * 3) # 9

Mivel a Python Shell-ben a print() elhagyható, a műveleteket pedig változók nélkül is végre lehet hajtani, egy egész jó számológépként is használhatjuk:

Összetettebb műveleteket is végre tudunk hajtani, viszont ahhoz egy ún. könyvtárat kell használnunk. A könyvtár a Pythonban kb. olyan, mint a bővítmény a Scratch-ben. Az import utasítással kell megadnunk, hogy melyik bővítményt szeretnénk használni. Például az összetettebb matematikai műveletekhez a math bővítményt használhatjuk. Ez több tucat műveletet tartalmaz, például a gyökvonást:

>>> import math
>>> math.sqrt(4)
2.0
>>> math.sqrt(2)
1.4142135623730951

Ugyanez Scratch-ben:

gyoke.png

Itt érdemes egy példa erejéig kitérni a véletlen szám generátorra. Ehhez egy másik könyvtárat kell betölteni: azt, hogy random. Utána a randint() függvény meghívásával tudunk véletlen számot generálni, a következőképpen:

import random
print(random.randint(1, 6))

Ez valójában egy dobókocka, amely 1-től 6-ig generál számokat Az első szám, az egyes jelenti a legkisebbet, a második pedig a legnagyobbat.

Ennek a Scratch megfelelője az alábbi:

veletlen.png

Átalakítások

Előfordulhat, hogy egy változó típusa nem olyan, mint amilyet szeretnénk. Például ha egy szöveget és egy számot szeretnénk összefűzni, akkor a számot szöveggé kell alakítani. Vagy fordítva: ha egy szám szövegként van tárolva, akkor előbb számmá kell alakítanunk ahhoz, hogy műveletek tudjunk végrehajtani vele. Ezt úgy tudjuk megtenni, hogy megadjuk, milyen típusra szeretnénk alakítani, és zárójelbe tesszük amit át szeretnénk alakítani. Az eredmény az átalakított forma.

Lássuk az alábbi példát:

print(3 + 2) # 5
print(str(3) + str(2)) # 32
print('3' + '2') # 32
print(int('3') + int('2')) # 5

Magyarázat:

  • Az első utasítás eredménye 5, mert 3 plusz 3 egyenlő 5.
  • A második utasításban a számokat előbb szöveggé alakítottunk, és utána hajtottuk végre a + műveletet. Ebben az esetben a + művelet összefűzést jelent, emiatt az eredmény 32.
  • A harmadik példában eleve két szövegre hajtjuk végre a + műveletet, így az eredmény 32.
  • A negyedik példában a szövegként tárolt számokat előbb számmá alakítjuk, majd utána hajtjuk végre a + műveletet, így az eredmény 5 lesz.

Feladat

Írjunk egy olyan programot, ami megkérdezi a felhasználót, hogy melyik évben született, utána megkérdezi, hogy melyik év van most, és kiszámolja, hogy hány éves.

Megoldás:

születési_év = input('Melyik évben születtél? ')
idei_év = input('Milyen év van most? ')
életkor = int(idei_év) - int(születési_év)
print(str(életkor) + ' éves vagy.')

Önálló feladat

Kérdezze meg, hogy melyik évben kezdte az iskolát, és kiszámolja, hogy várhatóan melyik évben fejezi be a nyolcadikat.

Teszt

1. feladat

Mi lesz az az alábbi művelet eredménye?

print(2 + 2 * 2)

A 2
B 4
C 6
D 8

2. feladat

Mit ír ki az alábbi program?

a = 3
a = a + 2
print(a)

A hiba
B 32
C a2
D 5

3. feladat

Két dobókocka dobását szeretnénk szimulálni. Mi a helyes kód?

A random.randint(2, 12)
B random.randrange(2, 12)
C random.randint(1, 6) + random.randint(1, 6)
D random.randrange(1, 6) + random.randrange(1, 6)

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License