Ugrás a fő tartalomra

Python nyelv alapjai típusok, változók

# Az egysoros kommentek kettőskereszttel kezdődnek



""" Többsoros stringeket három darab " közé

    fogva lehet írni, ezeket gyakran használják

    több soros kommentként.

"""



####################################################

# 1. Egyszerű adattípusok és operátorok

####################################################



# Használhatsz számokat

3  # => 3



# Az alapműveletek meglepetésektől mentesek

1 + 1  # => 2

8 - 1  # => 7

10 * 2  # => 20

35 / 5  # => 7



# Az osztás kicsit trükkös. Egész osztást végez, és a hányados alsó egész része

# lesz az eredmény

5 / 2  # => 2



# Az osztás kijavításához a (lebegőpontos) float típust kell használnunk

2.0  # Ez egy float

11.0 / 4.0  # => 2.75 áh... máris jobb



# Az egész osztás a negatív számok esetén is az alsó egész részt eredményezi

5 // 3  # => 1

5.0 // 3.0  # => 1.0 # floatok esetén is

-5 // 3  # => -2

-5.0 // 3.0  # => -2.0



# Ha importáljuk a division modult (ld. 6. Modulok rész),

# akkor a '/' jellel pontos osztást tudunk végezni.

from __future__ import division



11 / 4  # => 2.75  ...sima osztás

11 // 4  # => 2 ...egész osztás



# Modulo művelet

7 % 3  # => 1



# Hatványozás (x az y. hatványra)

2 ** 4  # => 16



# A precedencia zárójelekkel befolyásolható

(1 + 3) * 2  # => 8



# Logikai operátorok

# Megjegyzés: az "and" és "or" csak kisbetűkkel helyes

True and False  # => False

False or True  # => True



# A logikai operátorok egészeken is használhatóak

0 and 2  # => 0

-5 or 0  # => -5

0 == False  # => True

2 == True  # => False

1 == True  # => True



# Negálni a not kulcsszóval lehet

not True  # => False

not False  # => True



# Egyenlőségvizsgálat ==

1 == 1  # => True

2 == 1  # => False



# Egyenlőtlenség !=

1 != 1  # => False

2 != 1  # => True



# További összehasonlítások

1 < 10  # => True

1 > 10  # => False

2 <= 2  # => True

2 >= 2  # => True



# Az összehasonlítások láncolhatóak!

1 < 2 < 3  # => True

2 < 3 < 2  # => False



# Stringeket " vagy ' jelek közt lehet megadni

"Ez egy string."

'Ez egy másik string.'



# A stringek összeadhatóak!

"Hello " + "world!"  # => "Hello world!"

# '+' jel nélkül is összeadhatóak

"Hello " "world!"  # => "Hello world!"



# ... illetve szorozhatóak

"Hello" * 3  # => "HelloHelloHello"



# Kezelhető karakterek indexelhető listájaként

"This is a string"[0]  # => 'T'



# A string hosszát a len függvény adja meg

len("This is a string")  # => 16



# String formázáshoz a % jel használható

# A Python 3.1-gyel a % már deprecated jelölésű, és később eltávolításra fog

# kerülni, de azért jó tudni, hogyan működik.

x = 'alma'

y = 'citrom'

z = "A kosárban levő elemek: %s és %s" % (x, y)



# A string formázás újabb módja a format metódus használatával történik.

# Jelenleg ez a javasolt megoldás.

"{} egy {} szöveg".format("Ez", "helytartó")

"A {0} pedig {1}".format("string", "formázható")

# Ha nem akarsz számolgatni, nevesíthetőek a pozíciók.

"{name} kedvence a {food}".format(name="Bob", food="lasagna")



# None egy objektum

None  # => None



# A None-nal való összehasonlításhoz ne használd a "==" jelet,

# használd az "is" kulcsszót helyette

"etc" is None  # => False

None is None  # => True



# Az 'is' operátor objektum egyezést vizsgál.

# Primitív típusok esetén ez nem túl hasznos,

# objektumok esetén azonban annál inkább.



# Bármilyen objektum használható logikai kontextusban.

# A következő értékek hamis-ra értékelődnek ki (ún. "falsey" értékek):

#    - None

#    - bármelyik szám típus 0 értéke (pl. 0, 0L, 0.0, 0j)

#    - üres sorozatok (pl. '', (), [])

#    - üres konténerek (pl., {}, set())

#    - egyes felhasználó által definiált osztályok példányai bizonyos szabályok szerint,

#      ld: https://docs.python.org/2/reference/datamodel.html#object.__nonzero__

#

# Minden egyéb érték "truthy" (a bool() függvénynek átadva igazra értékelődnek ki)

bool(0)  # => False

bool("")  # => False





####################################################

# 2. Változók és kollekciók

####################################################



# Létezik egy print utasítás

print "I'm Python. Nice to meet you!"  # => I'm Python. Nice to meet you!



# Így lehet egyszerűen bemenetet kérni a konzolról:

input_string_var = raw_input(

    "Enter some data: ")  # Visszatér a megadott stringgel

input_var = input("Enter some data: ")  # Kiértékeli a bemenetet python kódként

# Vigyázat: a fentiek miatt az input() metódust körültekintően kell használni

# Megjegyzés: Python 3-ban az input() már deprecated, és a raw_input() lett input()-ra átnevezve



# A változókat nem szükséges a használat előtt deklarálni

some_var = 5  # Konvenció szerint a névben kisbetu_es_alulvonas

some_var  # => 5



# Érték nélküli változóra hivatkozás hibát dob.

# Lásd a Control Flow szekciót a kivételkezelésről.

some_other_var  # name error hibát dob



# az if használható kifejezésként

# a C nyelv '?:' ternáris operátorával egyenértékűen

"yahoo!" if 3 > 2 else 2  # => "yahoo!"



# A listákban sorozatok tárolhatóak

li = []

# Már inicializáláskor megadhatóak elemek

other_li = [4, 5, 6]



# A lista végére az append metódus rak új elemet

li.append(1)  # li jelenleg [1]

li.append(2)  # li jelenleg [1, 2]

li.append(4)  # li jelenleg [1, 2, 4]

li.append(3)  # li jelenleg [1, 2, 4, 3]

# A végéről a pop metódus távolít el elemet

li.pop()  # => 3 és li jelenleg [1, 2, 4]

# Rakjuk vissza

li.append(3)  # li jelenleg [1, 2, 4, 3], újra.



# A lista elemeket tömb indexeléssel lehet hivatkozni

li[0]  # => 1

# A már inicializált értékekhez a = jellel lehet új értéket rendelni

li[0] = 42

li[0]  # => 42

li[0] = 1  # csak visszaállítjuk az eredeti értékére

# Így is lehet az utolsó elemre hivatkozni

li[-1]  # => 3



# A túlindexelés eredménye IndexError

li[4]  # IndexError hibát dob



# A lista részeit a slice szintaxissal lehet kimetszeni

# (Matekosoknak ez egy zárt/nyitott intervallum.)

li[1:3]  # => [2, 4]

# A lista eleje kihagyható így

li[2:]  # => [4, 3]

# Kihagyható a vége

li[:3]  # => [1, 2, 4]

# Minden második elem kiválasztása

li[::2]  # =>[1, 4]

# A lista egy másolata, fordított sorrendben

li[::-1]  # => [3, 4, 2, 1]

# A fentiek kombinációival bonyolultabb slice parancsok is képezhetőek

# li[start:end:step]



# Listaelemek a "del" paranccsal törölhetőek

del li[2]  # li jelenleg [1, 2, 3]



# A listák összeadhatóak

li + other_li  # => [1, 2, 3, 4, 5, 6]

# Megjegyzés: az eredeti li és other_li értékei változatlanok



# Összefőzhetőek (konkatenálhatóak) az "extend()" paranccsal

li.extend(other_li)  # li jelenleg [1, 2, 3, 4, 5, 6]



# Egy elem első előfordulásának eltávolítása

li.remove(2)  # li jelenleg [1, 3, 4, 5, 6]

li.remove(2)  # ValueError hibát dob, mivel a 2 nem szerepel már a listában



# Elemek beszúrhatóak tetszőleges helyre

li.insert(1, 2)  # li jelenleg [1, 2, 3, 4, 5, 6], ismét



# Egy elem első előfordulási helye

li.index(2)  # => 1

li.index(7)  # ValueError hibát dob, mivel a 7 nem szerepel a listában



# Egy listában egy elem előfordulása az "in" szóval ellenőrizhető

1 in li  # => True



# A lista hossza a "len()" függvénnyel

len(li)  # => 6



# Az N-esek ("tuple") hasonlítanak a listákhoz, de nem módosíthatóak

tup = (1, 2, 3)

tup[0]  # => 1

tup[0] = 3  # TypeError hibát dob



# Az összes lista-műveletet ezeken is használható

len(tup)  # => 3

tup + (4, 5, 6)  # => (1, 2, 3, 4, 5, 6)

tup[:2]  # => (1, 2)

2 in tup  # => True



# Az N-esek (és listák) kicsomagolhatóak külön változókba

a, b, c = (1, 2, 3)  # az a így 1, a b 2 és a c pedig 3

d, e, f = 4, 5, 6  # a zárójel elhagyható

# Ha elhagyod a zárójeleket, alapértelmezés szerint tuple képződik

g = 4, 5, 6  # => (4, 5, 6)

# Nézd, milyen egyszerű két értéket megcserélni

e, d = d, e  # d most már 5 és az e 4



# A Dictionary típusokban hozzárendelések (kulcs-érték párok) tárolhatók

empty_dict = {}

# Ez pedig rögtön értékekkel van inicializálva

filled_dict = {"one": 1, "two": 2, "three": 3}



# Egy dictionary értékei [] jelek közt indexelhetőek

filled_dict["one"]  # => 1



# A "keys()" metódus visszatér a kulcsok listájával

filled_dict.keys()  # => ["three", "two", "one"]

# Megjegyzés: egy dictionary párjainak sorrendje nem garantált

# Lehet, hogy már a fenti példán is más sorrendben kaptad meg az elemeket.



# Az értékek listája a "values()" metódussal kérhető le

filled_dict.values()  # => [3, 2, 1]

# ld. a fenti megjegyzést az elemek sorrendjéről.



# Az összes kulcs-érték pár megkapható N-esek listájaként az "items()" metódussal

filled_dict.items()  # => [("one", 1), ("two", 2), ("three", 3)]



# Az "in" kulcssszóval ellenőrizhető, hogy egy kulcs szerepel-e a dictionary-ben

"one" in filled_dict  # => True

1 in filled_dict  # => False



# Nem létező kulcs hivatkozása KeyError hibát dob

filled_dict["four"]  # KeyError



# A "get()" metódus használatával elkerülhető a KeyError

filled_dict.get("one")  # => 1

filled_dict.get("four")  # => None

# A metódusnak megadható egy alapértelmezett visszatérési érték is, hiányzó értékek esetén

filled_dict.get("one", 4)  # => 1

filled_dict.get("four", 4)  # => 4

# Megjegyzés: ettől még filled_dict.get("four") => None

# (vagyis a get nem állítja be az alapértelmezett értéket a dictionary-ben)



# A kulcsokhoz értékek a listákhoz hasonló szintaxissal rendelhetőek:

filled_dict["four"] = 4  # ez után filled_dict["four"] => 4



# A "setdefault()" metódus csak akkor állít be egy értéket, ha az adott kulcshoz még nem volt más megadva

filled_dict.setdefault("five", 5)  # filled_dict["five"] beállítva 5-re

filled_dict.setdefault("five", 6)  # filled_dict["five"] még mindig 5



# Egy halmaz ("set") olyan, mint egy lista, de egy elemet csak egyszer tárolhat

empty_set = set()

# Inicializáljuk ezt a halmazt néhány elemmel

some_set = set([1, 2, 2, 3, 4])  # some_set jelenleg set([1, 2, 3, 4])



# A sorrend itt sem garantált, még ha néha rendezettnek is tűnhet

another_set = set([4, 3, 2, 2, 1])  # another_set jelenleg set([1, 2, 3, 4])



# Python 2.7 óta már {} jelek közt is lehet halmazt definiálni

filled_set = {1, 2, 2, 3, 4}  # => {1, 2, 3, 4}



# Új halmaz-elemek hozzáadása

filled_set.add(5)  # filled_set is now {1, 2, 3, 4, 5}



# Halmaz metszés a & operátorral

other_set = {3, 4, 5, 6}

filled_set & other_set  # => {3, 4, 5}



# Halmaz unió | operátorral

filled_set | other_set  # => {1, 2, 3, 4, 5, 6}



# Halmaz különbség -

{1, 2, 3, 4} - {2, 3, 5}  # => {1, 4}



# Szimmetrikus differencia ^

{1, 2, 3, 4} ^ {2, 3, 5}  # => {1, 4, 5}



# Vizsgáljuk, hogy a bal oldali halmaz magában foglalja-e a jobb oldalit

{1, 2} >= {1, 2, 3}  # => False



# Vizsgáljuk, hogy a bal oldali halmaz részhalmaza-e a jobb oldalinak

{1, 2} <= {1, 2, 3}  # => True



# Halmazbeli elemek jelenléte az in kulcssszóval vizsgálható

2 in filled_set  # => True

10 in filled_set  # => False



Megjegyzések