1 BEVEZETÉS A WEBALKALMAZÁSOK KÉSZÍTÉSÉBE2 23 A weblapok HTML formátumú dokumentumok, amiket egy hálózaton (intraneten vagy interneten) böngész nek ne...
A weblapok HTML formátumú dokumentumok, amiket egy hálózaton (intraneten vagy interneten) böngész nek nevezett programokkal (Mozilla Firefox, Opera, Internet Explorer, ...) lehet megnézni. A HTML lapok egy másik számítógép - amin állandóan fut egy Web servernek (Apache, IIS, Zope, ...) nevezett alkalmazás - public könyvtárába vannak telepítve. Amikor létrejött egy kapcsolat a mi számítógépünk és e között a számítógép között, akkor a böngész programunk párbeszédet folytathat a szerverprogrammal (egy sor hardvereszköz és program közvetítésével, amikr l most nem fogunk beszélni : telefonvonalak, routerek, cache-ek, kommunikációs protokolok ...). A weblapok átvitelét kezel HTTP protokoll kétirányú adatcserét engedélyez. Azonban az esetek nagy többségében az információ átvitel gyakorlatilag csak egyirányú, a szerver fel l a böngész felé : szövegeket, képeket, különféle fájlokat küld neki nagy számban (ezek a weblapok, amiket megnézünk); ezzel szemben a böngész a szervernek csak kevés információt küld : lényegében azoknak a lapoknak az URL-jét, amiket a szörföz meg akar nézni.
Interaktív weblapok Tudjuk viszont, hogy vannak olyan weblapok, amik arra szólítanak fel, hogy szolgáltassunk nagyobb mennyiség információt : adjunk meg személyünkre vonatkozó adatokat egy klubba való beiratkozáskor, vagy egy szállodai szobafoglaláskor, a hitelkártyaszámunkat egy e-kereskedelmi oldalon egy termék megrendelésekor, véleményünket vagy javaslatainkat, stb. Sejtjük, hogy egy ilyen esetben, mint az említettek egyike, az átvitt információt a szerveroldalon egy speciális programnak kell kezelni. Tehát az ilyen, információ fogadására szánt weblapok el kell legyenek látva egy olyan mechanizmussal, ami biztosítja az adatok átvitelét az információ kezelésére szánt program felé. Arra is szükség van, hogy ez a program információt tudjon átadni a szervernek, hogy az a m velet eredményét egy új weblap formájában tudja prezentálni a szörföl nek. Ennek a fejezetnek az a célja, hogy megmagyarázza, hogyan használhatjuk fel Python programozási tudásunkat arra, hogy egy weblaphoz - valódi alkalmazások beillesztésével ilyen interaktivitást adjunk.
A CGI interfész A CGI (Common Gateway Interface) interfész a legtöbb webszervernek az egyik komponense. Ez egy átjáró, ami lehet vé teszi a kommunikációt az ugyanazon a számítógépen futó más programokkal. CGI-vel más nyelveken (Perl, C, Tcl, Python ...) írhatunk scripteket. Ahelyett, hogy a webet el re megírt dokumentumokra korlátoznánk, a CGI lehet vé teszi, hogy a szörföl böngész je segítségével megadott adatoktól függ en hozzunk létre weblapokat. A CGI scriptekkel az alkalmazások széles skálája hozható létre : online regisztrációs szolgáltatások, adatbázis keres eszközök, közvélemény kutatások, játékok, stb. Feladat – Szöveg kiíratása Készítsünk olyan weblapot, ahol egy gomb lenyomására egy Python script kiír valamilyen szöveget!
" print "" print "" A script els sorában a python értelmez elérési útját kell megadni, ez linux esetében általában #!/usr/bin/python. A fenti példa windowsra vonatkozik, itt az elérési út a c:\Python25\python Az rlapon lév gomb lenyomása egy üzenetet küld a webszervernek, amely lefuttatja a paraméterben szerepl szoveg.py scriptet. A sikeres futtatáshoz néhány beállítás szükséges. El ször is telepíteni kell a mod_python csomagot, amely az adott webszervert (a mi esetünkben Apache) teszi képessé python scriptek futtatására. A szerver konfigurációs állományában pedig szerepelnie kell a következ bejegyzéseknek: LoadModule python_module modules/mod_python.so AddHandler cgi-script .cgi .py (ez utóbbi a szakaszban) Options Indexes FollowSymLinks Includes ExecCGI (ez utóbbi a Optimális esetben ezek a bejegyzések telepítéskor automatikusan is bekerülhetnek. Amint látható a kiírásra itt is a print parancsot használjuk, csupán annyi az érdekesség, hogy a paraméterben megadott string részei HTML formázó utasítások is lehetnek. Feladat – Szöveg beolvasása, változó értékének átadása Készítsünk olyan weblapot, amely bekér egy nevet, majd egy gomb megnyomására olyan script fut le, amely köszön!
5
RLAP <TITLE>Köszönés
Írd be a neved!
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interfész modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása (a „nev” az rlapnál alkalmazott elnevezése a beviteli mez nek) x = form["nev"].value print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap"
" print "" print "" Feladat – Számológép Készítsünk olyan weblapot, amely bekér két számot és a négy alapm velet egyikét majd egy gomb megnyomására olyan script fut le, amely kiszámítja az eredményt!
7
RLAP <TITLE>Számológép
Számológép
SCRIPT # interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása x = float(form["szam1"].value) y = float(form["szam2"].value) m = form["muvelet"].value if m == '+': eredmeny = x + y if m == '-': eredmeny = x - y if m == '*': eredmeny = x * y if m == '/': eredmeny = x / y print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap"
8
print "" print "" print "
" #Az átadott érték kiírása print x, " ", m, " ", y, " = ", eredmeny print "
" print "" print "" A programnak egyetlen hibája, hogy amennyiben nem írunk be a beviteli mez kbe adatokat, hanem azonnal a nyomógombra kattintunk, egy hibaüzenetet kapunk.
Ez a hibaüzenet adódik egyébként minden olyan esetben, amikor a webszerver nem tud megfelel kimenetet produkálni. Feladat – Számológép2 Egészítsük ki az el programunkat úgy, hogy ellen rizzük azt, hogy a beviteli mez k ki vannak-e töltve, ha nincsenek, akkor alapértelmezett értékekkel dolgozzunk! SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel
9
import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása if form.has_key("szam1"): x = float(form["szam1"].value) else: x=0 if form.has_key("szam2"): y = float(form["szam2"].value) else: y=0 if form.has_key("muvelet"): m = form["muvelet"].value else: m = '+' if m == '+': eredmeny = x + y if m == '-': eredmeny = x - y if m == '*': eredmeny = x * y if m == '/': eredmeny = x / y print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #Az átadott érték kiírása print x, " ", m, " ", y, " = ", eredmeny print "
" print "" print "" Az importált cgi modul biztosítja a Python script kapcsolatát a CGI interfésszel, ami
10
lehet vé teszi a párbeszédet a webszerverrel. A modul FieldStorage() függvénye visszatérési értékként egy objektumot ad, ami a HTML formmal átadott adatokat tartalmazza. A form nev változóba tesszük ezt a szótárra nagyon hasonlító objektumot. Egy valódi szótár és a form nev változóba tett objektum között az a lényeges különbség, hogy az utóbbiból a value() metódussal kell kiszedni az értékeket. A szótárakra alkalmazható többi metódust, mint amilyen például a has_key(), a szokásos módon használhatjuk. A FieldStorage() visszatérési értékeként megadott szótárobjektum fontos jellemz je, hogy a megfelel HTML formban üresen hagyott mez k számára nincs kulcsa. Példánkban a formnak két adatbeviteli mez je van, amikhez a „szam1” és „szam2” neveket rendeltük. Ha a felhasználó kitöltötte ket, akkor a tartalmukat a szótárobjektumban a „szam1” és a „szam2” indexeken fogjuk megtalálni. Viszont, ha valamelyik mez t nem töltöttük ki, akkor az annak megfelel index nem fog létezni. Tehát az értékek bármiféle kezelése el tt feltétlenül meg kell bizonyosodni a várt indexek létezésér l. Feladat – Krumpli Egy cserkésztáborban készül a vacsora, de a konyhaf nök nem tudja, mennyi krumplit vegyen. A fejadagot ismeri az 0,4 kg, de a szükséges mennyiséget számítógép segítségével szeretné kiszámolni az aktuális létszámtól függ en. Írjuk meg a programot a konyhaf nöknek! A program kérje be a létszámot, majd írja ki a szükséges mennyiséget a következ képpen!
11
RLAP <TITLE>Krumpli
Krumpli
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása if form.has_key("letszam"): x = float(form["letszam"].value) else: x=0 #Az eredmény kiszámítása eredmeny = x * 0.4 #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #Az átadott érték kiírása print "A szükséges mennyiség: ", x, " * 0,4 kg = ", eredmeny, " kg" print "
" print ""
12
print "" Feladat – Henger Kérjük be egy henger sugarát és magasságát cm-ben, majd - írjuk ki a henger térfogatát! - Írjuk ki a henger súlyát, ha ez tömör vashenger, és ha fahenger! A kiírásokban a számokat kerekítsük 2 tizedesre!
RLAP <TITLE>Henger
Henger
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*from math import * # interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása if form.has_key("sugar"): r = float(form["sugar"].value) else: r=0 if form.has_key("magassag"): m = float(form["magassag"].value) else: m=0 #Az eredmény kiszámítása terf = r * r * pi * m vas = terf * 7.8 fa = terf * 0.7 #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #Az átadott érték kiírása print "A henger térfogata: ", round(terf,2), " cm<SUP>3 " print "A vashenger tömege: ", round(vas,2), " g " print "A fahenger tömege: ", round(fa,2), " g"
14
print "
" print "" print "" Feladat – Bank Ha beteszünk a bankba egy adott összeget, adott éves kamatszázalékra, adott hónapra, mennyi pénzt vehetünk majd fel az id lejártakor?
RLAP <TITLE>Bank
Bank
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*from math import * # interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása if form.has_key("osszeg"): ossz = float(form["osszeg"].value) else: ossz = 0 if form.has_key("honap"): ho = float(form["honap"].value) else: ho = 0 if form.has_key("kamat"): k = float(form["kamat"].value) else: k=0 #Az eredmény kiszámítása eredmeny = ossz * pow(1+k/100,ho/12) #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
"
16
#Az átadott érték kiírása print ho, "hónap múlva ", round(eredmeny,0), " Ft-ot vehet ki." print "
" print "" print "" FELADATOK: 1. Kérd be a felhasználó nevét, majd írd ki a következ jókívánságot: Kedves <<X>>! Sikeres webprogramozást! 2. Kérd be egy téglatest három élének hosszúságát, majd írd ki a hasáb felszínét és térfogatát! 3. Tárold konstansokban a krumpli, a hagyma és a padlizsán egységárát! Írj olyan programot, amely bekéri, hogy mib l mennyit óhajt a vásárló, majd készítsen egy számlát a következ formában: Krumpli : 2.5 kg * 70 Ft/kg = 175 Ft Hagyma : 3.0 kg * 98 Ft/kg = 294 Ft Padlizsán : 10.0 kg * 200 Ft/kg = 2000 Ft ----------------------------------------------------------------------------------Összesen 2469 Ft 4. Kérd be a gömb sugarát, majd írd ki a gömb felszínét és térfogatát! 5. Ha a számla ÁFA összege a számla nettó értékének egy adott százaléka, akkor hány százalék ÁFÁ-t tartalmaz a számla bruttó összege? Készíts a problémára egy kisegít programot! Például 25%-os ÁFA esetén a számla 20% ÁFÁ-t tartalmaz, 12%-os ÁFA esetén a számla ÁFA tartalma 10,71%. 6. Feri pénzt kap. Hogy mennyit, azt kérje be a program. A kifizetéshez 5000, 1000, 500 és 100 Ft-os címletek állnak rendelkezésre – a maradékot Feri nem kapja meg. Feltételezzük, hogy minden címletb l van elég, és a lehet legkevesebb számú pénz kerül kiosztásra. Milyen címletb l hányat kapott Feri, és mennyit hagyott ott ajándékba. Feladat – Fizetés Kérjük be egy alkalmazott fizetését! Ha ez a fizetés 100 000 forintnál nem nagyobb, akkor emeljük meg 25%-kal! Végül írjuk ki az alkalmazott fizetését!
17
RLAP <TITLE>Fizetés
Fizetés
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel
18
import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása if form.has_key("fizetes"): fiz = float(form["fizetes"].value) else: fiz = 0 #Az eredmény kiszámítása if (fiz < 100000) : fiz = fiz * 1.25 #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #Az átadott érték kiírása print "Az új fizetés ", fiz, " Ft." print "
" print "" print "" Feladat – Jó szám Kérjünk be egy valós számot! A szám akkor jó, ha 1000 és 2000 közötti páros egész (a határokat is beleértve). Írjuk ki, hogy a szám jó, vagy nem jó!
19
RLAP <TITLE>Jó szám
Jó szám
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása if form.has_key("szam"): sz = float(form["szam"].value) else: sz = 0 #Az eredmény kiszámítása if (sz >= 1000) and (sz <= 2000) and (sz % 2 == 0): valasz = "A szám jó." else:
20
valasz = "A szám nem jó." #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #A kiszámított érték kiírása print valasz print "
" print "" print "" Feladat – Kor Olvassunk be egy nem negatív egész számot, valakinek az életkorát! Kortól függ en írjuk ki a megfelel szöveget: 0 – 13 évig: Gyermek 14 – 17 évig: Fiatalkorú 18 – 23 évig: Ifjú 24 – 59 évig: Feln tt 60 évt l Id s!
21
RLAP <TITLE>Életkor
Életkor
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása if form.has_key("eletkor"): kor = float(form["eletkor"].value) else: kor = 0 #Az eredmény kiszámítása if (kor <= 13): valasz = "Gyermek" elif (kor <= 17): valasz = "Fiatalkorú" 22
" #A kiszámított érték kiírása print valasz print "
" print "" print "" FELADATOK: 1. Kérd be egy telek oldalait méterben! Írd ki a telek területét négyszögölben! (1 négyszögöl = 3,6 m2). Ha a telek 100 négyszögölnél kisebb, akkor írja ki, hogy túl kicsi! 2. Van egy henger alakú hordónk, melybe nem tudjuk, hogy belefér-e a rendelkezésre álló bor. Kérd be a bor mennyiségét literben, majd a hordó összes szükséges adatát cmben. Adj tájékoztatást, hogy hány literes a hordó, és hogy belefér-e a hordóba a bor! Ha belefér, akkor add meg, hogy mennyi férne még bele! Írd ki százalékosan is a telítettséget! Az adatokat egészre kerekítve írd ki! 3. Kérj be egy évszámot! Ha a beütött szám negatív, akkor adj hibajelzést, ha nem, akkor állapítsd meg, hogy az évszám osztható-e 17-tel, vagy nem! 4. Kérd be Zsófi, Kati és Juli születési évét. Írd ki a neveket udvariassági sorrendben (el re az id sebbeket…)! 5. Kérj be egy egyjegy , nem negatív számot! Írd ki a szám szöveges formáját (1=egy, 2=kett stb.) 6. Kérj be egy egész óra értéket. Ha a szám nem 0 és 24 óra között van, akkor adjon hibaüzenetet, egyébként köszönjön el a program a napszaknak megfelel en! 4-9: Jó reggelt!, 10-17: Jó napot!, 18-21: Jó estét!, 22-3: Jó éjszakát! 7. Egy dolgozatra annak pontszámától függ en a következ osztályzatot adják: elégtelen (1): 0 – 29
23
elégséges (2): 30 – 37 közepes (3): 38 – 43 jó (4): 44 – 49 jeles (5): 50 – 55 Kérd be a dolgozat pontszámát, majd írja ki az osztályzatot számmal és bet vel! Feladat – Bank Van egy kis megtakarított pénzem. Arra vagyok kíváncsi, hogy hány hónap múlva éri el ez az összeg a bankban a 100 000 Ft-ot, ha havi 2%-os kamattal számolhatok?
RLAP <TITLE>Bank
Bank
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása if form.has_key("penz"): p = float(form["penz"].value) else: p=0 #Az eredmény kiszámítása honap = 0 while (p < 100000): p = p * 1.02 honap = honap + 1 #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #A kiszámított érték kiírása print honap, " hónap múlva felvehetsz ", round(p,0), " Ft-ot." print "
" print "" print "" Feladat – Jegyek száma Kérjünk be egy számot! Írjuk ki a jegyeinek a számát!
25
RLAP <TITLE>Jegyek száma
Jegyek száma
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel 26
import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása if form.has_key("szam"): x = int(form["szam"].value) else: x=0 #Az eredmény kiszámítása seged = x jegySzam = 0 while (seged != 0): seged = seged / 10 jegySzam = jegySzam + 1 #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #A kiszámított érték kiírása print x, " jegyeinek száma: ", jegySzam print "
" print "" print "" Feladat – Oszthatóság Két szám között határozzuk meg az els olyan számot, amelyik osztható egy megadott számmal!
27
RLAP <TITLE>Oszthatóság
Oszthatóság
28
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása if form.has_key("szam1"): kezd = int(form["szam1"].value) else: kezd = 0 if form.has_key("szam2"): veg = int(form["szam2"].value) else: veg = 0 if form.has_key("szam3"): oszto = int(form["szam3"].value) else: oszto = 0 #Az eredmény kiszámítása if (kezd > veg): seged = kezd kezd =veg veg = seged while (kezd % oszto != 0) and (kezd <= veg): kezd = kezd + 1 if (kezd > veg): valasz = "Nem található ilyen szám." else: valasz = 'Az els ilyen szám: '+str(kezd) #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
"
29
#A kiszámított érték kiírása print valasz print "
" print "" print "" Feladat – Fizetés Most 2009-et írunk. Írjuk ki, hogy egy adott évig mennyi lesz József fizetése, ha évenként 12%-kal növekszik! József jelenlegi fizetését, és az évszámot kérjük be!
30
RLAP <TITLE>Fizetés
Fizetés
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() #Az érték átadása if form.has_key("penz"): p = float(form["penz"].value) else: p=0 if form.has_key("ev"): ev = int(form["ev"].value) else: ev = 2009 #Az eredmény kiszámítása x = [0]*100 for i in range(2009,ev+1): p = p * 1.12 x[i-2009] = p #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap"
31
print "" print "" print "
" #A kiszámított érték kiírása for i in range(2009,ev+1): print i, ". évben ", round(x[i-2009],0), " Ft a fizetés. " print "
" print "" print "" Feladat – Háromszög Írjunk olyan programot, amely egy háromszög három oldalából kiszámítja annak kerületét és területét!
RLAP
32
<TITLE>Háromszög
Háromszög
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*from math import * # interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() def kerulet(a,b,c): return a+b+c def terulet(a,b,c): s = kerulet(a,b,c)/2 return sqrt(s*(s-a)*(s-b)*(s-c)) #Az érték átadása if form.has_key("szam1"): a = float(form["szam1"].value) else: a=0 if form.has_key("szam2"): b = int(form["szam2"].value) else: b=0 if form.has_key("szam3"): c = int(form["szam3"].value) else: c=0
" #A kiszámított érték kiírása print "A háromszög kerülete: ", kerulet(a,b,c) print " " print "A háromszög területe: ", terulet(a,b,c) print "
" print "" print "" Feladat – Faktoriális Írjunk olyan programot, amely kiírja egy adott szám faktoriálisát!
34
RLAP <TITLE>Faktorialis
Faktoriális
SCRIPT # -*- coding: ISO-8859-2 -*# interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() def faktorialis(n): f=1 for i in range(1,n+1): f=f*i return f #Az érték átadása if form.has_key("szam"): x = int(form["szam"].value) else: x=0 #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" print "" print "" Feladat – Faktoriális2 Írjunk olyan programot, amely kiírja egy adott szám faktoriálisát! Alkalmazzunk rekurzív algoritmust! SCRIPT (Csak a függvényt kell lecserélni) def faktorialis(n): if (n == 0): return 1 else: return n * faktorialis(n-1) Feladat – Fibonacci Írjunk olyan programot, amely kiírja a Fibonacci-sorozat n-edik elemét!
RLAP
36
<TITLE>Fibonacci
Fibonacci
SCRIPT # -*- coding: ISO-8859-2 -*# interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() def fibonacci(n): if (n == 1) or (n == 2): return 1 else: return fibonacci(n-1) + fibonacci(n-2) #Az érték átadása if form.has_key("szam"): x = int(form["szam"].value) else: x=0 #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #A kiszámított érték kiírása print "Az eredmény: ", fibonacci(x) print "
"
37
print "" print "" FELADATOK 1. Írj olyan függvényt, amely visszaadja egy szám kétszeresét! 2. Írj olyan függvényt, amely egy kör sugarából visszaadja annak területét! 3. Írj olyan függvényt, amely egy gömb sugarából visszaadja annak térfogatát! 4. Írj olyan függvényt, amely visszatér a két paraméterében megadott egész szám közötti egész számok összegével, a határokat is beleértve! 5. Írj olyan függvényt, amely eldönti, hogy egy adott szám prímszám-e? Feladat – E-bet Írjunk olyan programot, amely egy stringben megszámolja az e bet ket!
RLAP
38
<TITLE>E-bet
E-bet
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() def ebetukSzama(szoveg): db = 0 for i in range(len(szoveg)): if (szoveg[i] == 'e') or (szoveg[i] == 'E'): db = db + 1 return db #Az érték átadása if form.has_key("szoveg"): x = form["szoveg"].value else: x = "" #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #A kiszámított érték kiírása print "E bet k száma:", ebetukSzama(x)
39
print "
" print "" print "" Feladat – Csillagozás Írjunk egy programot, ami egy új változóba másol át egy karakterláncot úgy, hogy csillagot szúr be a karakterek közé. Így például, « gaston »-ból « g*a*s*t*o*n » lesz!
RLAP <TITLE>Csillagoz
Csillagoz
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() def csillagoz(szoveg): uj = "" for i in range(len(szoveg)-1): uj = uj + szoveg[i] + "*" uj = uj + szoveg[len(szoveg)-1] return uj #Az érték átadása if form.has_key("szoveg"): x = form["szoveg"].value else: x = "" #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #A kiszámított érték kiírása print "E bet k száma:", csillagoz(x) print "
" print "" print "" Feladat – Megfordít Írjunk egy programot, ami egy új változóba fordított sorrendben másolja át egy karakterlánc karaktereit. Így például « zorglub » -ból « bulgroz » lesz!
41
RLAP <TITLE>Megfordít
Megfordít
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel 42
import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() def fordit(szoveg): uj = "" for i in range(len(szoveg)-1): uj = uj + szoveg[i] + "*" uj = uj + szoveg[len(szoveg)-1] return uj #Az érték átadása if form.has_key("szoveg"): x = form["szoveg"].value else: x = "" #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #A kiszámított érték kiírása print "E bet k száma:", fordit(x) print "
" print "" print "" Feladat – Másodfokú egyenlet Írjunk olyan programot, amely kiszámítja egy másodfokú egyenlet gyökeit annak együtthatóiból!
43
RLAP <TITLE>Másodfokú egyenlet
Másodfokú egyenlet
SCRIPT #!/Python25/python # -*- coding: ISO-8859-2 -*# interface modul a webserverrel import cgi # A felhasználói kérés fogadása form = cgi.FieldStorage() from math import * class MasodfokuEgyenlet: def __init__(self,szam1,szam2,szam3): self.a = szam1 self.b = szam2 self.c = szam3 def diszkriminans(self): return self.b * self.b - 4 * self.a * self.c 44
def megoldas1(self): return (-self.b + sqrt(self.diszkriminans())) / (2 * self.a) def megoldas2(self): return (-self.b - sqrt(self.diszkriminans())) / (2 * self.a) def __doc__(self): if (self.a == 0): return 'Az egyenlet nem másodfokú.' elif (self.diszkriminans() < 0): return 'Az egyenletnek nincs valós megoldása.' else: return 'Az egyenlet egyik megoldása: '+str(self.megoldas1())+' ; Az egyenlet másik megoldása: '+str(self.megoldas2()) #Az érték átadása if form.has_key("szam1"): a = float(form["szam1"].value) else: a=0 if form.has_key("szam2"): b = float(form["szam2"].value) else: b=0 if form.has_key("szam3"): c = float(form["szam3"].value) else: c=0 egyenlet = MasodfokuEgyenlet(a,b,c) #A HTML kód elkészítése print "Content-type: text/html" print print "" print "" print "<TITLE>Új lap" print "" print "" print "
" #A kiszámított érték kiírása print egyenlet.__doc__() print "
" print "" print ""
45
Adatbázis-kezelés Feladat – Adattábla létrehozása Készítsünk olyan programot, amely létrehoz egy Tanulo nev táblát (Tankod Integer, TanNev Text(20)) típusú mez kkel!
" print "Vissza a kezd lapra" print "" print "" 1. Készíts menüvezérelt programot a következ adatok nyilvántartásához: KRONOLOGIA Azonosito Ev Az esemény évszáma Helyseg Az esemény helyszíne MiTortent Az esemény rövid leírása A program biztosítson lehet séget az adatbevitelre! A program listázza az adatokat évszám szerint rendezetten! A program kérje be az évszázad sorszámát, és listázza az adott évszázad eseményeit! 2. Készíts menüvezérelt programot a következ adatok nyilvántartásához: EGESZSEG Azonosito Nev A sportoló neve Testmagassag A sportoló testtömege Testtomeg A sportoló testmagassága
60
A program biztosítson lehet séget az adatbevitelre! A program listázza az adatokat azonosító szerint rendezetten! A program számítsa ki a személyek testtömeg indexét (Testtömeg(kg)/(testmagasság(m))2), majd listázza a sportolók nevével együtt! 3. Készíts menüvezérelt programot a következ adatok nyilvántartásához: ENERGIA Azonosito Nev Az élelmiszer neve Kaloria Az élelmiszer energiatartalma Összetétel Rövid leírás az élelmiszer összetételér l A program biztosítson lehet séget az adatbevitelre! A program listázza az adatokat energiatartalom szerint rendezetten! A program kérje be az adott élelmiszer nevét, majd írja ki az adatait! 4. Készíts menüvezérelt programot a következ adatok nyilvántartásához: KUTYA Azonosito Nev A talált kutya neve Fajta A talált kutya fajtája Mod Leírás arról, hogy hogyan találták A program biztosítson lehet séget az adatbevitelre! A program listázza az adatokat azonosító szerint rendezetten! A program kérje be a megtalálás módját, és listázza az ahhoz tartozó kutyák adatait! 5. Készíts menüvezérelt programot a következ adatok nyilvántartásához: VIRAG Azonosito Nev A virág neve Szin A virág jellemz színe Fenyigeny Rövid leírás a növény fényigényér l A program biztosítson lehet séget az adatbevitelre! A program listázza az adatokat azonosító szerint rendezetten! A program kérje be a jellemz színt, és listázza az ahhoz tartozó virágok adatait! 6. Készíts menüvezérelt programot a következ adatok nyilvántartásához: PARKETTA Azonosito Nev A parketta neve Gyarto A parketta gyártója Egysegar A parketta egységára A program biztosítson lehet séget az adatbevitelre! A program listázza az adatokat egységár szerint rendezetten! A program kérjen be egy egységárat, és listázza az annál kisebb egységárú parketták adatait! 7. Készíts menüvezérelt programot a következ adatok nyilvántartásához: VAR Azonosito Helyseg A vár helye
61
Megye Melyik megyében van Tortenet A vár történetének rövid leírása A program biztosítson lehet séget az adatbevitelre! A program listázza az adatokat azonosító szerint rendezetten! A program kérje be a megye nevét, és listázza a megyében lév várak adatait! 8. Készíts menüvezérelt programot a következ adatok nyilvántartásához: OPRENDSZER Nev Az operációs rendszer neve Gyarto Az operációs rendszer gyártója Javido Átlagos javítási ideje Jellemzok Rövid leírás a hardverkövetelményekr l A program biztosítson lehet séget az adatbevitelre! A program listázza az adatokat név szerint rendezetten! A program kérje be a gyártó nevét, és listázza a megfelel operációs rendszerek adatait! 9. Készíts menüvezérelt programot a következ adatok nyilvántartásához: KEMIA Azonosito Nev Az elem neve Vegyjel Az elem vegyjele Rendszam Az elem rendszáma A program biztosítson lehet séget az adatbevitelre! A program listázza az adatokat rendszám szerint rendezetten! A program kérje be a vegyjelet, és keresse ki az elem tulajdonságait! 10. Készíts menüvezérelt programot a következ adatok nyilvántartásához: ALLOMANY Azonosito Kiterjesztes A fájl kiterjesztése Program A fájl szerkesztésére használható program neve Jellemzok Az adott fájltípus néhány jellemz je A program biztosítson lehet séget az adatbevitelre! A program listázza az adatokat kiterjesztés szerint rendezetten! A program kérje be a kiterjesztést, és keresse ki az állomány tulajdonságait!
Egyszer fórum készítése Feladat – Fórum Készítsünk olyan fórumot, amely a témát a szerz t és a hozzászólást tartja nyilván. El ször hozzuk létre a táblát: # -*- coding: ISO-8859-2 -*import MySQLdb, sys #A kapcsolat kiépítése adatBazis = MySQLdb.connect(db='proba',user='root', passwd='pingvin', host='localhost', port=3306) 62