Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zadaci za wannabe pythoniste

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 9 10 11 12 13 14 15 16 17 18 ... Dalje > >>

[ Pregleda: 52203 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 02:00 - pre 51 meseci
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?
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 02:11 - pre 51 meseci
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.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 07:09 - pre 51 meseci
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.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 07:15 - pre 51 meseci
To je znaci samo za Windows resenje. Na OSX \r i na Linux-u \n su samo jedan bajt.
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 07:20 - pre 51 meseci
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?
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 07:25 - pre 51 meseci
Ne ne, to su dva primera, ne jedan. Znaci jedna je da pratis log, druga da prikazes zadnjih 10 linija neke komande.
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 07:39 - pre 51 meseci
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.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 09:56 - pre 51 meseci
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')
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 11:06 - pre 51 meseci
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.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 12:21 - pre 51 meseci
Vala mene i jeste komplikovano.
Ovo done mi je novost. Što si tu stavio done = True, a ne obično break?
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 12:36 - pre 51 meseci
Zato sto python nema goto? Ili break label.
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste08.02.2020. u 13:21 - pre 51 meseci
"Što si tu stavio done = True, a ne obično break?"

Zato što isti neće da prekine izvršavanje prve petlje.

https://www.python.org/dev/peps/pep-3136/
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste09.02.2020. u 08:23 - pre 51 meseci
"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.
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 803



+636 Profil

icon Re: Zadaci za wannabe pythoniste09.02.2020. u 08:32 - pre 51 meseci
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.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste09.02.2020. u 09:04 - pre 51 meseci
Noviji jezici imaju rust, nim, golang. to je zato sto je koriscenje goto tu prirodno, a kao sto znamo goto je evil :P
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste09.02.2020. u 09:17 - pre 51 meseci
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.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
109.72.51.23



+1064 Profil

icon Re: Zadaci za wannabe pythoniste09.02.2020. u 09:28 - pre 51 meseci
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.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste09.02.2020. u 11:35 - pre 51 meseci
Samo što svi ti nabrojani jezici imaju i goto, kada baš zatreba.
A i C, koji nema exception konstrukciju, ima longjump
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste09.02.2020. u 15:29 - pre 51 meseci
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.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste09.02.2020. u 15:43 - pre 51 meseci
E sad pitanje.

Jel moguća varijanta da se ne zada broj fajlova unapred?
I kako?

 
Odgovor na temu

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 9 10 11 12 13 14 15 16 17 18 ... Dalje > >>

[ Pregleda: 52203 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.