summaryrefslogtreecommitdiff
path: root/python/problems/introduction/intro_sl.html
blob: 345b94cee2970b208d74be26dc2949329c9b87b9 (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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
<!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>

<h1>Uvod v Python</h1>

<h2>Moj računalnik je lahko tudi kalkulator</h2>

<p> Sledi kratek povzetek zapiskov predavanj prof. Demšarja.
    Celotne zapiske najdete na
    <a href="https://ucilnica.fri.uni-lj.si/course/view.php?id=166">spletni
        učilnici</a>.</p>

<p>V konzoli lahko Python uporabljamo kot kalkulator.</p>

<pre>
>>> 1 + 1
2
>>> 2 * 3
6
>>> 1+2 * 3+1
8</pre>

<p>Temu, kar smo vpisovali, pravimo <i>izraz</i>. 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
    <em>operator</em> (š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
    <code> 1+2*3+1</code>
ali
<code> 1 + 2*3 + 1</code>
ali
<code> 1 + 2 * 3 + 1</code>

<p>Zaenkrat pišite, kako vam je ljubše, dokler se ne dogovorimo za zadnje.</p>

<p>Kakšni operatorji so nam še na voljo? Očitna sta še <code>/</code> za
    deljenje in <code>-</code> za odštevanje. Dvojna zvezdica, <code>**</code>,
    pomeni potenciranje (mednju ne smemo napisati presledka, <code>**</code> je
    kot, recimo, ena <em>beseda</em>). Operator <code>%</code> izračuna ostanek
    po deljenju.</p>

<pre>
>>> 5 ** 2
25
>>> 3 ** 4
81
>>> 13 % 5
3</pre>

<p>Potenciranje ima prednost pred vsem, kar poznamo doslej. Kadar je treba,
    pa lahko uporabimo oklepaje.</p>

<pre>>>> (4 + 5) * 4
36</pre>

<p>Če ostane kak oklepaj odprt, Python ne izračuna izraza, saj ve, da ga še
    nismo dokončali. Namesto <code>&gt;&gt;&gt;</code> pokaže tri pike in
    dovoli, da nadaljujemo izraz.</p>

<pre>>>> (4 + 2 * (3
... + 8)-
... 2)
24</pre>

<p>Ni lepo, a prišlo nam bo še zelo prav, boste videli.</p>

<p>Pri množenju je nujno uporabiti zvezdico. Se pravi, pisati moramo
    <code>7 * (2 + 3)</code> in ne <code>7(2 + 3)</code>.</p>

<p>Za deljenje imamo poleg operatorja <code>/</code> tudi <code>//</code>, ki
    deli celoštevilsko.</p>

<pre>>>> 4.5 // 1.2
3.0
>>> 7 // 2
3</pre>

<p>1.2 gre v 4.5 trikrat ... in še malo ostane. A celoštevilskega deljenja
    ostanek ne zanima.</p>

<p>Naslednja pomembna reč so "podatkovni tipi".
    Točneje, spoznali smo dva podatkovna tipa <em>cela števila</em> in
    <em>števila s plavajočo vejico</em>. V angleščini se jima reče
    <em>integer</em> in <em>floating point number</em> v Pythonu pa
    <code>int</code> in <code>float</code>. Odkod ta čudna imena boste izvedeli
    pri kakem drugem predmetu.</p>

<p>Vsaka reč v Pythonu je reč nekega tipa, in če je ta reč število, je bodisi
    tipa <code>int</code> bodisi <code>float</code>. </p>

<h2>Moj računalnik je lahko tudi kalkulator - s spominom</h2>

<p>Izračunali bomo, koliko je 2 + 3 in rekli računalniku, naj si to zapomni.</p>

<code> x = 2 + 3</code>

<p>Temu, kar smo napisali tu, pravimo <em>prireditveni stavek</em>, saj smo z
    njim x-u priredili vrednost izraza 2+3.</p>

<p>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 <code>2 +
    3</code>, včasih bo kaj veliko
    bolj zapletenega, včasih bo na desni strani samo številka, kot, recimo, v
    prirejanju <code>x = 42</code>. Python bo, tako kot v našem dosedanjem
    igranju z njim, izračunal tisto na desni in dobil <code>5</code> ali
    <code>42</code> ali karkoli že.</p>

<p>Na levi strani enačaja je neko ime. Temu pravimo spremenljivka (ang. variable)
    Python bo temu imenu (recimo
    <code>x</code>) priredil tisto, kar je izračunal.</p>

<p>Python tokrat ni izpisal ničesar v odgovor. Rezultat si je le zapomnil,
    shranil ga je pod imenom <code>x</code>. Kaj lahko počnemo s tem
    <code>x</code>? Lahko ga uporabljamo v drugih izrazih.</p>

<pre>
>>> x + 7
12
>>> x ** 2
25
>>> 13 % x
3
>>> x
5</pre>

<p>Kadar rečem <code>x</code>, Python poišče, tisto, kar je priredil
    <code>x</code>-u. Če smo <code>x</code>-u priredili 5 in rečemo
<code>x + 7</code>, je to isto, kot če bi rekli <code>5 + 7</code>.</p>

<pre>>>> y = x + 2
>>> y
7</pre>

<p>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 <em>x</em> ne more biti v eni vrstici 5, v
    naslednji pa 8. Pri programiranju pa s tem ni težav.</p>

<pre>>>> x = 5
>>> x
5
>>> x = 8
>>> x
8</pre>

<p>Še huje. Če matematiki ne bi znali programirati (pa navadno znajo in to
    dobro), bi jih utegnilo povsem pretresti tole:
<pre>>>> x = 5
>>> x = x + 2
>>> x
7</pre>

<h2>Poglavje polno napak</h2>

<p>Pri programiranju boste delali precej napak. To je neizogibno. Poglejmo
    si nekaj primerov.</p>

<p>Postavimo, najprej, <code>a</code> na <code>7</code> in izračunajmo
    <code>a + b</code>.

<pre>>>> a = 7
>>> a + b
Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'b' is not defined</pre>

 <p>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: <code>name 'b' is not defined</code>. Pozabili smo
    <em>definirati</em> <code>b</code>, pozabili smo mu dati vrednost.</p>

<p>Kaj pa tole?</p>

<pre>>>> 7 = a
  File "<console>", line 1
SyntaxError: can't assign to literal</pre>

<p>Človek, vajen matematike, bi si mislil, da je <code>a = 7</code> in
    <code>7 = a</code> eno in isto. V matematiki da, pri programiranju (v
    normalnih jezikih) pa ne, saj enačaj pomeni prirejanje; v prvem primeru
    priredimo <code>a</code>-ju 7, v drugem primeru pa hočemo sedmici prirediti
    <code>a</code>, kar seveda ne gre. To ima natanko toliko smisla, kot če bi
    napisali <code>1 = 2</code>. (Še več, Python nas bo po prstih celo, če bomo
    napisali <code>1 = 1</code>. 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.</p>

<p>Pridelajmo še eno napako.</p>

<pre>>>> True = 12
  File "<console>", line 1
SyntaxError: assignment to keyword</pre>

<p>Beseda <code>True</code> ima poseben pomen in je ni mogoče uporabljati kot
    spremenljivko. Takšnim besedam pravimo ključne besede (<em>keywords</em>).
    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, <code>if</code> in
    <code>in</code>:

<pre>>>> if = 7
  File "<console>", line 1
    if = 7
       ^
SyntaxError: invalid syntax
>>> in = 7
  File "<console>", line 1
    in = 7
     ^
SyntaxError: invalid syntax</pre>

<p>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.</p>

<p>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
    <code>if</code> kot ime spremenljivke in še kak teden kasneje vam bo stavek
    <code>if = 1</code> videti grotesken. </p>


<h2>Moj kalkulator ima tudi funkcije</h2>

<p>Tako kot spremenljivke, ki v programiranju ne pomenijo čisto istega kot v
    matematiki, tudi beseda
    <em>funkcija</em> (<em>function</em>) ne pomeni povsem istega.
    Videti pa je zelo podobno. Imamo,
    recimo, funkcijo <code>abs</code>, ki izračuna absolutno vrednost števila.
</p>

<pre>>>> abs(-2.8)
2.8</pre>

<p>Ali pa <code>pow</code>, ki naredi isto kot operator <code>**</code>.</p>

<pre>>>> pow(2, 3)
8</pre>

<p>Za razliko od matematikov, ki na funkcijo gledajo kot da <em>ima določeno
    vrednost pri določenih parametrih</em>, računalnik <em>izračuna vrednost
    funkcije</em>, za kar moramo <em>poklicati funkcijo</em>. Se pravi, v
    zadnji vrstici smo <em>poklicali</em> funkcijo <code>pow</code> in ji
    <em>podali</em> dva <em>argumenta</em>, 2 in 3. Funkcija je izračunala
    vrednost in jo <em>vrnila</em>.</p>

<p>Tudi klic funkcije, <code>pow(2, 3)</code>, je izraz. Kot katerikoli drugi
    izraz lahko tudi <code>pow</code> in <code>abs</code> nastopata kot del
    izraza.</p>

<pre>>>> (pow(2, 3) + 2) / 5
2.0
>>> pow(2, 3) + abs(-2)
10</pre>

<p>In argumenti funkcij so lahko prav tako izrazi.</p>

<pre>>>> x = 1
>>> yy = pow(abs(-2), x * 3)
>>> yy
8</pre>

<h2>Nizi</h2>

<p>Niz (<em>string</em>) 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.</p>

<pre>>>> "Tole je primer niza."
'Tole je primer niza.'
>>> "Tole je pa še en primer niza."
'Tole je pa še en primer niza.'</pre>

<p>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 <em>res</em> vseeno.)</p>

<p>Tudi nize lahko priredimo spremenljivkam.</p>

<pre>>>> napoved = "Jutri bosta matematika pa dež"
>>> napoved
'Jutri bosta matematika pa dež'</pre>

<p>Celo seštevamo jih lahko.</p>

<pre>>>> "Jutri bosta " + "matematika" + " pa " + "dež"
'Jutri bosta matematika pa dež'</pre>

<p>Ali pa oboje
<pre>>>> napoved_zac = "Jutri bosta "
>>> mat = "matematika"
>>> dez = "dez"
>>> napoved_zac + mat + " pa " + dez
'Jutri bosta matematika pa dez'</pre>

<p>Kako zapleten račun! Predvsem ne spreglejte, da smo dali besedo "pa" pod
    narekovaje, saj so <code>napoved_zac</code>, <code>mat</code>,
    <code>dez</code> spremenljivke (ki so v resnici nizi), <code>" pa "</code>
    pa je niz kar tako. To je nekako tako, kot če bi, ko smo se igrali s
    številkami, pisali</p>

<pre>>>> x = 1
>>> y = 3
>>> x + 2 + y
6</pre>

<p>V zadnji vrstici sta <code>x</code> in <code>y</code> spremenljivki (ki
    sta v resnici številki), <code>2</code> pa je številka kar tako.</p>

<p>Kaj pa, če bi slučajno pozabili narekovaje?</p>

<pre>>>> napoved_zac + mat +  pa  + dez
Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'pa' is not defined</pre>

<p>Jasno? Brez narekovajev je <code>pa</code> ime spremenljivke - in to takšne,
    ki še ni definirana. To je tako, kot če bi namesto</p>

<code>ime = "Benjamin"</code>

<p>kar je pravilno, rekli</p>

<pre>>>> ime = Benjamin
Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'Benjamin' is not defined</pre>

<p>Seveda pa lahko (z malim prekrškom enega pravila - katerega že?):</p>

<pre>>>> Benjamin = "otrok solza"
>>> ime = Benjamin
>>> ime
'otrok solza'</pre>

<p>a, istočasno</p>

<pre>>>> ime = "Benjamin"
>>> ime
'Benjamin'</pre>

Jasno? Prvič imamo spremenljivko <code>Benjamin</code>, drugič pa niz, v
katerem je besedilo Benjamin. Ko ni narekovajev, imamo spremenljivko, ko so,
pa niz.</p>

<pre>>>> napoved = Jutri bosta matametika pa dež
Traceback (  File "<interactive input>", line 1
    napoved = Jutri bosta matemetika pa dež
                     ^
SyntaxError: invalid syntax</pre>

<p>Tule računalnik trpi še bolj. Ne le, da so <code>Jutri</code>,
    <code>bosta</code>, <code>matematika</code>, <code>pa</code> in
    <code>dež</code> 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.</p>

<p>Gornje je tako, kot da bi rekli</p>

<pre>>>> x = 1
>>> y = 2
>>> z = 3
>>> x y z
  File "<console>", line 1
    x y z
      ^
SyntaxError: invalid syntax</pre>

<p>Ubogemu računalniku pač ni jasno, kaj bi z <code>x</code>, <code>y</code> in
    <code>z</code> ter zakaj mu jih naštevamo.</p>

<p>Zakaj pa smo prejle rekli, da uporabimo tiste narekovaje, ki so bolj
    <em>praktični</em>? Čemu bi bili kakšni narekovaji bolj praktični od
    drugih?</p>

<pre>>>> "Cesar vpraša nekoliko nevoljen: "Kaj neki?""
Traceback (  File "<interactive input>", line 1
    "Cesar vpraša nekoliko nevoljen: "Kaj neki?""
                                        ^
SyntaxError: invalid syntax</pre>

<p>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.</p>

<pre>>>> 'Cesar vpraša nekoliko nevoljen: "Kaj neki?"'
'Cesar vpraša nekoliko nevoljen: "Kaj neki?"'</pre>

<p>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.</p>


<h2>Iz nizov v števila</h2>

<p>Da se reč usede, meditirajmo ob naslednjih vrsticah:</p>

<pre>>>> up = 1 + 1
>>> down = "1 + 1"
>>> strange = "1" + "1"</pre>

<p>Kakšne so po tem vrednosti spremenljivk <code>up</code>, <code>down</code>
    in <code>strange</code>? Sploh pa, je vse troje legalno ali pa bo Python
    spet kaj stokal?</p>

<p>V prvo nimamo dvomov, vrednost <code>up</code> mora biti enaka 2 (in tudi
    je). Drugo? <code>"1 + 1"</code> je niz; spremenljivki <code>down</code>
    smo priredili niz <code>"1 +1"</code>, 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 <code>ime = "Benjamin"</code> ne poskuša izračunati,
    "koliko" je Benjamin. <code>"1 + 1"</code> je niz, kot vsak drugi, čeprav je
    slučajno podoben računu.</p>

<p>Najbolj zanimivo je tretje. Preden razrešimo vprašanje, se vprašajmo nekaj
    drugega. Recimo

<pre>>>> ana = "Ana"
>>> benjamin = "Benjamin"
>>> r = ana + benjamin</pre>

<p>Kaj dobimo, če seštejemo Ano in Benjamina. (Tončka? Brez duhovičenja, to so
    resne reči.) Spremenljivka <code>r</code> bo imela vrednost
    <code>"AnaBenjamin"</code>. Glede tega smo si menda enotni, ne?
    (Ako kdo misli, da bomo dobili <code>"Benjamin Ana"</code>, saj smo tudi
    poprej imeli presledke ob oni študijsko-vremenski napovedi, naj pozorno
    pregleda, kaj smo pisali ondi: vse presledke smo napisali sami.)</p>

<p>No, potem pa vemom: ko seštejemo <em>niza</em> "1" in "1" niz "11". "1" in
    "1" torej ni "2", temveč "11".</p>

<p>Nikar ne zamudimo priložnosti za še eno napako!</p>
<pre>>>> 1 + "1"
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'</pre>

<p>Seštevanje je operacija, zato tistemu, kar je levo in desno od <code>+</code>
    pravimo operanda. Sporočilo pravi, da operator <code>+</code> ne podpira
    operandov tipov <code>int</code> in <code>str</code> (<code>str</code> 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:</p>

<pre>>>> "1" + 1
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects</pre>

Stikanje (<em>concatenation</em>) 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.</p>

<p>Ker nam bo prišlo vsak čas prav, povejmo, kako iz niza dobimo število.
    Recimo, torej, da imamo <code>a = "1"</code> in <code>b = "2"</code>. 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" <code>int</code> ali <code>float</code>; obe
    funkciji pričakujeta kot argument niz, ki vsebuje neko število in kot
    rezultat vrneta celo (<code>int</code>) ali realno (<code>float</code>)
    število. </p>

<pre>>>> int("42")
42
>>> float("42")
42.0</pre>

<p>Kar želimo, storimo na tri načine, vsak je poučen po svoje. Prvi:
<pre>>>> a = "1"
>>> b = "2"
>>>
>>> aa = int(a)
>>> bb = int(b)
>>> aa + bb
3</pre>

<p>Naredili smo dve novi spremenljivki, <code>aa</code> in <code>bb</code>, ki
    vsebujeta vrednosti <code>a</code> in <code>b</code> pretvorjene v števila.
    Nato ju seštejemo.</p>

<p>Drugi:
<pre>>>> a = "1"
>>> b = "2"
>>>
>>> a = int(a)
>>> b = int(b)
>>> a + b
3</pre>

<p>Tole je podobno kot prej, le da smo povozili stare vrednosti <code>a</code> in
    <code>b</code> z novimi, številskimi, namesto da bi števila zapisovali v
    druge spremenljivke.</p>

<p>Tretji:
<pre>>>> a = "1"
>>> b = "2"
>>>
>>> int(a) + int(b)
3</pre>

<p>Ker je <code>int</code> funkcija, lahko nastopa v izrazu; potrebe, da bi
    prepisovali številke v kake nove ali stare spremenljivke, niti ni.</p>


<h2>Vpis in izpis</h2>

<p>Spoznali bomo funkcijo za izpisovanje: če jo pokličemo,
    izpiše tisto, kar smo ji dali kot argument. Imenuje se <code>print</code>.
    Za razliko od, recimo, <code>abs</code>, ki zahteva en argument, namreč
    poljubno število, in vrne njegovo absolutno vrednost, ali <code>pow</code>,
    ki hoče natanko dva argumenta, lahko damo <code>print</code>u poljubno
    število argumentov - številke, nize ali še kaj tretjega -, pa jih bo lepo
    izpisala.

<pre>>>> 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</pre>

<p>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.</p>

<pre>>>> geslo = input("Geslo? ")
Geslo? FR1.ru135
>>> geslo
'FR1.rul35'</pre>

<h2>Prvi čisto pravi program</h2>

<p>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
    <a href="http://en.wikipedia.org/wiki/Conversion_of_units_of_temperature">
        Wikipedijo</a>).</p>

<pre>
>>> temp_C = input("Temperatura [C]? ")
Temperatura [C]? 18
>>> temp_K = temp_C + 273.15
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'float' objects</pre>

<p> Funkcija <code>input</code> vrne <em>niz</em>, 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,
    <code>temp_Cf = float(temp_C)</code>, povozimo staro s
    <code>temp_Cf = float(temp_C)</code> ali pa pretvorbo opravimo kar sproti,
    tako da računamo <code>temp_K = float(temp_C) + 273.15</code>. Izmed
    naštetih možnosti se odločimo za četrto in niz pretvorimo, čim ga uporabnik
    vpiše. Ponovimo torej vso vajo. </p>

<pre>
>>> 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</pre>

<p>Zdaj to napišite v okolju, kjer program lahko tudi poženete; npr. Pycharm ali
pa v <span class="codeq">CodeQ</span> :) </p>

</body>
</html>