Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 629 odgovora
  • 108.312 pregleda

Najnovija ↓

Re: Zadaci za wannabe pythoniste 08.02.2020. u 03:00 · pre 81 mesec #261
Ne razumem ideju.

Posle open svakako je pozicija na početku fajla, koliko god da ima redova taj fajl.
U čemu je poenta sa proveravanjem pozicije?
Re: Zadaci za wannabe pythoniste 08.02.2020. u 03:11 · pre 81 mesec #262
Ideja koju ti je Panta dao je da kreneš UNAZAD (seek metoda) od kraja fajla i da brojiš redove.
Kada izbrojiš 10 redova ILI kada si u pretrazi došao do početka (tell daje 0), onda izlaziš iz petlje i ispisuješ redove.
Re: Zadaci za wannabe pythoniste 08.02.2020. u 08:09 · pre 81 mesec #263
E sad sam skapirao. Polako to ide, ali eto, mrda :)

Dakle, plan:

zadaš broj redova, recimo 5
otvoriš fajl
pomeriš kursor na kraj-2

while petlja 1:
ideš unazad po dva bajta dok ne dođeš do kraja prethodnog reda, \n

ona je unutar while petlje 2
koja broji redove do 5

a sve to je u if... else

if fajl.tell() != 0:
vrti petlju
else:
print('nema toliko redova')

E ovo je loš plan, jer sam probao i kod kratkog fajla od tri reda, ne stigne do 5, već javi grešku.

Dakle, trebalo bi verovatno ovu drugu petlju napraviti if...else, da zaustavi brojanje,
pa ako dođe do 0, da ne vrti dalje. Moram i to probati, samo još da vidim kako.
Re: Zadaci za wannabe pythoniste 08.02.2020. u 08:20 · pre 81 mesec #265
Citat:
tail koristim za pracenje log-ova, i da vidim zadnje linije izlaza neke komande.
recimo tail -f logfile ili : komanda | tail -n 10

Da li si siguran da ti radi taj primer? Komanda tail -f konstantno čita iz log fajla, tj. nikad se ne završava, kako onda da prosledi izlaz drugoj tail komandi?
Re: Zadaci za wannabe pythoniste 08.02.2020. u 08:39 · pre 81 mesec #267
Ja sam zbog | znaka mislio da je jedna.

"Dakle, trebalo bi verovatno ovu drugu petlju napraviti if...else, da zaustavi brojanje"

Ili da ukloniš jednu petlju, dovoljna je jedna, ova što broji linije. Zatim proveriš poziciju, ako nije nula, onda proveriš znak, ako je \n, pročitaš liniju i uvećaš brojač, itd.
Re: Zadaci za wannabe pythoniste 08.02.2020. u 10:56 · pre 81 mesec #268
Nešto sam ovako nabo, ali na žalost ne radi kad je u fajlu manje linija od zadatih.
Što je još gore, ne vidim zašto.

Code:
redovi = []
red = 0
with open('new1.txt', 'rb') as f:
    f.seek(-2, 2)
    while red < 5:
        while f.read(1) != b'\n':
            f.seek(-2, 1)
            if f.tell() == 0:
                print('kratak fajl')
                break
        pos = f.tell()
        redovi.append(f.readline().decode())
        f.seek(pos - 2)
        red += 1

print(*redovi[::-1], sep='\n')
Re: Zadaci za wannabe pythoniste 08.02.2020. u 12:06 · pre 81 mesec #269
Na pogrešnom mestu ti je if. Prvo proveriš sa f.tell() da li je početak fajla, pa onda pomeriš poziciju sa f.seek(). Takođe, pošto imaš jednu petlju viška, moraš i njeno izvršavanje da prekineš, inače ona i dalje nastavlja izvršavanje. Na primer:

Code (python):
redovi = []
red = 0
done=False
with open('new1.txt', 'rb') as f:
    f.seek(-2, 2)
    while red < 5:
        while f.read(1) != b'\n':
            if f.tell() <= 1:
                f.seek(0)
                redovi.append(f.readline().decode())
                done=True
                # break
            else:
                f.seek(-2, 1)
        if done:
            break
        pos = f.tell()
        redovi.append(f.readline().decode())
        f.seek(pos - 2)
        red += 1
    print(*redovi[::-1], sep='')

Malo je komplikovano, zato sam i naveo jednostavniji primer sa jednom petljom.
Re: Zadaci za wannabe pythoniste 08.02.2020. u 13:21 · pre 81 mesec #270
Vala mene i jeste komplikovano.
Ovo done mi je novost. Što si tu stavio done = True, a ne obično break?
Re: Zadaci za wannabe pythoniste 09.02.2020. u 09:23 · pre 81 mesec #273
"The break statement allows the programmer to terminate a loop early, and the continue statement allows the programmer to move to the next iteration of a loop early. In Python currently, break and continue can apply only to the innermost enclosing loop."

Zanimljivo.
Re: Zadaci za wannabe pythoniste 09.02.2020. u 09:32 · pre 81 mesec #274
Citat:
a1234567: In Python currently, break and continue can apply only to the innermost enclosing loop."

Nije to samo u Pythonu. Identicna filozofija je i u PHP, Perlu i mnogim drugim jezicima. Zapravo, sve vuce korene iz C, gde je to tako reseno.
Re: Zadaci za wannabe pythoniste 09.02.2020. u 10:17 · pre 81 mesec #276
Eto Rosum pretabačio C i pravi se toša :D

A što je goto evil?
Pa bilo bi lepo da njime možeš da zakočiš jednu petlji i skočiš drugu.
Re: Zadaci za wannabe pythoniste 09.02.2020. u 10:28 · pre 81 mesec #277
Ma goto je evil od ranijih dana kada nije postojalo struktuirano programiranje pa je skakanje sa linije na
liniju pravilo spageti kod. No sada, kada imas while for case koriscenje i nije neophodno osim eto
kada ne mozes da izadjes iz unutrasnje petlje ili kada treba da skocis na obradu greske.
Re: Zadaci za wannabe pythoniste 09.02.2020. u 12:35 · pre 81 mesec #278
Samo što svi ti nabrojani jezici imaju i goto, kada baš zatreba.
A i C, koji nema exception konstrukciju, ima longjump
Re: Zadaci za wannabe pythoniste 09.02.2020. u 16:29 · pre 81 mesec #279
Došao je na red i jubilarni 20. zadatak.

Vidim da ovaj čovek traži Python program za OCR-ovanje, pa umalo da to postavim kao zadatak. :)
Ali se bojim da bi malo potrajalo, a čoveku se sigurno žuri...
Zato ipak idemo na nešto drugo, a možda i to nekom zatreba.

Ovoga puta treba spojiti dva fajla u treći i to iz komandne linije.
Nešto ovako:

> python spoji.py fajl1.txt fajl2.txt fajl3.txt

Malo sam eksperimentisao i nije tako teško kao što mi se u prvi trenutak učinilo.
Pa sam svoje rešenje postavio ovde.
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme