summaryrefslogtreecommitdiff
path: root/python/problems/while_and_if/conditions_sl.html
blob: 6d6f8383d7c8cbcba887a0e4545ae1c0fb683f6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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 &gt; in &lt; 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>&gt;=</code> in <code>&lt;=</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 &lt; T &lt; 20</code> je resničen, če je <code>T</code> med 10 in
    20. Izraz <code>10 &lt; T1 &lt; T2 &lt; 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 &lt; 10 &lt; T2</code> je resničen, če je <code>T1</code> manjši
    od 10, <code>T2</code> pa večji od deset.
    <code>10 &lt; T1 == T2 &lt; 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>