Gyakorlat2

A MathWikiből
(Változatok közti eltérés)
(Eltávolította a lap teljes tartalmát)
1. sor: 1. sor:
== Bevezetés ==
 
  
* Ami mindenképpen kelleni fog a python file-od elejére:
 
import re
 
 
* A függvények amiket használni fogunk a keresésre / átírásra:
 
re.search("pattern", "string")
 
re.match("pattern", "string")
 
re.findall("pattern", "string")
 
re.sub("pattern", "replace", "string")
 
 
* Ezek egy match objektumot adnak vissza, feltéve hogy a match változóba mentjük, akkor a kövektezõ metódusok használhatók rajta:
 
match = re.search("i.a", "cica cila")
 
match.group()
 
match.group(0)
 
match.string
 
 
* Ez egy hasznos függvény lehet a próbálgatáshoz:
 
def show_match(string, pattern):
 
match = re.search(pattern, string)
 
if match:
 
return string[:match.start()] + "<<" + string[match.start():match.end()] + ">>" + string[match.end():]
 
else:
 
return "no match"
 
* További emlékeztetés a következõ file-ban: [http://math.bme.hu/~kkovacs/webprog/regexp.txt regexp.txt] vagy az elsõ elõadáson: [http://math.bme.hu/~kkovacs/webprog/WebprogEA1.pdf Elõadás1]
 
 
== Feladatok ==
 
 
=== Pár sorosak ===
 
 
Ezeknél a feladatoknál többnyire elég a show_match függvényt használni, de nem kötelezõ. A példa bemenetek soronként értendõk, nem mint egy nagy bemenet. Mindig az elsõ találatot kell csak megtalálni a sorban.
 
 
* Írj reguláris kifejezést, ami illeszkedik a "kutya" szóra.
 
Volt egyszer egy kiskutya, elment a vasarba.
 
 
* Írj reguláris kifejezést, ami illeszkedik bármilyen egybefüggõ számsorozatra (pl: 540548394).
 
A meleg evszakban, amikor 5456 az idojaras-szabalyzo szatellitaknak
 
a nagy tengereken 545534tombolo szelekkel kellett megharcolnia, az este
 
gyakran hozott esot 54343 a Sareer peremen.
 
 
* Írj egy reguláris kifejezést, ami illeszkedik bármilyen számra, legyen az egész, tizedestört, vagy két szám hányadosaként felírt racionális!
 
A bosi zsilip 22547645 hibaja miatt akadozik a budapesti hajokozlekedes
 
546.433 eve nem oltek amerikai nagykovetet
 
Atadjuk a 65/87 nuklearis tudasunkat Vietnamnak
 
Monda Lajos 65 a nagy 546.34 kiraly
 
 
* Írj reguláris kifejezést ami illeszkedik telefonszámokra, amik a következõ formátumban vannak: 06##-###-####
 
Egy Liga nem-hajo semleges teruleten voltak, ami mellett 0623-434-5432 Bene Gesserit- es Tleilax-monitorhajok gyulekeztek, mint ragadozo madarak a zsakmany korul.
 
A Liga 0532-323-4344 meghunyaszkodva igyekezett 06-23-545-5432 megbekiteni a Bene Gesseritet.
 
A kis ovalis 06sa-344-7654 terem, ahol 0643-43-65443 talalkoztak, szokasosan rezfalu es "kembiztos" volt.
 
 
* Írj reguláris kifejezést, ami e-mail címekre illeszkedik. Azt nem kell ellenõriznie, hogy valós cím lehet-e, viszont azt ellenõrizzük, hogy a karakterek érvényesek legyenek, azaz vagy betû vagy szám, és az utolsó részben (ahol a .hu, meg .com stb van) ne lehessen szám.
 
Ez legalabb@visszajelzes.volt.
 
Scytale megfelelokepp@valaszolt.86, de@feszulten.figyelt kozben.
 
Nem tetszett.neki a@helyzet. @A.e haz@egy.zsakutca vegeben allt.
 
 
* Írj python scriptet, ami egy sorban kicseréli az összes elõfordulását a 42-nek vagy betûvel írt "negyvenketto"-nek vagy "negyvenket"-nek, 23-ra. Arra vigyázzunk, hogy a negyvenketto es negyvenket bárhogy állhat nagy- és kisbetûkbõl.
 
vOlt eGySzeR 42 kiskUTYa, eLMENTeK negYvenKEt vasArBA. oTt TaLaLKOZtAk 43 FARkasSAl, akIKnek Volt NEGyVeNKet HAzikOJUK, es NEgYVenkeTtO kiSkuTYAJUK.
 
 
Bónusz:
 
* Az elõzõ feladat példa bemenetét alakítsuk normális szöveggé, azaz mindenhol kisbetûvel legyenek a szavak, kivéve a mondatok elején (mondat eleje a sor elején van és a .-ok után). Használhatjátok az str.lower() függvényt, ami visszaadja a beadott stringet mindenhol kisbetûvel, majd ezután kellene megoldani, hogy a mondatok eleje nagybetûs legyen.
 
 
 
=== Hosszabbak ===
 
 
* Írj python scriptet ami megszámolja hányszor szerepel az "a" és "az" névelõ a szövegben:
 
A hamisitas elleni kuzdelmet segitheti amerikai kutatok fejlesztese, amelyben nanoreszecskek
 
es fluoreszcens tinta felhasznalasaval allitottak elo szabad szemmel nem lathato vonalkodokat.
 
A QR-kodok fekete es feher blokkjai egyre inkabb elterjednek a kereskedelemben, mert szazszor
 
tobb informaciot hordoznak a hagyomanyos vonalkodokhoz kepest. A nyomtatott formaban megjeleno
 
hirdetesekben elhelyezett QR-kodokat okostelefonokkal lehet leolvasni es kozvetlenul a hirdeto
 
ceg honlapjara iranyitjak az erdeklodot. Kesobb kidolgoztak, hogy csak lezerfenyben legyen
 
lathato a QR-kod nyomtatasahoz alkalmazott tinta, igy a bankjegyhamisitas es mas termekek
 
hamisitasa elleni kuzdelemben is bevetheto a modszer.
 
A Del-Dakotai Egyetem es a Del-Dakotai Banyaszati es Muszaki Egyetem kutatoi az altaluk
 
kifejlesztett lathatatlan QR-kodhoz fluoreszcens tintaba kevert nanometeres meretu (a nanometer
 
a millimeter milliomod resze) reszecskeket hasznaltak. Az igy keszult kod csak akkor latszik, ha
 
infravoroshoz kozeli hullamhosszu lezerrel vilagitjak meg a feluletet. Az adott hullamhosszon a
 
nanoreszecskek kepesek elnyelni, abszorbealni a fotonokat, majd rovidebb, lathato hullamhosszon
 
kibocsatjak oket.
 
A kod, amikor megvilagitjak a lezerrel, mobiltelefonnal leolvashato es nagyobb biztonsagot nyujt
 
a korabbi eljarasnal, mert egeszen apro, csak mikroszkop alatt lathato reszleteket lehet
 
elrejteni benne az uj technika segitsegevel. Tovabbi elonye, hogy a lathatatlan kod meg akkor is
 
leolvashato, ha a hordozo papirt sokszor osszegyurtek. Raadasul papiron kivul mas anyagra is
 
nyomtathato, peldaul uvegre vagy muanyag filmre, ezert szamos kulonbozo teruleten hasznalhatjak
 
a hamisitas elleni vedekezesre. Az uj technologiat a Nanotechnology cimu szakfolyoiratban
 
ismertette Jeevan Meruga kutatasvezeto es csoportja.
 
 
* Írj python scriptet, ami kiírja az összes mondatot amiben szerepel a nano szó (bárhogy lehet nagy- és kisbetûkkel). A mondatok sor elejétõl .-ig, vagy .-tól .-ig terjednek.
 
A hamisitas elleni kuzdelmet segitheti amerikai kutatok fejlesztese, amelyben nanoreszecskek es fluoreszcens tinta felhasznalasaval allitottak elo szabad szemmel nem lathato vonalkodokat.
 
A QR-kodok fekete es feher blokkjai egyre inkabb elterjednek a kereskedelemben, mert szazszor tobb informaciot hordoznak a hagyomanyos vonalkodokhoz kepest. A nyomtatott formaban megjeleno hirdetesekben elhelyezett QR-kodokat okostelefonokkal lehet leolvasni es kozvetlenul a hirdeto ceg honlapjara iranyitjak az erdeklodot. Kesobb kidolgoztak, hogy csak lezerfenyben legyen lathato a QR-kod nyomtatasahoz alkalmazott tinta, igy a bankjegyhamisitas es mas termekek hamisitasa elleni kuzdelemben is bevetheto a modszer.
 
A Del-Dakotai Egyetem es a Del-Dakotai Banyaszati es Muszaki Egyetem kutatoi az altaluk kifejlesztett lathatatlan QR-kodhoz fluoreszcens tintaba kevert nanometeres meretu (a nanometer a millimeter milliomod resze) reszecskeket hasznaltak. Az igy keszult kod csak akkor latszik, ha infravoroshoz kozeli hullamhosszu lezerrel vilagitjak meg a feluletet. Az adott hullamhosszon a nanoreszecskek kepesek elnyelni, abszorbealni a fotonokat, majd rovidebb, lathato hullamhosszon kibocsatjak oket.
 
A kod, amikor megvilagitjak a lezerrel, mobiltelefonnal leolvashato es nagyobb biztonsagot nyujt a korabbi eljarasnal, mert egeszen apro, csak mikroszkop alatt lathato reszleteket lehet elrejteni benne az uj technika segitsegevel. Tovabbi elonye, hogy a lathatatlan kod meg akkor is leolvashato, ha a hordozo papirt sokszor osszegyurtek. Raadasul papiron kivul mas anyagra is nyomtathato, peldaul uvegre vagy muanyag filmre, ezert szamos kulonbozo teruleten hasznalhatjak a hamisitas elleni vedekezesre. Az uj technologiat a Nanotechnology cimu szakfolyoiratban ismertette Jeevan Meruga kutatasvezeto es csoportja.
 
 
* Írd át az elõzõ scriptet függvénnyé (ha még nem az), úgy hogy tetszõleges szóra tudj keresni.
 
 
 
=== Adat rendezés ===
 
 
* Töltsd le a következõ file-t: [http://math.bme.hu/~kkovacs/webprog/adat.txt adat.txt]
 
* Véletlen adatok és szavak vannak benne, a feladat az, hogy soronként kibányásszuk az e-mailcímeket, telefonszámokat, és dátumokat és mindezt tároljuk egy 2 dimenziós listában (listák listája).
 
* Az e-mailcímek és telefonszámok a fenti feladatokban már említett módon néznek ki, míg a dátumok 00/00/0000 formátumban vannak.
 
* A kimenetet file-ba írni nem feltétlen kell, de az lenne a legszebb megoldás, ha soronként lenne a megtalált e-mailcím majd telefonszám és végül a dátum.
 
* A feladathoz olvasnod kell tudni file-ban a python segítségével, ebben a következõ kód segít.
 
bemenet = open('./adat.txt', 'r')
 
kimenet = open('./kimenet.txt', 'w')
 
 
def fuggveny(s):
 
return "valami" + s
 
 
for line in bemenet:
 
line2 = fuggveny(line)
 
kimenet.write(line2)
 
 
adat.close()
 
kimenet.close()
 
* Parancsonként leírom mi mit csinál a kódban:
 
bemenet = open('./adat.txt', 'r')
 
* Megnyitja a bemenet változóba az adat.txt file-t ami egy mappában van a python scripttel, az 'r' (read) azt mondja meg, hogy olvasni akarunk a file-ban.
 
kimenet = open('./kimenet.txt', 'w')
 
* Mint az elõbb, csak 'w' (write) segítségével írásra nyitjuk meg.
 
def fuggveny(s):
 
return "valami" + s
 
* Csak valamilyen függvény ami csinál valamit a bemenetével majd visszaad valamit.
 
for line in bemenet:
 
line2 = fuggveny(line)
 
kimenet.write(line2)
 
* Végigmegyünk a bemenet sorain (itt a line csak egy változónév, lehetne i is, vagy koafkdofd is akár), és lefuttatjuk a fuggveny-t minden sorra, a kimenetet elmentjuk a line2-be, majd a kimenet file-ba írjuk a line2-t.
 
adat.close()
 
kimenet.close()
 
* Bezárjuk mindkét file-t, ez azért kell, mert csak azután lehetünk biztosak hogy megtörténtek a file-ba írások miután így bezártuk a file-t.
 

A lap 2012. szeptember 13., 02:18-kori változata