diff options
Diffstat (limited to 'python/problems/while_and_if/conditions_sl.html')
-rw-r--r-- | python/problems/while_and_if/conditions_sl.html | 159 |
1 files changed, 159 insertions, 0 deletions
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 @@ +<!DOCTYPE html> +<html lang="sl"> +<head> + <meta charset="utf-8" /> + <title></title> + <link rel="stylesheet" type="text/css" href="/css/codeq.css" /> + <link rel="stylesheet" type="text/css" href="../../style.css" /> +</head> +<body> + +<h2>Pogoji</h2> + +<p>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.)</p> + +<p>Rezultat logičnega izraza je logična vrednost. Logične vrednosti niso števila + (torej niso <code>int</code> ali <code>float</code>) in niso nizi, torej so + nekaj četrtega. Podatkovni tip, ki hrani logične vrednosti, se imenuje + <code>bool</code> (iz Boolean, po slovensko Booleov). Medtem ko je + različnih števil (<code>int</code>, <code>float</code>) kar veliko, + ima tip <code>bool</code> lahko le eno od dveh + vrednosti, <code>True</code> ali <code>False</code>. Tudi <code>True</code> + in <code>False</code> rezervirani besedi. </p> + +<p>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?</p> + +<p>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.</p> + +<p>Za logične izraze so nam na voljo trije operatorji: <code>or</code>, + <code>and</code> in <code>not</code>. + +<pre> +>>> True and True +True +>>> True and False +False +>>> False or True +True +>>> not False +True +>>> False or not False +True +</pre> + +<p>(<code>and</code>, <code>or</code> in <code>not</code> so rezervirane besede.</p> + +<p>Operator <code>not</code> ima prednost pred <code>and</code>, + <code>and</code> pa pred <code>or</code>. Spet si lahko pomagamo z + oklepaji: <code>a or b and c</code> pomeni isto kot + <code>a or (b and c)</code> in bo resničen (<code>True</code>), če je resničen + <code>a</code> ali pa sta resnična <code>b</code> in <code>c</code>. Izraz + <code>(a or b) and c</code> pa bo resničen, če sta resnična <code>a</code> + ali <code>b</code> (ali oba), poleg tega pa nujno še <code>c</code>. Pri + tem seveda predpostavljamo, da <code>a</code>, <code>b</code> in + <code>c</code> vsebujejo logične vrednosti.</p> + +<p>Da bo reč lažje razumljiva, jo potrenirajmo na prav tem izrazu, vendar tako, + da namesto <code>a</code>, <code>b</code> in <code>c</code> oziroma namesto + "golih" <code>True</code> in <code>False</code> pišemo bolj "konkretne" + izraze.</p> + +<pre> +>>> 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 +</pre> + +<p>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 <code>>=</code> in <code><=</code>.</p> + +<p>Če želimo preveriti enakost dveh števil (ali, v splošnem, enakost dveh + stvari), uporabimo dvojni enačaj, <code>==</code>. Enojni enačaj je dobil + svojo zadolžitev prejšnjo uro, namenjen je namreč prirejanju. Ali sta dve + stvari različni, preverimo z <code>!=</code>.</p> + +<pre>>>> 1 + 1 == 2 +True +>>> 1 + 1 != 2 +False</pre> +</p> + +<p>Ne zamenjujte dvojnih in enojnih enačajev. Če pomotoma napišemo (a to se nam + bo rekdo zgodilo),</p> +<pre> a == 1 + 1</pre> +<p>s tem nismo priredili <code>a</code>-ju dvojke, temveč smo le preverili, ali je + enak 2. Pogostejša napaka pa bo</p> +<pre> if a = 1: + print("Vrednost a je ena")</pre> +<p>Ta program pa je sintaktično nepravilen, saj Python za <code>if</code> +pričakuje pogoj, mi pa smo napisali prireditveni stavek.</p> + + + +<p>Zdaj pa Pythonova posebnost, ki je v drugih jezikih ne bo: operatorje smemo nizati. Izraz + <code>10 < T < 20</code> je resničen, če je <code>T</code> med 10 in + 20. Izraz <code>10 < T1 < T2 < 20</code> je resničen, če sta + <code>T1</code> in <code>T2</code> med 10 in 20, pri čemer je + <code>T1</code> manjši od <code>T2</code>. Izraz + <code>T1 < 10 < T2</code> je resničen, če je <code>T1</code> manjši + od 10, <code>T2</code> pa večji od deset. + <code>10 < T1 == T2 < 20</code> je resničen, če sta + <code>T1</code> in <code>T2</code> enaka in sta nekje med 10 in 20.</p> + +<p>Č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</p> + +<pre>if bmi > 18.5 and bmi < 25: + print("Čestitamo, ravno pravšnji ste.")</pre> + +<p>Če kdo napiše</p> + +<pre>if (bmi > 18.5) and (bmi < 25): + print("Čestitamo, ravno pravšnji ste.")</pre> + +<p>ali celo</p> + +<pre>if ((bmi > 18.5) and (bmi < 25)): + print("Čestitamo, ravno pravšnji ste.")</pre> + +<p>Ga bomo čudno gledali (((kdor hoče oklepaje, naj gre raje programirat v +<a href="http://xkcd.com/297/">Lisp</a>))). Prav po Pythonovsko pa se reče:</p> + +<pre>if 18.5 < bmi < 25: + print("Čestitamo, ravno pravšnji ste.")</pre> + + +</body> +</html> |