Naloge - drugi teden
A-javost nizov
Napiši program, ki mu uporabnik vpiše niz in pove, koliko črk a
je v
njem.
Rešitev
```python niz = input('Vpišite niz: ') stevec = 0 for crka in niz: if crka =='a': stevec += 1 print('Število a-jev:', stevec) ``` Lahko pa uporabimo metodo count ```python print('Število a-jev:', niz.count('a')) ```Najmanjši pozitivec
Napiši program, ki v danem seznamu števil (lahko ga zapišete kar na
začetek programa, npr. l = [5, 4, -7, 2, 12, -3, -4, 11, 7]
) poišče in
izpiše najmanjše pozitivno število v njem. Za gornji seznam tako izpiše
2
.
Rešitev
```python xs = [5, 4, -7, 2, 12, -3, -4, 11, 7] min_pos = float("inf") for x in xs: if 0 < x < min_pos: min_pos = x print(min_pos) ``` Nalogo bi sam rešil tako, da bi se najprej znebil negativnih stevil, nato pa uporabil pythonov min. ```python print(min(x for x in xs if x > 0)) ```Najtežji ven!
Imamo seznam tež, na primer teze = [66, 72, 84, 68, 96, 73, 80]
.
Napiši program, ki iz seznama pobriše največjo težo. Od gornjega seznama
mora tako ostati [66, 72, 84, 68, 73, 80]
.
Namig: uporabi enumerate
, da boš imel indeks in težo, takole,
for i, teza in enumerate(teze):
. Nadaljuj tako, kot smo delali, ko smo
iskali največji element seznama (največjo vrednost delnice), le da si
poleg teže zapomni tudi indeks tega elementa. Denimo, da si ga shranil v
najvecji_i
; program v tem primeru končaš tako, da pobrišeš ta element,
del teze[najvecji_i]
.
Rešitev
```python teze = [66, 72, 84, 68, 96, 73, 80] najvecji_i = 0 for i, teza in enumerate(teze): if teza > teze[najvecji_i]: najvecji_i = i del teze[najvecji_i] ``` Lahko pa uporabimo bližnjico: ```python del teze[teze.index(max(teze))] ```Povprečje brez najtežjega
Dopolni prejšnji program tako, da bo po tem, ko iz seznama odstrani "najtežji element", izračunal povprečno težo.
Rešitev
```python teze = [66, 72, 84, 68, 96, 73, 80] najvecji_i = 0 vsota = 0 for i, teza in enumerate(teze): vsota += teza if teza > teze[najvecji_i]: najvecji_i = i vsota -= teze[najvecji_i] del teze[najvecji_i] print(vsota / len(teze)) ```Padajoča povprečja
Dopolni prejšnji program tako, da odstrani najtežjega, izračuna povprečje ... in to ponavlja (spet odstrani najtežjega, izračuna povprečje, odstrani najtežjega, izračuna povprečje ...) dokler seznam ni prazen.
Namig: okrog vsega, kar si napisal prej, bo potrebno dodati še eno zanko - for ali while, poskusi z obema!
Rešitev
```python teze = [66, 72, 84, 68, 96, 73, 80] while teze: najvecji_i = 0 vsota = 0 for i, teza in enumerate(teze): vsota += teza if teza > teze[najvecji_i]: najvecji_i = i vsota -= teze[najvecji_i] del teze[najvecji_i] if teze: print(vsota / len(teze)) ```Indeks telesne teže
Imejmo seznam trojk ime osebe, teža, višina, na primer:
podatki = [
["Ana", 55, 165],
["Berta", 60, 153],
]
Napiši program, ki izpiše imena oseb in njihove indekse telesne teže.
Rešitev
```python podatki = [ ["Ana", 55, 165], ["Berta", 60, 153], ] for ime, teza, visina in podatki: print(ime, teza / (visina / 100)**2) ```Fršlusanje zmagovalcev
V Planici so zgradili novo, dvojno skakalnico, s katero lahko izvajajo meddržavna tekmovanja v paralelnih skokih. Stvar je preprosta: skakalci se paroma odganjajo z dveh skakalnic, eni z ene, drugi z druge. Država, katere skakalec je skočil dlje, dobi točko. Zmaga država, ki dobi več točk. Napiši program, ki pove, katera država je zmagala.
Dolžine skokov so zbrane v dveh seznamih, ki jih lahko napišete kar na začetek programa, na primer takole:
finska = [153, 141, 152, 160, 135]
danska = [148, 148, 148, 148, 148]
(se zdijo Danci še komu dolgočasni? :) V tekmi so zmagali Finci, saj so bili boljši v treh skokih, Danci pa le v dveh.
Rešitev
```python finska = [153, 141, 152, 160, 135] danska = [148, 148, 148, 148, 148] stevec = 0 for finec, danec in zip(finska, danska): if finec > danec: stevec += 1 elif finec < danec: stevec -= 1 if stevec > 0: print('Finec') elif stevec < 0: print('Danec') else: print('Izenaceno') ```Dobički
Pravila neke igre so takšna: igralci dobivajo vprašanja, za katera dobijo različno količino denarja. Ko prvič napačno odgovori, za kar seveda dobi 0 evrov, je igre zanj konec. V seznamu so zapisani dobički za posamezne odgovore, na primer takole
l = [4, 5, 8, 0, 4, 1, 2, 0, 0, 0, 4, 6, 10, 0, 5, 0, 12, 1, 0]
Napišite program, ki izpiše dobičke posameznih tekmovalcev, pri čemer preskoči tiste, ki niso zaslužili ničesar. Za gornji seznam mora izpisati
17
7
20
5
13
Rešitev
```python xs = [4, 5, 8, 0, 4, 1, 2, 0, 0, 0, 4, 6, 10, 0, 5, 0, 12, 1, 0] sestevek = 0 for x in xs: if x != 0: sestevek += x elif sestevek != 0: print(sestevek) sestevek = 0 ```Seznam dobičkov
Spremeni gornji program tako, da dobičkov ne izpiše, temveč jih zapiše v nov seznam in ga izpiše. V gornjem primeru, recimo, mora izpisati
[17, 7, 20, 5, 13]
Rešitev
```python xs = [4, 5, 8, 0, 4, 1, 2, 0, 0, 0, 4, 6, 10, 0, 5, 0, 12, 1, 0] ys = [] sestevek = 0 for x in xs: if x != 0: sestevek += x elif sestevek != 0: ys.append(sestevek) sestevek = 0 print(ys) ```Oklepaji
Imamo izraz zapisan kot niz, ki je sestavljen samo iz oklepajev in zaklepajev. Napišite program, ki ugotovi regularnost takega izraza, oz. če se vsi oklepaji ustrezno zaprejo z zaklepaji.
Primeri regularnih izrazov: "()", "(())", "(()()())()".
In neregularnih: "((", ")(", "(()()))"
<
details>
s = "((()(()))())"
oklepajev = 0
for c in s:
if c == "(":
oklepajev += 1
else:
oklepajev -= 1
if oklepajev<0:
break
if oklepajev == 0:
print("Izraz je OK")
else:
print("Izraz NI ok")
Malo bolj kompleksni oklepaji
Ta naloga je podobna prvi, s to razliko, da imamo zdaj več tipov oklepajev. Naj vsaka črka angleške abecede predstavlja en tip oklepaja, kjer velika črka odpira oklepaj in mala črka zapira (zaklepaj). Pri tej nalogi je treba paziti, da se vgnezdeni oklepaji zaprejo pred zunanjimi. Na primer, niz "ABba" je pravilen, a "ABab" pa ne, ker se oklepaj tipa B ne zapre pred oklepajem tipa A.
Primeri regularnih: "Aa", "AaBb", "AaBbACBbDdcDda".
In neregularnih: "ABC", "aB", "aA", "ABCabc".