Informatika2-2014/teszt

A MathWikiből
(Változatok közti eltérés)
1. sor: 1. sor:
===Példák reguláris kifejezésekre===
+
===OOP===
  
[[http://docs.python.org/2/howto/regex.html python.org: Regular expression HOWTO]]
+
Egységbezárás (encapsulation): a procedurális megközelítéssel ellentétben az adatok és a függvények a program nem különálló részét képezik, azok összetartoznak: együtt alkotnak egy objektumot. Az objektum felülete(ke)n (interfész, interface) keresztül érhető el a többi objektum számára.
  
[[http://docs.python.org/2/library/re.html python.org: Regular expressions]]
+
Osztály (class): egy objektum prototípusa, tulajdonságokkal ellátva, melyek jellemzik az osztály példányait. A tulajdonságok osztály és példányváltozók, és metódusok (tagfüggvények). Pont-jelöléssel érhetők el.
  
[[http://www.tutorialspoint.com/python/python_reg_expressions.htm tutorialspoint.com: Python regexp összefoglaló]]
+
Példány (instance): egy osztályhoz tartozó egyedi objektum.  
  
Írjunk olyan reguláris kifejezéset, mely illeszkedik az alábbiakban megadott mintára!
+
Példányosítás (instantiation): egy osztály egy példányának létrehozása.
  
'''Feladat:''' néggyel osztható 2-jegyű szám
+
Példány változó (instance variable): metóduson belül definiált változó, mely csak az osztály adott példányához tartozik.
  
[02468][048]|[13579][26]
+
Osztályváltozó (class variable): változó, melyet az osztály minden példánya elér.
  
'''Feladat:''' szökőév
+
Metódus (method, tagfüggvény): osztályon belül definiált spec. függvény, első argumentuma tipikusan a self.
  
([1-9][0-9])(0[48]|[2468][048]|[13579][26])|(([2468][048]|[13579][26])00)
+
Öröklődés (inheritance): származtatással egy már meglévő osztályból egy újat hozunk létre. Ez rendelkezni fog az ős minden tulajdonságával, amihez továbbiakat ad(hat)unk.
  
 
+
Polimorfizmus/többalakúság (polymorphism): különböző viselkedésmódokkal ruházzuk fel az egymásból származtatott objektumokat.
'''Feladat:''' nagy betűkkel írt római számok
+
 
+
Évezred: <code>M{0,4}</code>, évszázad: <code>CM|CD|D?C{0,3}</code>, évtized: <code>XC|XL|L?X{0,3}</code>, év: <code>IX|IV|V?I{0,3}</code>. Akkor mégis mi a hiba az alábbi megoldással?
+
 
+
M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})
+
 
+
Hogy illeszkedik az üres sztringre is! Megoldás
+
 
+
\b(?=[MDCLXVI])M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})\b
+
 
+
'''Feladat:''' pozitív egészek, esetleg a sokjegyű számok hármasával csoportosítva vannak és a csoportok szóközzel elválasztva
+
 
+
[1-9](\d{0,2}( \d{3})+|\d*)
+
 
+
Ugyanez szóhatárok közt:
+
 
+
\b[1-9](\d{0,2}( \d{3})+|\d*)\b
+
 
+
'''Feladat:''' HTML-kódban hexadecimális színkód (3 vagy 6 hexa szám)
+
 
+
([0-9A-Fa-f]{3}){1,2}
+
 
+
 
+
'''Feladat:''' a yyyy-mm-dd formátum szerinti érvényes dátum az 1600-as évektől
+
 
+
<python>
+
"""
+
(
+
(1[6-9]\d\d|[2-9]\d{3})          # tetszőleges év
+
-(0[13456789]|1[0-2])            # nem február
+
-(0[1-9]|[12]\d|30)              # 1-30
+
|
+
(1[6-9]\d\d|[2-9]\d{3})          # tetszőleges év
+
-02-(0[1-9]|1\d|2[0-8])          # február
+
|
+
(1[6-9]\d\d|[2-9]\d{3})          # tetszőleges év
+
-(0[13578]|1[02])                # 31-napos hónap
+
-31                              # 31
+
|
+
(                                ###### szökőév
+
  (1[6-9]|[2-9]\d)                # első két jegy
+
  (0[48]|[2468][048]|[13579][26]) # 4-gyel osztható nem évszázad
+
|                                # vagy
+
  (([2468][048]|[13579][26])00)  # 400-zal osztható
+
)                                ###### szökőév eddig
+
-02-29                          # február 29
+
)
+
"""
+
</python>
+
 
+
'''Feladat:''' '-jelek vagy "-jelek közé zárt szöveg
+
 
+
(['"])[^\1]*\1
+
 
+
 
+
=== Modul szintű függvények ===
+
 
+
A modul betöltése:
+
 
+
import re
+
 
+
====A match objektumok ====
+
 
+
re.match(pattern, string, flags=0)
+
re.seartch(pattern, string, flags=0)
+
 
+
A match objektum metódusai: group(num=0), groups()
+
 
+
<python>
+
>>> line = "gyöngyön elemelem vilmoskörte"
+
>>>
+
>>> matchObj = re.match(r'\b(.+)\1\b', line, re.M|re.I)
+
>>>
+
>>> if matchObj:
+
...    print "matchObj.group() : ", matchObj.group()
+
...    print "matchObj.group(1) : ", matchObj.group(1)
+
...    print "matchObj.groups() : ", matchObj.groups()
+
... else:
+
...    print "No match!!"
+
...
+
matchObj.group() :  gyöngyön
+
matchObj.group(1) :  gyön
+
matchObj.groups() :  ('gy\xc3\xb6n',)
+
>>> matchObj = re.search(r'\b(.+)\1\b', line, re.M|re.I)
+
>>>
+
>>> if matchObj:
+
...    print "matchObj.group() : ", matchObj.group()
+
...    print "matchObj.group(1) : ", matchObj.group(1)
+
...    print "matchObj.groups() : ", matchObj.groups()
+
... else:
+
...    print "No match!!"
+
...
+
matchObj.group() :  gyöngyön
+
matchObj.group(1) :  gyön
+
matchObj.groups() :  ('gy\xc3\xb6n',)
+
</python>
+
 
+
Iterátor match objektumra:
+
 
+
<python>
+
>>> iterObj = re.finditer(r'\b(.+)\1\b', line, re.M|re.I)
+
>>>
+
>>> for j in iterObj:
+
...    print j.group()
+
...
+
gyöngyön
+
elemelem
+
</python>
+
 
+
Helyettesítés:
+
 
+
<python>
+
>>> print re.sub(r'\b(.+)\1\b', r'\1|\1', line, re.M|re.I)
+
gyön|gyön elem|elem vilmoskörte
+
>>>
+
>>> print re.sub(r'\b(.+)\1\b', r'\1|\1', line, 1, re.M|re.I)
+
gyön|gyön elemelem vilmoskörte
+
>>> print re.subn(r'\b(.+)\1\b', r'\1|\1', line, re.M|re.I)
+
('gy\xc3\xb6n|gy\xc3\xb6n elem|elem vilmosk\xc3\xb6rte', 2)
+
>>> print re.split(r'[,.\s]+', 'szavak, ige,    ez. Meg      az')
+
['szavak', 'ige', 'ez', 'Meg', 'az']
+
</python>
+
 
+
====A regex objektumok ====
+
 
+
A '''compile''' függvény egy reguláris kifejezésből egy regex objektumot hoz létre, amelynek használhatóak a search, match... metódusai. Körülményesebb, mint az előzőekben leírt módszerek, de bonyolultabb esetekben, és többször használatos reguláris kifejezésre ezt érdemes használni.
+
 
+
compile(pattern, flags=0)
+
 
+
Ez a kód
+
 
+
prog = re.compile(pattern)
+
result = prog.match(string)
+
 
+
ekvivalens ezzel:
+
 
+
result = re.match(pattern, string)
+
 
+
'''A reguláris kifejezés objektum metódusai:'''
+
 
+
search(string[, pos[, endpos]])
+
 
+
<python>
+
>>> pattern = re.compile("a.")
+
>>> pattern.search("hagyma")
+
<_sre.SRE_Match object at 0xaf83d8>
+
>>> _.group()
+
'ag'
+
>>> pattern.search("hagyma", 2)
+
>>> pattern.search("hagymaleves", 2)
+
<_sre.SRE_Match object at 0xaf8440>
+
>>> _.group()
+
'al'
+
>>> pattern.search("hagymaleves", 2, 4)
+
>>>
+
</python>
+
 
+
A match működése hasonló, csak az elejére illeszt.
+

A lap 2014. március 12., 12:42-kori változata

OOP

Egységbezárás (encapsulation): a procedurális megközelítéssel ellentétben az adatok és a függvények a program nem különálló részét képezik, azok összetartoznak: együtt alkotnak egy objektumot. Az objektum felülete(ke)n (interfész, interface) keresztül érhető el a többi objektum számára.

Osztály (class): egy objektum prototípusa, tulajdonságokkal ellátva, melyek jellemzik az osztály példányait. A tulajdonságok osztály és példányváltozók, és metódusok (tagfüggvények). Pont-jelöléssel érhetők el.

Példány (instance): egy osztályhoz tartozó egyedi objektum.

Példányosítás (instantiation): egy osztály egy példányának létrehozása.

Példány változó (instance variable): metóduson belül definiált változó, mely csak az osztály adott példányához tartozik.

Osztályváltozó (class variable): változó, melyet az osztály minden példánya elér.

Metódus (method, tagfüggvény): osztályon belül definiált spec. függvény, első argumentuma tipikusan a self.

Öröklődés (inheritance): származtatással egy már meglévő osztályból egy újat hozunk létre. Ez rendelkezni fog az ős minden tulajdonságával, amihez továbbiakat ad(hat)unk.

Polimorfizmus/többalakúság (polymorphism): különböző viselkedésmódokkal ruházzuk fel az egymásból származtatott objektumokat.

Személyes eszközök