Sur Ba Programming Challenge
Paraméterek
Nagyon szuper egy program, ami lefut meg minden, megcsinálja a dolgát, más meg ne szóljon bele. Ezek a programok (hacsak valami véletlenszerűség nincs beléjük építve) mindig ugyanazt fogják csinálni, akárhányszor indítjuk el. Uncsi. Érdekes módon, a programok többsége nem így működik!
A weboldalaknál például szoktak lenni bemeneti értékek amiket a felhasználó valahogy kitölt, pl egy login űrlap vagy egy QR kód generáló. Az egyik módszer, amivel egy weboldalnak paraméter adható át az, ha a cím végén van egy kérdőjel, és utána név=érték
lista &
jelekkel elválasztva, például: https://duckduckgo.com/?q=miafasz&t=canonical&ia=videos
#!/usr/bin/python
import cgi, cgitb
form = cgi.FieldStorage()
a = form.getvalue('a')
b = form.getvalue('b')
print "Content-type: text/html\n\n"
print "<h1>This is addition</h1>"
print "<p>a = ", a, "</p>"
print "<p>b = ", b, "</p>"
print "<p>a + b = ", (a + b), "</p>"
print "<p>a + b = ", (int(a) + int(b)), " (numeric)</p>"
if (int(a) % 2 == 1):
print "<p>a is odd.</p>"
if (not (int(b) % 2 == 1)):
print "<p>b is even.</p>"
http://apocalypse.rulez.org/~upi/surba/parameters.py?a=10&b=20 [source]
Most, átmeneti jelleggel, ne ragadjunk le annál, hogy pontosan mi történik az "import" kezdetű, és azt követő három sorban. Elégedjünk meg azzal, hogy így ki tudjuk termelni az a
és b
változókba az azonos nevű paramétereket, amiket a T. Felhasználó a weboldalnak átadott.
További újdonság, hogy nem text/plain
a tartalom típusa, hanem text/html
; ez azzal az örömteli eseménnyel jár, hogy a <h1>
és </h1>
("heading 1") közötti részből egy címsor lesz, míg a <p>
-ből pedig bekezdés ("paragraph").
Vegyük észre:
- A Python különbséget tesz a szöveges változó és a numerikus változó között. Ha két szöveges változót adunk össze a
+
operátorral, akkor összefűzi őket, míg ha két numerikusat, akkor összeadja. (A Python is lehet hülye.) - Az
int(...)
függvény elvégzi nekünk azt a szívességet, hogy szöveges"10"
-ből numerikus10
értéket gyárt. (Ha nem végezhető a el a konverzió, mert mondjuka="alma"
, akkor ott szépen megdöglik a programunk.) %
operátor maradékot képez két egész szám között, pla % 2
aza
változó paritását adja vissza (0 vagy 1).- Az
if (...):
hasonló elven működik, mint awhile
egy korábbi fejezetben: a törzsében található rész akkor fog lefutni (egyszer), ha a zárójelben található feltétel "igaz".
Feladatok
- Próbáljuk ki a programot különböző bemenetekkel (pozitív, negatív számok, nem egész szám, szöveg).
- Az
if (not (int(b) % 2 == 1)):
rész egyszerűsíthető. Hogyan? - Írunk egy programot, ami egy harmadik paramétert is vár (mondjuk
c
). Ha ac
értéke"A"
(add), akkor összeadja a két számot, ha"S"
akkor kivonja, és ha"M"
akkor összeszorozza. - Írjunk egy programot, ami eldönti az
a
ésb
számról, hogy relatív prímek-e. - Írjunk egy programot, ami eldönti egy
a
számról, hogy prím-e. - Bónusz feladat: Írjunk egy programot, ami eldönti egy
a
számról, hogy négyzetszám-e
Hozzászólások
0