Naloge
Največji
Napišite funkcijo naj(xs)
, ki vrne največje število v seznamu xs. Zagotovljeno je, da števila po absolutni vrednosti ne presegajo $10^{10}$.
>>> naj([5, 1, -6, -7, 2])
5
Rešitev
def naj(xs):
naj = -10**10
for x in xs:
if x > naj:
naj = x
return naj
Seveda lahko uporabimo funkcijo `max`
def naj(xs):
return max(xs)
ali
naj = max
Največji absolutist
Napišite funkcijo naj_abs(xs)
, ki vrne največje število po absolutni
vrednost v seznamu xs.
>>> naj_abs([5, 1, -6, -7, 2])
-7
Rešitev
def naj_abs(xs):
naj = 0
for x in xs:
if abs(x) > abs(naj):
naj = x
return naj
Oštevilči
Napišite funkcijo ostevilci(xs)
, ki vrne seznam oblike
[(0, xs[0]), (1, xs[1]), ..., (n, xs[n])]
. n
je enak dolžini seznama
xs
minus ena.
Na konec seznama lahko dodajate nove elemente z metodo append
.
>>> ostevilci([4, 4, 4])
[(0, 4), (1, 4), (2, 4)]
>>> ostevilci([5, 1, 4, 2, 3])
[(0, 5), (1, 1), (2, 4), (3, 2), (4, 3)]
Rešitev
def ostevilci(xs):
ys = []
for i,x in zip(range(len(xs)), xs):
ys.append((i, x))
return ys
ali
def ostevilci(s):
return list(enumerate(s))
Indeks telesne teže
Podan imamo seznam trojk: ime osebe, teža, višina, na primer:
>>> osebe = [('Ana', 55, 165), ('Berta', 60, 153)]
Napišite funkcijo bmi(osebe)
, ki na podlagi podanega seznama osebe
,
sestavi seznam dvojk: ime osebe, indeks telesne teže.
>>> bmi(osebe)
[('Ana', 20.202020202020204), ('Berta', 25.63116749967961)]
Rešitev
def bmi(xs):
ys = []
for name, weight, height in xs:
ys.append((name, weight / (height / 100)**2))
return ys
Indeks telesne teže 2
Naloga je podobna prejšnji, le da imamo tokrat podatke v drugačni obliki:
>>> imena = ['Ana', 'Berta']
>>> teze = [55, 60]
>>> visine = [165, 153]
>>> bmi2(imena, teze, visine)
[('Ana', 20.202020202020204), ('Berta', 25.63116749967961)]
Rešitev
def bmi2(names, weights, heights):
ys = []
for name, weight, height in zip(names, weights, heights):
ys.append((name, weight / (height / 100)**2))
return ys
Praštevila
Napišite funkcijo prastevila(n)
, ki ugotovi, koliko praštevil je
manjših od števila n
.
>>> prastevila(10)
4
Praštevila manjša od 10 so 2, 3, 5 in 7.
Naloga ima dve verziji testov: lažjo bi morali rešiti vsi, težjo pa le najbolj zagrizeni, saj presega okvire tega predmeta (namig: Eratostenovo sito). Če želite vaš program preveriti s težjimi testi, jih morate odkomentirati.
Rešitev
import math
def prastevila(n):
cnt = 0
for j in range(2, n):
for i in range(2, int(math.sqrt(j)) + 1):
if j % i == 0:
break
else:
cnt += 1
return cnt
Eratostenovo sito:
import math
def prastevila(n):
ps = [True] * n
for i in range(2, int(math.sqrt(n)) + 1):
if ps[i]:
for j in range(i * 2, len(ps), i):
ps[j] = False
return sum(ps) - 2
Palindrom
Napišite funkcijo palindrom(s)
, ki preveri, ali je niz s
palindrom. Pomagajte si s funkcijo reversed
.
>>> palindrom('pericarezeracirep')
True
>>> palindrom('perica')
False
Rešitev
def palindrom(s):
for a, b in zip(s,reversed(s)):
if a != b:
return False
return True
Palindromska števila
Največje palindromsko število, ki ga lahko dobimo kot produkt dveh
dvomestnih števil je 9009 = 91 * 99
. Napišite funkcijo
palindromska_stevila()
, ki poišče in vrne največje palindromsko
število, ki ga lahko dobimo kot produkt dveh tromestnih števil.
Vir: Project Euler, Problem 4.
Rešitev
def palindromska_stevila():
xs = []
for i in range(100, 1000):
for j in range(100, 1000):
if palindrom(str(i * j)):
xs.append(i * j)
return max(xs)
Inverzije
Napišite funkcijo inverzije(xs)
, ki v seznamu xs
prešteje in vrne
število inverzij. Seznam vsebuje sama različna števila! Inverzija je par števil, v katerem se večje število v
seznamu pojavi pred manjšim. V seznamu xs = [1, 4, 3, 5, 2]
so štiri
inverzije
>>> inverzije([1, 4, 3, 5, 2])
4
Štirica se pojavi pred trojko in dvojko. Trojka se pojavi pred dvojko in petica se pojavi pred dvojko.
Rešitev
def inverzije(xs):
cnt = 0
for a in xs:
for b in xs:
if b == a:
break
if b > a:
cnt += 1
return cnt