From 15871f8f3982fc7c5de03a68229235ea616c6419 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Mo=C5=BEina?= Sledi kratek povzetek zapiskov predavanj prof. Demšarja.
+ Celotne zapiske najdete na
+ spletni
+ učilnici. V konzoli lahko Python uporabljamo kot kalkulator. Temu, kar smo vpisovali, pravimo izraz. Izraz je nekaj, kar se da
+izračunati. In Python to tudi izračuna, razen, morda, zadnjega izraza.
+ V izrazih lahko uporabljamo presledke in to
+ moramo - kot tudi sicer - početi po občutku. V zadnjem izrazu tega nismo
+ počeli, zato je zapis zavajajoč. Python je dovolj pameten, da ve, da ima
+ operator (še ena beseda, ki si jo zapomnimo!) množenja prednost
+ pred operatorjem seštevanja. Kar smo napisali, se računa enako, kot če bi
+ rekli
+ Zaenkrat pišite, kako vam je ljubše, dokler se ne dogovorimo za zadnje. Kakšni operatorji so nam še na voljo? Očitna sta še Potenciranje ima prednost pred vsem, kar poznamo doslej. Kadar je treba,
+ pa lahko uporabimo oklepaje. Če ostane kak oklepaj odprt, Python ne izračuna izraza, saj ve, da ga še
+ nismo dokončali. Namesto Ni lepo, a prišlo nam bo še zelo prav, boste videli. Pri množenju je nujno uporabiti zvezdico. Se pravi, pisati moramo
+ Za deljenje imamo poleg operatorja 1.2 gre v 4.5 trikrat ... in še malo ostane. A celoštevilskega deljenja
+ ostanek ne zanima. Naslednja pomembna reč so "podatkovni tipi".
+ Točneje, spoznali smo dva podatkovna tipa cela števila in
+ števila s plavajočo vejico. V angleščini se jima reče
+ integer in floating point number v Pythonu pa
+ Vsaka reč v Pythonu je reč nekega tipa, in če je ta reč število, je bodisi
+ tipa Izračunali bomo, koliko je 2 + 3 in rekli računalniku, naj si to zapomni. Temu, kar smo napisali tu, pravimo prireditveni stavek, saj smo z
+ njim x-u priredili vrednost izraza 2+3. Da hočemo nekaj prirejati povemo z enačajem (očitno). Na njegovi desni je
+ nek izraz - torej nekaj, kar se da izračunati. Včasih bo to Na levi strani enačaja je neko ime. Temu pravimo spremenljivka (ang. variable)
+ Python bo temu imenu (recimo
+ Python tokrat ni izpisal ničesar v odgovor. Rezultat si je le zapomnil,
+ shranil ga je pod imenom Kadar rečem Spremenljivka pri programiranju (v večini jezikov) ne pomeni istega kot v
+ matematiki. Spremenljivke v matematiki se, roko na srce, pravzaprav ne
+ spreminjajo. V matematiki x ne more biti v eni vrstici 5, v
+ naslednji pa 8. Pri programiranju pa s tem ni težav. Še huje. Če matematiki ne bi znali programirati (pa navadno znajo in to
+ dobro), bi jih utegnilo povsem pretresti tole:
+ Pri programiranju boste delali precej napak. To je neizogibno. Poglejmo
+ si nekaj primerov. Postavimo, najprej, Kadar računalnik česa ne more storiti, izpiše sporočilo o napaki. Ko bomo
+ programirali zares, bomo videli tudi daljša, ki jih bomo težje razumeli,
+ tole pa je preprosto: Kaj pa tole? Človek, vajen matematike, bi si mislil, da je Pridelajmo še eno napako. Beseda Sporočilo "invalid syntax" pomeni, da smo napisali nekaj tako čudnega, da
+ Python ne more uganiti, kaj smo mislili in nam lahko le pokaže tisto mesto,
+ na katerem je dokončno obupal nad nami. Morda je koga zaskrbelo, da nam bodo takšne, rezervirane besede v stalno
+ napoto. Bi se dalo videti spisek? Ne bo hudega. Trenutno jih je le 33 in
+ zelo hitro bomo mimogrede spoznali in uporabljali skoraj vse. Že od
+ naslednjih predavanj naprej vam ne bo prišlo na misel, da bi uporabili
+ Tako kot spremenljivke, ki v programiranju ne pomenijo čisto istega kot v
+ matematiki, tudi beseda
+ funkcija (function) ne pomeni povsem istega.
+ Videti pa je zelo podobno. Imamo,
+ recimo, funkcijo Ali pa Za razliko od matematikov, ki na funkcijo gledajo kot da ima določeno
+ vrednost pri določenih parametrih, računalnik izračuna vrednost
+ funkcije, za kar moramo poklicati funkcijo. Se pravi, v
+ zadnji vrstici smo poklicali funkcijo Tudi klic funkcije, In argumenti funkcij so lahko prav tako izrazi. Niz (string) je zaporedje znakov. Znaki so črke, številke,
+ ločila in take stvari. Nize moramo
+ vedno zapreti v narekovaje, bodisi enojne (') bodisi dvojne ("). Uporabiti
+ smemo take, ki so bolj praktični in tudi Python bo izpisoval tako, kot se
+ mu bo zdelo bolj praktično. No, vidite, tudi ko smo niz zaprli v dvojne narekovaje, je Python izpisal
+ enojne. V resnici mu je vseeno. (Kdor slučajno programira v Phpju: ne, v
+ Pythonu je res vseeno.) Tudi nize lahko priredimo spremenljivkam. Celo seštevamo jih lahko. Ali pa oboje
+ Kako zapleten račun! Predvsem ne spreglejte, da smo dali besedo "pa" pod
+ narekovaje, saj so V zadnji vrstici sta Kaj pa, če bi slučajno pozabili narekovaje? Jasno? Brez narekovajev je kar je pravilno, rekli Seveda pa lahko (z malim prekrškom enega pravila - katerega že?): a, istočasnoUvod v Python
+
+Moj računalnik je lahko tudi kalkulator
+
+
+>>> 1 + 1
+2
+>>> 2 * 3
+6
+>>> 1+2 * 3+1
+8
+
+ 1+2*3+1
+ali
+ 1 + 2*3 + 1
+ali
+ 1 + 2 * 3 + 1
+
+/
za
+ deljenje in -
za odštevanje. Dvojna zvezdica, **
,
+ pomeni potenciranje (mednju ne smemo napisati presledka, **
je
+ kot, recimo, ena beseda). Operator %
izračuna ostanek
+ po deljenju.
+>>> 5 ** 2
+25
+>>> 3 ** 4
+81
+>>> 13 % 5
+3
+
+>>> (4 + 5) * 4
+36
+
+>>>
pokaže tri pike in
+ dovoli, da nadaljujemo izraz.>>> (4 + 2 * (3
+... + 8)-
+... 2)
+24
+
+7 * (2 + 3)
in ne 7(2 + 3)
./
tudi //
, ki
+ deli celoštevilsko.>>> 4.5 // 1.2
+3.0
+>>> 7 // 2
+3
+
+int
in float
. Odkod ta čudna imena boste izvedeli
+ pri kakem drugem predmetu.int
bodisi float
. Moj računalnik je lahko tudi kalkulator - s spominom
+
+ x = 2 + 3
+
+2 +
+ 3
, včasih bo kaj veliko
+ bolj zapletenega, včasih bo na desni strani samo številka, kot, recimo, v
+ prirejanju x = 42
. Python bo, tako kot v našem dosedanjem
+ igranju z njim, izračunal tisto na desni in dobil 5
ali
+ 42
ali karkoli že.x
) priredil tisto, kar je izračunal.x
. Kaj lahko počnemo s tem
+ x
? Lahko ga uporabljamo v drugih izrazih.
+>>> x + 7
+12
+>>> x ** 2
+25
+>>> 13 % x
+3
+>>> x
+5
+
+x
, Python poišče, tisto, kar je priredil
+ x
-u. Če smo x
-u priredili 5 in rečemo
+x + 7
, je to isto, kot če bi rekli 5 + 7
.>>> y = x + 2
+>>> y
+7
+
+>>> x = 5
+>>> x
+5
+>>> x = 8
+>>> x
+8
+
+>>> x = 5
+>>> x = x + 2
+>>> x
+7
+
+Poglavje polno napak
+
+a
na 7
in izračunajmo
+ a + b
.
+
+>>> a = 7
+>>> a + b
+Traceback (most recent call last):
+ File "
+
+ name 'b' is not defined
. Pozabili smo
+ definirati b
, pozabili smo mu dati vrednost.>>> 7 = a
+ File "
+
+a = 7
in
+ 7 = a
eno in isto. V matematiki da, pri programiranju (v
+ normalnih jezikih) pa ne, saj enačaj pomeni prirejanje; v prvem primeru
+ priredimo a
-ju 7, v drugem primeru pa hočemo sedmici prirediti
+ a
, kar seveda ne gre. To ima natanko toliko smisla, kot če bi
+ napisali 1 = 2
. (Še več, Python nas bo po prstih celo, če bomo
+ napisali 1 = 1
. Ena je ena, to bo ostala in se ne bo
+ spremenila, niti v ena ne.) Sporočila o napaki tokrat ne razumemo povsem,
+ saj ne vemo, kaj je "literal", osnovno sporočilo, "can't assign", pa je
+ jasno.>>> True = 12
+ File "
+
+True
ima poseben pomen in je ni mogoče uporabljati kot
+ spremenljivko. Takšnim besedam pravimo ključne besede (keywords).
+ Tokrat je bil
+ Python še prijazen, pri večini drugih ključnih besed pa ne bo povedal kaj
+ dosti več kot "nekaj je narobe". Poskusimo z dvema, if
in
+ in
:
+
+>>> if = 7
+ File "
+
+if
kot ime spremenljivke in še kak teden kasneje vam bo stavek
+ if = 1
videti grotesken. Moj kalkulator ima tudi funkcije
+
+abs
, ki izračuna absolutno vrednost števila.
+>>> abs(-2.8)
+2.8
+
+pow
, ki naredi isto kot operator **
.>>> pow(2, 3)
+8
+
+pow
in ji
+ podali dva argumenta, 2 in 3. Funkcija je izračunala
+ vrednost in jo vrnila.pow(2, 3)
, je izraz. Kot katerikoli drugi
+ izraz lahko tudi pow
in abs
nastopata kot del
+ izraza.>>> (pow(2, 3) + 2) / 5
+2.0
+>>> pow(2, 3) + abs(-2)
+10
+
+>>> x = 1
+>>> yy = pow(abs(-2), x * 3)
+>>> yy
+8
+
+Nizi
+
+>>> "Tole je primer niza."
+'Tole je primer niza.'
+>>> "Tole je pa še en primer niza."
+'Tole je pa še en primer niza.'
+
+>>> napoved = "Jutri bosta matematika pa dež"
+>>> napoved
+'Jutri bosta matematika pa dež'
+
+>>> "Jutri bosta " + "matematika" + " pa " + "dež"
+'Jutri bosta matematika pa dež'
+
+>>> napoved_zac = "Jutri bosta "
+>>> mat = "matematika"
+>>> dez = "dez"
+>>> napoved_zac + mat + " pa " + dez
+'Jutri bosta matematika pa dez'
+
+napoved_zac
, mat
,
+ dez
spremenljivke (ki so v resnici nizi), " pa "
+ pa je niz kar tako. To je nekako tako, kot če bi, ko smo se igrali s
+ številkami, pisali>>> x = 1
+>>> y = 3
+>>> x + 2 + y
+6
+
+x
in y
spremenljivki (ki
+ sta v resnici številki), 2
pa je številka kar tako.>>> napoved_zac + mat + pa + dez
+Traceback (most recent call last):
+ File "
+
+pa
ime spremenljivke - in to takšne,
+ ki še ni definirana. To je tako, kot če bi namestoime = "Benjamin"
+
+>>> ime = Benjamin
+Traceback (most recent call last):
+ File "
+
+>>> Benjamin = "otrok solza"
+>>> ime = Benjamin
+>>> ime
+'otrok solza'
+
+>>> ime = "Benjamin"
+>>> ime
+'Benjamin'
+
+Jasno? Prvič imamo spremenljivko Benjamin
, drugič pa niz, v
+katerem je besedilo Benjamin. Ko ni narekovajev, imamo spremenljivko, ko so,
+pa niz.
>>> napoved = Jutri bosta matametika pa dež +Traceback ( File "+ +", line 1 + napoved = Jutri bosta matemetika pa dež + ^ +SyntaxError: invalid syntax
Tule računalnik trpi še bolj. Ne le, da so Jutri
,
+ bosta
, matematika
, pa
in
+ dež
nedefinirane spremenljivke (ker so pač brez narekovajev),
+ računalnik tudi nima pojma, kaj hočemo pravzapravz početi z njimi, čemu mu
+ naštevamo imena nekih spremenljivk. Jih hočemo sešteti ali zmnožiti ali
+ kaj? Kot vedno, kadar računalniku napišemo kaj zares zmedenega, nam zastoka
+ le "syntax error" in pokaže mesto, kjer se je dokončno izgubil.
Gornje je tako, kot da bi rekli
+ +>>> x = 1 +>>> y = 2 +>>> z = 3 +>>> x y z + File "+ +", line 1 + x y z + ^ +SyntaxError: invalid syntax
Ubogemu računalniku pač ni jasno, kaj bi z x
, y
in
+ z
ter zakaj mu jih naštevamo.
Zakaj pa smo prejle rekli, da uporabimo tiste narekovaje, ki so bolj + praktični? Čemu bi bili kakšni narekovaji bolj praktični od + drugih?
+ +>>> "Cesar vpraša nekoliko nevoljen: "Kaj neki?"" +Traceback ( File "+ +", line 1 + "Cesar vpraša nekoliko nevoljen: "Kaj neki?"" + ^ +SyntaxError: invalid syntax
Ni potrebno biti posebno pameten, da vidimo, kaj ga je (namreč Pythona, ne + Cesarja) onesrečilo tokrat. Ko vidi prvi narekovaj, ve, da gre za niz. Ko + pride do naslednjega narekovaja, se niz, tako méni, niz konča. In potem se + seveda zmede, ker nizu sledi nekaj, kar ni podobno ničemur. Zdaj pa + poskusimo z enojnimi narekovaji.
+ +>>> 'Cesar vpraša nekoliko nevoljen: "Kaj neki?"' +'Cesar vpraša nekoliko nevoljen: "Kaj neki?"'+ +
Ker se niz začne z enojnim narekovajem, se bo s takim tudi končal in vsi + dvojni narekovaji znotraj niza so samo znaki kot katerikoli drugi - tako + kot recimo dvopičje in vprašaj. O tej temi bi lahko napisali še marsikaj, + vendar se za zdaj ustavimo.
+ + +Da se reč usede, meditirajmo ob naslednjih vrsticah:
+ +>>> up = 1 + 1 +>>> down = "1 + 1" +>>> strange = "1" + "1"+ +
Kakšne so po tem vrednosti spremenljivk up
, down
+ in strange
? Sploh pa, je vse troje legalno ali pa bo Python
+ spet kaj stokal?
V prvo nimamo dvomov, vrednost up
mora biti enaka 2 (in tudi
+ je). Drugo? "1 + 1"
je niz; spremenljivki down
+ smo priredili niz "1 +1"
, torej vsebuje ta niz. In ne niza 2?
+ Ne, nihče mu ni naročil, naj poskuša izračunati, koliko je 1 + 1, tako kot
+ pravzprav tudi v ime = "Benjamin"
ne poskuša izračunati,
+ "koliko" je Benjamin. "1 + 1"
je niz, kot vsak drugi, čeprav je
+ slučajno podoben računu.
Najbolj zanimivo je tretje. Preden razrešimo vprašanje, se vprašajmo nekaj + drugega. Recimo + +
>>> ana = "Ana" +>>> benjamin = "Benjamin" +>>> r = ana + benjamin+ +
Kaj dobimo, če seštejemo Ano in Benjamina. (Tončka? Brez duhovičenja, to so
+ resne reči.) Spremenljivka r
bo imela vrednost
+ "AnaBenjamin"
. Glede tega smo si menda enotni, ne?
+ (Ako kdo misli, da bomo dobili "Benjamin Ana"
, saj smo tudi
+ poprej imeli presledke ob oni študijsko-vremenski napovedi, naj pozorno
+ pregleda, kaj smo pisali ondi: vse presledke smo napisali sami.)
No, potem pa vemom: ko seštejemo niza "1" in "1" niz "11". "1" in + "1" torej ni "2", temveč "11".
+ +Nikar ne zamudimo priložnosti za še eno napako!
+>>> 1 + "1" +Traceback (most recent call last): + File "+ +", line 1, in +TypeError: unsupported operand type(s) for +: 'int' and 'str'
Seštevanje je operacija, zato tistemu, kar je levo in desno od +
+ pravimo operanda. Sporočilo pravi, da operator +
ne podpira
+ operandov tipov int
in str
(str
je
+ podatkovni tip, ki predstavlja nize). Dve števili ali dva niza bi znal
+ sešteti, te kombinacije pa ne. Mimogrede, obratni vrstni red da nekoliko
+ drugačno sporočilo:
>>> "1" + 1 +Traceback (most recent call last): + File "+ +Stikanje (concatenation) je le drugo ime za seštevanje nizov; sporočilo +pravi, da ne moremo stakniti niza in števila. Toliko, da boste vedeli, če +naletite na to. + +", line 1, in +TypeError: cannot concatenate 'str' and 'int' objects
Ker nam bo prišlo vsak čas prav, povejmo, kako iz niza dobimo število.
+ Recimo, torej, da imamo a = "1"
in b = "2"
. Radi
+ bi ju sešteli - vendar zares, tako da bomo dobili 3, ne "12". Za to ju
+ moramo najprej (ali pa sproti) spremeniti v števili. Iz niza dobimo število
+ tako, da pokličemo "funkcijo" int
ali float
; obe
+ funkciji pričakujeta kot argument niz, ki vsebuje neko število in kot
+ rezultat vrneta celo (int
) ali realno (float
)
+ število.
>>> int("42") +42 +>>> float("42") +42.0+ +
Kar želimo, storimo na tri načine, vsak je poučen po svoje. Prvi: +
>>> a = "1" +>>> b = "2" +>>> +>>> aa = int(a) +>>> bb = int(b) +>>> aa + bb +3+ +
Naredili smo dve novi spremenljivki, aa
in bb
, ki
+ vsebujeta vrednosti a
in b
pretvorjene v števila.
+ Nato ju seštejemo.
Drugi: +
>>> a = "1" +>>> b = "2" +>>> +>>> a = int(a) +>>> b = int(b) +>>> a + b +3+ +
Tole je podobno kot prej, le da smo povozili stare vrednosti a
in
+ b
z novimi, številskimi, namesto da bi števila zapisovali v
+ druge spremenljivke.
Tretji: +
>>> a = "1" +>>> b = "2" +>>> +>>> int(a) + int(b) +3+ +
Ker je int
funkcija, lahko nastopa v izrazu; potrebe, da bi
+ prepisovali številke v kake nove ali stare spremenljivke, niti ni.
Spoznali bomo funkcijo za izpisovanje: če jo pokličemo,
+ izpiše tisto, kar smo ji dali kot argument. Imenuje se print
.
+ Za razliko od, recimo, abs
, ki zahteva en argument, namreč
+ poljubno število, in vrne njegovo absolutno vrednost, ali pow
,
+ ki hoče natanko dva argumenta, lahko damo print
u poljubno
+ število argumentov - številke, nize ali še kaj tretjega -, pa jih bo lepo
+ izpisala.
+
+
>>> print(1 + 1, 27, "benjamin") +2 27 benjamin +>>> print(napoved_zac, mat, "pa", dez, "in", 18, "stopinj") +Jutri bosta matematika pa dez in 18 stopinj+ +
Druga funkcija prosi uporabnika, da vpiše kako reč. + Kot argument pričakuje niz, vprašanje, ki ga želimo zastaviti uporabniku. + Kot rezultat vrne niz, ki ga je vpisal uporabnik.
+ +>>> geslo = input("Geslo? ") +Geslo? FR1.ru135 +>>> geslo +'FR1.rul35'+ +
Sestavimo tole: računalnik naj uporabnika prosi za temperaturo v Celzijevih + stopinjah in računalnik mu bo izpisal, koliko je to v Kelvinih in koliko v + Fahrenheitih. Iz Celzijev dobimo Kelvine tako, da jim prištejemo 273.15, + Fahrenheite pa tako, da jih pomnožimo z 9/5 in prištejemo 32 (kogar zanima + še kaj, naj pogleda na + + Wikipedijo).
+ ++>>> temp_C = input("Temperatura [C]? ") +Temperatura [C]? 18 +>>> temp_K = temp_C + 273.15 +Traceback (most recent call last): + File "+ +", line 1, in +TypeError: cannot concatenate 'str' and 'float' objects
Funkcija input
vrne niz, ki ga je vpisal
+ uporabnik. Četudi utegne ta izgledati kot številka, je še vedno niz in k
+ nizom ni mogoče prištevati števil. Kot smo videli, lahko storimo troje:
+ naredimo novo spremenljivko, na primer,
+ temp_Cf = float(temp_C)
, povozimo staro s
+ temp_Cf = float(temp_C)
ali pa pretvorbo opravimo kar sproti,
+ tako da računamo temp_K = float(temp_C) + 273.15
. Izmed
+ naštetih možnosti se odločimo za četrto in niz pretvorimo, čim ga uporabnik
+ vpiše. Ponovimo torej vso vajo.
+>>> temp_C = float(input("Temperatura [C]? ")) +Temperatura [C]? 18 +>>> temp_K = temp_C + 273.15 +>>> temp_F = temp_C * 5/9 + 32 +>>> print(temp_C, "C je enako", temp_K, "K ali", temp_F, "F") +18.0 C je enako 291.15 K ali 42.0 F+ +
Zdaj to napišite v okolju, kjer program lahko tudi poženete; npr. Pycharm ali +pa v CodeQ :)
+ + + diff --git a/python/problems/introduction/sl.py b/python/problems/introduction/sl.py index 403c941..ae5cc3e 100644 --- a/python/problems/introduction/sl.py +++ b/python/problems/introduction/sl.py @@ -1,3 +1,5 @@ name = 'Uvod' -description = 'Izrazi, spremenljivke, funkcije, prvi program.' +description = ''' +Prvi koraki v Pythonu: +izrazi, spremenljivke, funkcije, prvi program.''' diff --git a/python/sl.py b/python/sl.py index 6bd3a0d..37d8b91 100644 --- a/python/sl.py +++ b/python/sl.py @@ -1,9 +1,5 @@ name = 'Python' -description = '''\ -Naloge za -uvodni tečaj -pythona. -''' +description = ''' ''' general_msg = { 'error_head' : '''\ -- cgit v1.2.1