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űset, majd mindegyiket kisbetűsen.

Szám

Áttekintés

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

>>> number = 3
>>> print(number + 2)
5

A fenti kód a Scratch-ben:

szam.png

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

>>> number = 5
>>> print(number + 2)
7

Sőt, a kettőt tudjuk kombinálni: végre tudunk hajtani műveletet, és az eredményt vissza tudjuk írni a változóba:

>>> number = number + 2
>>> print(number)
7

Ugyanez Scratch-ben:

szamnovel.png

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:

>>> 3+2
5
>>> 3-2
1
>>> 3*2
6
>>> 3/2
1.5
>>> 3//2
1
>>> 3%2
1
>>> 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 32 amiatt 9, mert 32 = 3*3 = 9.

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

muveletek.png

Összetettebb műveleteket is végre tudunk hajtani, viszont ahhoz egy ún. könyvá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, 7))

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 legnagyobb plusz egyet. Ez utóbbi talán egy kicsit szokatlan; egyelőre ezt el kell fogadnunk így, és később talán meg fogjuk érteni az okát is.

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:

>>> 3 + 2
5
>>> str(3) + str(2)
'32'
>>> '3' + '2'
'32'
>>> 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:

birth_year = input('Melyik évben születtél? ')
this_year = input('Milyen év van most? ')
age = int(this_year) - int(birth_year)
print(str(age) + ' é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

TODO

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