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

Last modified: Friday, 6 November 2020, 12:49 PM