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

Python petlja

[es] :: Python & Zope :: Python petlja

[ Pregleda: 1074 | Odgovora: 8 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Au197/79
Zlatan Kadragić
NBGD

Član broj: 3556
Poruke: 649
*.ptt.yu

Sajt: aurelije.blogspot.com


Profil

icon Python petlja27.11.2002. u 11:11

Radio sam zadatak u kome je trebalo napisati program koji za za datu matricu dimenzija NxN ispunjenu celim brojevima krecuci se od bilo kog elementa u prvoj koloni do bilo kog elementa u poslednjoj koloni pronalazi put sa najmanjom sumom elemenata. Kretanje je moguce za 1 polje desno, gore i dole. Npr:

1 5 9 8
0 0 9 9
2 1 0 9
5 6 0 0

Napiso sam funkciju s(red, kol, smer) koja krece rekurzivno od svakog elementa pocetne kolone i nalazi najkraci od tog pocetka. Te rezultate cuvam u listi objekata klase Slog (klasa ima polje zbir gde pamti najmanju sumu i polje put gde se pamti najjeftinija putanja). Na kraju samo treba da da pronadjem element liste koji ima najmanje polje zbir.
I tu nastaje problem. Ja to radim klasicno u petlji ali kako god uradim petlju ona se izvrsi samo 1 put. Dakle nagradno pitanje je zasto se petlja u python-u ne petlja? Evo tog dela:
Code:

# uradi s() nad svakim redom
lista = []
for i in range(n):
    lista.append(s(i, 0, DESNO))
    
# nadji najmanju putanju iz liste 
najmanji = lista[0]
for i in range(1, n):
    print i
    if lista[i].zbir < najmanji.zbir:
        najmanji = lista[i]
            
return najmanji


Sve je u redu u kodu do poslednje petlje koja bi trebalo da se izvrsi 3 puta obzirom da je n = 4, a print i mora da odstampa 1, 2, 3, ali se odstampa samo 1!

Ja sam zadatak resio sa lista.sort() pa return lista[0] ali mi se cini da je to neefikasan nacin, a i zivo me zanima sta sa onom petljom nije u redu.

Prilažem i kompletan kod.
Bolje džaba ležat nego džaba radit.
Prikačeni fajlovi
27.11.2002. u 11:11 

alex
Aleksandar Radulovic
Software Architect, Software Development, Síminn hf.
Reykjavik, Iceland

Administrator
Član broj: 71
Poruke: 2180
*.itn.is

Jabber: maurice.chavez@gmail.com
ICQ: -1
Sajt: www.a13x.info


Profil

icon Re: Python petlja27.11.2002. u 14:01
Pre svega, kod ti je uzasno neorganizovan i necitljiv.. Deklarisanje funkcija u funkciji, klasa u funkciji, deklarisanje funkcije u sred implementacije druge funkcije, pa gde to ima???

Drugo, malo debagovanja pre postavljanja pitanja ne bi skodilo, jer je u tome problem.

Trece, korisi samo JEDAN tip indentovanja, ili space ili TAB.

Tebi ne radi skript jer ti ispred return najmanji stoji TAB umesto 4 space-a, te python misli da je to deo for petlje (koja je uvucena sa tab-ovima) pa odmah uradi return i izlazi iz funkcije.

Sredi tab-ove i space-ove i kod ce ti proraditi.
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x || linkedin.13x
27.11.2002. u 14:01 

Au197/79
Zlatan Kadragić
NBGD

Član broj: 3556
Poruke: 649
*.ptt.yu

Sajt: aurelije.blogspot.com


Profil

icon Re: Python petlja27.11.2002. u 14:21
U pravu si!
Greška u indent-u je posledica editora (UltraEdit). Kada mu se zada komanda indent on samo radi sa spejsovima, a ja inače koristim samo tabove.
Klasu sam stavio u funkciju jer mi samo tu treba. U suštini meni treba slog, a ne klasa. A funkciju s sam tu stavio jer ona koristi promenljivu tabela koju ne dobija preko liste argumenata, pa mi je bilo logično da je umotam u drugu funkciju. Kako bih inače mogao da tražim najjeftiniji put za 2 tabele?
Ako znaš bolji način, bio bih ti zahvalan da mi ga predočiš, pa da ga naučim.

Hvala za pomoć!
Bolje džaba ležat nego džaba radit.
27.11.2002. u 14:21 

Au197/79
Zlatan Kadragić
NBGD

Član broj: 3556
Poruke: 649
*.ptt.yu

Sajt: aurelije.blogspot.com


Profil

icon Re: Python petlja28.11.2002. u 05:37
Pogledao sam ponovo kod. Iz funkcije mat(tabela) bih izbacio definiciju klase Slog i funkciju min(a, b, c). Ali opet ne znam kako da izbacim funkciju s(red, kol, smer).
Bolje džaba ležat nego džaba radit.
28.11.2002. u 05:37 

alex
Aleksandar Radulovic
Software Architect, Software Development, Síminn hf.
Reykjavik, Iceland

Administrator
Član broj: 71
Poruke: 2180
*.itn.is

Jabber: maurice.chavez@gmail.com
ICQ: -1
Sajt: www.a13x.info


Profil

icon Re: Python petlja28.11.2002. u 11:18
Evo, prepravio sam ti kod i saljem ga uz poruku.

Elem, izbacio sam funkciju s() tako sto sam u argumente dodao varijablu tabela, sto je sasvim razumljivo.

Program radi bez problema, a i citljiviji je.

Preporucio bih ti da pre citanja Python dokumentacije malo procesljas proceduralno programiranje, jer je to tvoj osnovni problem u konkretnom zadatku.

Naravno, mogao je ceo zadatak da se resi kreiranjem jednog objekta koji ima deklarisane i implementirane metode za racunanje, ali ti takvo resenje prepustam za vezbu.

Pozdrav,
alex.
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x || linkedin.13x
Prikačeni fajlovi
28.11.2002. u 11:18 

Au197/79
Zlatan Kadragić
NBGD

Član broj: 3556
Poruke: 649
*.ptt.yu

Sajt: aurelije.blogspot.com


Profil

icon Re: Python petlja30.11.2002. u 08:21
Hvala još jednom.
Sada me zanima nešto. Ako imam listu referenci na objekte klase koja imaju redefinisan __str()__ metod zašto <print lista> ne poziva str metod za svaki element liste već kao rezultat dobijem adrese referenci. A kako to da lista.sort() pozove cmp() za svka element a prin neće slično da se ponaša?
Bolje džaba ležat nego džaba radit.
30.11.2002. u 08:21 

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.dial.InfoSky.Net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


Profil

icon Re: Python petlja04.01.2003. u 09:44
Hm, pretpostaviću da si umesto __str()__ mislio na __str__ (a zagrade možeš staviti posle ako hoćeš da naglasiš o čemu se radi).


Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
04.01.2003. u 09:44 

Au197/79
Zlatan Kadragić
NBGD

Član broj: 3556
Poruke: 649
*.ptt.yu

Sajt: aurelije.blogspot.com


Profil

icon Re: Python petlja05.01.2003. u 15:58
Da mislio sam na redefinisanje funkcije __str__(self) iz klase Object. Imaš kod poslat u ranijim postovima.
Bolje džaba ležat nego džaba radit.
05.01.2003. u 15:58 

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.dial.InfoSky.Net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


Profil

icon Re: Python petlja05.01.2003. u 20:30
Pa koristi __repr__ za liste, a ne __str__, ili napravi novu klasu MojaLista, koja će koristiti str() za ispis, umesto repr().


Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
05.01.2003. u 20:30 

[es] :: Python & Zope :: Python petlja

[ Pregleda: 1074 | Odgovora: 8 ]

Postavi temu Odgovori

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