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
Last modified: Monday, 6 November 2023, 9:54 AM