Programozzunk python nyelven - I. rész

Ennek a cikksorozat célja hogy alapszinten megismertesse az olvasót a python nyelvvel. A cikk megértéséhez szükséges némi programozói ismeret, ugyanis nem térek ki általános dolgok ismertetésére. Python ingyenesen letölthető a www.python.org-ról, több operációs rendszerre is.

Bevezetés:

A python egy széles körben használható, interpretált programnyelv. Előnye hogy könnyen megtanulható és akar komoly nagyméretű programok is fejleszthetők vele. Természetesen az interpretált futtatás bizonyos mértekben behatárolja a használatát, de a python értelmező számtalan platformon elérhető így a  programunkat gond nélkül  futtathatjuk ezeken a rendszereken. Tulajdonképpen rendelkezik minden olyan dologgal ami a mai modern nyelveknél elváras pl.: Objektum Orientált programozás, kivételkezelés, többszálúság, hálózati, és webprogramozás, adatbázisok programozása, reguláris kifejezések.

OOP helyett használhatjuk a hagyományos strukturált megoldásokat is így kezdő programozok is könnyen elsajátíthatják. A nyelv szintaktikája rendkívül egyszerű, egy gyakorlott mar több nyelvet ismerő programozó tulajdonképpen néhány nap alatt elsajátíthatja.

A python nyelv egyik sajátossága ami rögtön feltűnik ha megnézünk egy forráskódot, az hogy semmiféle blokk kezdő/záro karaktert/szót nem használ. Nincs se a C és még sok más nyelvben megszokott nyitó és záró kapocs ( {, } ), se a pascalból ismert begin/end. Hogy mi alapján dönti el az interpreter hogy mi hova tartozik? Egyszerűen hogy hogyan tagoltuk bekezdésekkel a kódot.

Pl.:

if a > 0 :

    print ’pozitiv’

elif a == 0 :

    print ’nulla ’

else :

   print ’negativ ’

   b = False

c = 0

Vegyük észre hogy az else ágban 2 utasítás van, és nem kellett jelölni bekezdésen kívül semmivel. Egyedül a „:” karakter szolgál arra hogy tudassa az interpreterrel a feltétel kezdetét, és mielött elfelejteném, a python kis/nagy betükre érzékeny nyelv.

Változók használata:

A pythonban, a mint a legtöbb script nyelvben nem kell külön deklarálni változókat. A változó típusa első értékadáskor dől el. Értékadásra a „=” karaktert használjuk. Léteznek numerikus, string, lista, tuple, és un. szótár változótípusok.

(Valamint természetesen az osztály vagyis a class típus, de ez majd az OOP-nél fog előjönni.) Ezek közül az utóbbi háromra térnék ki. Stringekről pedig később.

A lista, és tuple két tömb, azzal a különbséggel hogy a tuple elemeit nem lehet megválloztatni. A szótar pedig az asszoviatív tömbökhöz, illetve hashtáblákoz hasonló típus.

Az interpreterbe beírva ki is próbálhatjuk ezeket.

>>> szam = 13

>>> lebszam = 3.14

>>> tup = (szam, lebszam, 1, 3, 4, ’valami’)

>>> tup[2]

1

>>> tup[1] = 1

Traceback (most recent call last):

  File "<interactive input>", line 1, in ?

TypeError: object doesn't support item assignment

 >>> lst = list(tup)

>>> lst

[13, 3.1400000000000001, 1, 3]

>>> lst[1] = 1

>>> lst

[13, 1, 1, 3]

>>>

Innen láthatjuk a lista és tupple használata közötti szintaktikai különbséget, az egyiknél kerekzárójellel adhatjuk meg az elemeit, a másiknal szögletessel. Indexelni viszont mindkettőt szögletes zárójellel kell. Vegyük észre hogy létezik a pythonban is az úgynevezett castolás (type cast), azaz a típus konverzió, és a tömbök indexelése 0-tól kezdődik. Így tudtam átterni tuple típusról listára, és ennek az elemeit már meg lehetett változtatni. Listábol és tupleből természetesen tetszőleges dimenziójú tömbök is kialakithatók.

>>> matrix = [[1,2,3],[4,5,6]]

>>> matrix[0][0]

1

A dictionary azaz a szótár típus, egyrészt a nevének megfelelően a szótarhoz hasonloan kulcs-érték párok tárolására használható, illetve a struktútához, vagy rekordhoz hasonló adatszerkezet hozható létre belőle.

>>> dolgozok = {

... 'nev': 'Gabor',

... 'foglalkozas': 'programozo',

... 'eletkor' : '20',

     -

... }

>>> dolgozok['nev']

'Gabor'

A stringek:

A stringek elemeit, vagyis a karaktereket közvetlenül, csakúgy mint a tuple típusnál nem lehet megváltoztatni.

>>> str1 = "python"

>>> str2 = 'rulez'

>>> str[1] = "P"

Traceback (most recent call last):

  File "<interactive input>", line 1, in ?

TypeError: object does not support item assignment

>>>

Az első karakter kicserélésre tett kísérlet sikertelen. Láthatjuk viszont hogy kétféle idézőjelet is használhatunk az (”, ') Ha például stringen belül szeretnénk használni az egyik idézőjelet akkor megtehetjük escape szekvencia használata nélkül is.

>>> str = "I'm"

>>> str

"I'm"

>>>

Természetesen így már hibát írna az interpreter str = 'I'm'.

A python operátor szinten kezeli a stringek szétszeletelését az úngynevezett slicingot, és természetesen létezik konktatálás és számtalan egyéb stringművelet.

>>> str = str1 + " " + str2

>>> str

'python rulez'

>>> print str[0:6]

python

>>> print str[:6]

python

>>> print str[-5:]

rulez

Ezekkel kedvünkre eljátszadozhatunk, mert nagyon hasznos dolgok. Láthatjuk hogy kettősponttal megadhatjuk a string egy szeletét egy substringet, tól, ig formában, ha valamelyiket elhagyjuk az alapértelmezés szerint 0. Kettőspont nélkül pedig a normál indexelés műveletét használhatjuk.

>>> str[1]

'y'

>>> str[-1]

'z'

>>>

Akár előjelesen is.

A string tulajdonképpen itt egy objektum, így vannak különféle metódusai. Ezek közül csak néhányat említek.

>>> str

'python rulez'

>>> str.capitalize()

'Python rulez'

>>> str.find('ru')

7

>>> str.isalpha()

False

A típusok tárgyalasánál kifelejtettem a logikai típust, azaz a boolean-t. Ezt a típust csak az újabb interpreterek támogatják, és True, illetve False érteket vehet fel.

Elágazások:

Feltételezem hogy nem kell magyaráznom mit is takar ez a szó, inkább csak a szintaktikára térnék ki.

if feltétel(1) :

  utasítás(1)

  utasítás(2)

  -

  utasítás(n)

elif feltétel(2) :

 -

elif feltétel(n) :

 -

else :

 -

Egy példát már erre mutattam korábban. A bekezdés viszont nem csak esztétikai kérdés hanem kötelező.

Ciklusok:

Pythonban nincs olyan bőséges választék ezekből, mint például perlben, de a készítők célja épp ez volt hogy egy egyszerű, könnyen tanulható nyelvet tervezzenek.

Kétfajta elöl tesztelő ciklus van, a while és a for.

>>> i = 1

>>> while i <= 5 :

...      print i

...      i+=1

...     

1

2

3

4

5

>>>

Ugyanez for-ral.

>>> for i in range(1,6) :

...      print i

...     

1

2

3

4

5

A normál for ciklushoz szokott programozók valószínuleg csodálkoznak ezen. De a for eredeti célja az hogy egy stringet, tömböt egyszerűen bejárjunk vele.

Pl.:

>>> t = [1,2,3,4,5]

>>> for i in t:

...      print i

...     

1

2

3

4

5

>>>

Ezekután már valószínűleg tudjuk értelmezni a range függvényt is, ez nem a for ciklus része, de használatával csinálhatunk a normál for ciklusnak megfelelő ciklust is.

A ciklusmagban az történik hogy a ciklusváltozó sorra felveszi a tömb elemit, 0tól n-1 ig. A range függveny pedig a megadott indexek között létrehoz egy tömböt. Harmadik paraméterként megadhatjuk a növekményt is.

>>> t = range(1,6)

>>> t

[1, 2, 3, 4, 5]

Ez pedig egy 10től kettesével visszaszámláló ciklus.

>>> for i in range(10, 0, -2) :

...      print i

...

10

8

6

4

2

>>>

Így már egy meglehetősen rugalmas ciklust kaptunk, lényegesen jobban használható mint például a pascal for ciklusa, és természetesen listák, tuple változók bejárására is használható.

>>> t = ('python','tcl','perl')

>>> for i in t :

...      print i

...

python

tcl

perl

 

Ezennel az első rész végére értünk, a következő részben a függvényekkel fogunk foglalkozni, valamint egykét matematikai algoritmus python megvalósítását fogom bemutatni.

 

Magyar Attila - zeroflag@elte.hu