From 29bc34810cb1d1fbd208f6b5f2dad73188ca7f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Mo=C5=BEina?= Date: Tue, 11 Oct 2016 14:39:50 +0200 Subject: - new exercises on recursion - added text (lectures) on conditions and loops --- python/problems/while_and_if/conditions_sl.html | 159 ++++++++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 python/problems/while_and_if/conditions_sl.html (limited to 'python/problems/while_and_if/conditions_sl.html') diff --git a/python/problems/while_and_if/conditions_sl.html b/python/problems/while_and_if/conditions_sl.html new file mode 100644 index 0000000..6d6f838 --- /dev/null +++ b/python/problems/while_and_if/conditions_sl.html @@ -0,0 +1,159 @@ + + + + + + + + + + +

Pogoji

+ +

Zdaj pa povejmo nekaj splošnejšega o pogojih. Kakšni vse so lahko? Najprej, + pogoj je izraz. Torej nekaj, kar se da izračunati (po naši garažni + definiciji izraza). Doslej so bili vsi naši izrazi nekako številski, + aritmetični: v njih so nastopala števila in le-ta smo seštevali, množili, + odštevali in kar se še takega dela s števili. Pogoji pa so logični izrazi. + (V resnici se "logičnost" in "številskost" lahko poljubno prepletata, a to + bomo mimogrede odkrili sproti.)

+ +

Rezultat logičnega izraza je logična vrednost. Logične vrednosti niso števila + (torej niso int ali float) in niso nizi, torej so + nekaj četrtega. Podatkovni tip, ki hrani logične vrednosti, se imenuje + bool (iz Boolean, po slovensko Booleov). Medtem ko je + različnih števil (int, float) kar veliko, + ima tip bool lahko le eno od dveh + vrednosti, True ali False. Tudi True + in False rezervirani besedi.

+ +

S števili že znamo računati. Z nizi tudi malo. Kako pa računamo z logičnimi + vrednostmi? Menda jih ne moremo kar tako seštevati in odštevati?

+ +

Za zdaj se delajmo, da ne. Kasneje bomo videli, da zna Python z logičnimi + izrazi početi še to in ono zanimivo reč, ki pa za začetnika niso tako + pomembne.

+ +

Za logične izraze so nam na voljo trije operatorji: or, + and in not. + +

+>>> True and True
+True
+>>> True and False
+False
+>>> False or True
+True
+>>> not False
+True
+>>> False or not False
+True
+
+ +

(and, or in not so rezervirane besede.

+ +

Operator not ima prednost pred and, + and pa pred or. Spet si lahko pomagamo z + oklepaji: a or b and c pomeni isto kot + a or (b and c) in bo resničen (True), če je resničen + a ali pa sta resnična b in c. Izraz + (a or b) and c pa bo resničen, če sta resnična a + ali b (ali oba), poleg tega pa nujno še c. Pri + tem seveda predpostavljamo, da a, b in + c vsebujejo logične vrednosti.

+ +

Da bo reč lažje razumljiva, jo potrenirajmo na prav tem izrazu, vendar tako, + da namesto a, b in c oziroma namesto + "golih" True in False pišemo bolj "konkretne" + izraze.

+ +
+>>> 352 > 0
+True
+>>> 5 < 3
+False
+>>> 352 > 0 or 5 < 3
+True
+>>> 352 > 0 or 5 > 3
+True
+>>> 352 > 0 and 5 > 3
+True
+>>> 352 > 0 and 5 < 3
+False
+>>> 352 > 0 and not 5 < 3
+True
+>>> 10 > 8 or 352 > 0 and 5 < 3
+True
+>>> 10 > 8 or (352 > 0 and 5 < 3)
+True
+>>> (10 > 8 or 352 > 0) and 5 < 3
+False
+>>> (10 > 8 or 352 > 0) and not 5 < 3
+True
+
+ +

Operatorja > in < pričakujeta na levi in desni neke reči, ki jih je + mogoče primerjati; zadovoljna nista le s števili, temveč tudi z, recimo, + nizi (primerjala jih bosta po abecedi), ne moreta pa primerjati števila z + nizom. Njun rezultat je logična vrednost. Za "večje ali enako" in "manjše + ali enako" uporabimo >= in <=.

+ +

Če želimo preveriti enakost dveh števil (ali, v splošnem, enakost dveh + stvari), uporabimo dvojni enačaj, ==. Enojni enačaj je dobil + svojo zadolžitev prejšnjo uro, namenjen je namreč prirejanju. Ali sta dve + stvari različni, preverimo z !=.

+ +
>>> 1 + 1 == 2
+True
+>>> 1 + 1 != 2
+False
+

+ +

Ne zamenjujte dvojnih in enojnih enačajev. Če pomotoma napišemo (a to se nam + bo rekdo zgodilo),

+
 a == 1 + 1
+

s tem nismo priredili a-ju dvojke, temveč smo le preverili, ali je + enak 2. Pogostejša napaka pa bo

+
 if a = 1:
+    print("Vrednost a je ena")
+

Ta program pa je sintaktično nepravilen, saj Python za if +pričakuje pogoj, mi pa smo napisali prireditveni stavek.

+ + + +

Zdaj pa Pythonova posebnost, ki je v drugih jezikih ne bo: operatorje smemo nizati. Izraz + 10 < T < 20 je resničen, če je T med 10 in + 20. Izraz 10 < T1 < T2 < 20 je resničen, če sta + T1 in T2 med 10 in 20, pri čemer je + T1 manjši od T2. Izraz + T1 < 10 < T2 je resničen, če je T1 manjši + od 10, T2 pa večji od deset. + 10 < T1 == T2 < 20 je resničen, če sta + T1 in T2 enaka in sta nekje med 10 in 20.

+ +

Če se torej končno vrnemo k suhcem in debeluhom: če bi se hoteli + skoncentrirati le na te, ki so ravno pravšnji, bi lahko napisali, + recimo

+ +
if bmi > 18.5 and bmi < 25:
+    print("Čestitamo, ravno pravšnji ste.")
+ +

Če kdo napiše

+ +
if (bmi > 18.5) and (bmi < 25):
+    print("Čestitamo, ravno pravšnji ste.")
+ +

ali celo

+ +
if ((bmi > 18.5) and (bmi < 25)):
+    print("Čestitamo, ravno pravšnji ste.")
+ +

Ga bomo čudno gledali (((kdor hoče oklepaje, naj gre raje programirat v +Lisp))). Prav po Pythonovsko pa se reče:

+ +
if 18.5 < bmi < 25:
+    print("Čestitamo, ravno pravšnji ste.")
+ + + + -- cgit v1.2.1