2.naloga-programiranje

2.naloga-programiranje

Avtor: Lea Ostanek

BESEDILO NALOGE

V tabeli imamo podatke o imenih in letu rojstva množice oseb. Podatki so urejeni po imenih oseb v abecednem vrstnem redu. Vsa leta rojstva so med (vključno) 1880 in 1990. Podatke želimo urediti po letu rojstva, pri čemer želimo pri istem letu rojstva ohraniti urejenost po abecedi. Opiši postopek, ki podatke iz podane tabele prepiše v drugo tabelo tako, da bodo urejeni po želenem kriteriju. Velikost dodatnih spremenljivk naj bo neodvisna od števila podatkov. Napiši rešitev, ki bo čim manjkrat pregledala posamezno osebo. Namig: Ker je možnih let rojstva malo, lahko prešteješ, koliko oseb je rojenih v posameznem letu.

Tu se nahaja datoteka z rešitvijo: Osebe

Opis problema

Naloga od nas zahteva, da sestavimo metodo, s pomočjo katere bomo iz datoteke prebrali podatke o imenih in rojstnih letnicah oseb, ki so napisani po vrstnem redu glede na imena, in podatke prepisali na novo datoteko, kjer bodo podatki razporejeni po letnicah rojstva od najmanjše do največje, za letnicami pa morajo pisati tudi imena oseb, rojenih v tem letu (ravno tako po abecednem vrstnem redu).

Razlaga algoritma

Najprej definiramo ime metode, ki ji podamo dva argumenta; oba predstavljata neko datoteko, le da ena že obstaja.

Nato definiramo dva prazna seznama. V prvega bomo zapisali vrstice iz obstoječe datoteke, v drugega pa bomo zapisali nove podatke.


def osebe(imeDatoteke, novaDatoteka):
    ''' Ustvarimo metodo osebe, ki bo iz datoteke prebrala podatke o osebah
        rojenih v določenem letu, urejenih po abecednem vrstnem redu,
        in na novo datoteko zapisala samo podatke o letih rojstva teh oseb. '''

    sez = [] # prazen seznam v katerega bomo zapisali vrstice iz datoteke
    sez1 = []

Za branje odpremo obstoječo datoteko, nato pa odpremo še novo datoteko v katero bomo samo pisali. Po odprtju obeh datotek, iz prve vrstice ustvarimo seznam, v katerem so zapisani vsi podatki iz datoteke. Nato gremo čez cel seznam in v novega prepišemo po vrsti prepišemo samo letnice rojstva.

Nato definiramo števec, s pomočjo katerega bomo šli skozi cel seznam, in še nek dodatni števec s katerim povečujemo prejšnjega.


    with open(imeDatoteke, 'r') as dat: # datoteko odpremo samo za branje
        with open(novaDatoteka, 'a') as dat1:
            for v in dat:
                sez.append(v.strip('\n').split(';')) # vrstice iz datoteke
                                                     # preberemo v seznam
           # return sez
            for i in sez:
                a = i[1]
                sez1.append(a + '\n')
            # print(sez1)

            stevec = 0
            k = 1 # s tem števcem povečujemo indeks v seznamu
            for i in sez1:
                if i[stevec] != i[stevec+k]: # če je letnica različna
                                             # od naslednje letnice v seznamu
                                             # odstrani skoke v novo vrsto in
                                             # to leto izpiše
                    leto = str(i).strip('\n')
                    k += 1
                   # print(leto)

0%
0%