Obsah fóra www.hojko.com
Cvaknito.sk
Hľadať  •  FAQ  •  IP  •  Zoznam užívateľov  •  Karma  •  Závisláci  •  Registrácia
 Prihlásiť sa pre kontrolu súkromných správ  •  Prihlásenie






Zastavenie cyklu po najdeni spravnej hodnoty
Odoslať novú tému   Odpovedať na tému    Obsah fóra www.hojko.com -> Programovanie  
 Moje príspevky :: Zobraziť predchádzajúcu tému :: Zobraziť nasledujúcu tému  
Autor Správa
pato83
Guru
Guru


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 21.11.2005
Príspevky: 2806

Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 14 Apr 2008, 22:01    Predmet: Zastavenie cyklu po najdeni spravnej hodnoty Odpovedať s citátom  

Zdravim vsetkych, uz nejaky cas sa trapim a to doslova s jednou vecou. Tu je cast kodu:
Kód:
from time import localtime, strftime
from string import split
konto=500
subor=file('Historia.txt','r')
historia=subor.read()
subor.close()
historia2=historia.splitlines()
for riadok in historia2:
      hodnota=riadok.split()
      if konto > (int(hodnota[0])):
            indexR=historia2.index(riadok)
            subor=file('Historia.txt','w')
            meno=raw_input('Zadajte svoje meno: ')
            zapis=(str(konto))+(' : ')+(meno[0:10])+(strftime("    %H:%M:%S  %d-%m-%Y",localtime()))
            historia2.insert(indexR,zapis)
if len(historia2) == 11:
      for n in historia2[0:10]:
            subor.write((n)+('\n'))
      subor.close()
else:
    print ">>>>> Lutujem, ale minimalne 10 hracov dosiahlo lepsi vysledok. Skus opat! <<<<<"   
print "Dovidenia"
Je to pisane v pythone, ale jazyk nie je mozno az tak dolezity v tomto pripade.
Rozoberiem rad radom, co to ma spravit.
1. Nacita obsah suboru Historia.txt . Su tam ulozene udaje o vyske konta, mene, case a datume v presne stanovenom tvare.
2. Obsah suboru sa nacita do pola historia.
3. Pole historia sa pomocou funkcie splitlines() rozdeli na jednotlive prvky, kazdy prvok reprezentuje jeden riadok zo suboru Historia.txt. Tieto hodnoty sa zapisu do pola historia2
4. Pre kazdy prvok v poli historia2 sa vytvori vzdy nove pole hodnota, ktore vdaka funkcii split() obsahuje rozdeleny jeden prvok z pola historia2. Tymto dosiahnem, ze sa zachova priradenie >>> vyska konta : meno cas datum
5. Podmienkou if konto > (int(hodnota[0])) dosiahnem, ze ak vyska konta bude vacsia ako prve cislo v poli hodnota, na umiestnenie urcene premennou indexR vlozime hodnotu zapis. Kedze sme nasli hodnotu, ktora vyhovuje podmienke, malo by sa to skoncit. Neskonci sa a prehladava sa dalej. Samozrejme je to kvoli tomu cyklu FOR. Je nejak mozne ukoncit takyto cyklus, alebo radsej hladat inu cestu?
6. Sa porovna pocet clenov v poli historia2, ak je vacsi ako 10, znamena to, ze podmienka bola platna, pribudol zaznam a posledny zaznam sa vymaze. Opacne sa vypise hlaska.
Moja otazka znie, je aj v popise, ale opakovanie je matkou mudrosti Smile Ako dosiahnem, aby sa po najdeni spravnej hodnoty,cykklus ukoncil? Skusal som to dat cele do podmienky s premennou, ktora bude mat trebars hodnotu 0 a ak sa najde spravna hodnota, tak sa k tejto premennej pripocita jedna a teda by sa to dalej uz nemalo pocitat, ale nejako to nefunguje. Dakujem za akykolvek napad. Smile
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
audiotrack
Moderátor
Moderátor


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 09.09.2005
Príspevky: 6743
Bydlisko: Prievidza
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 14 Apr 2008, 22:41    Predmet: Odpovedať s citátom  

neviem ako sa interpretuje cyklus v phytone, ale v iných jazykoch bývajú dva spôsoby ako cyklus predčasne ukončiť. Buď je na to príkaz (napríklad break, treba pohladať či python niečo také pozná) alebo druhý spôsob je zmeniť riadiacu premennú cyklu. V tvojom prípade by som zmazal pole historia2. Tým pádom by sa v cykle už nepokračovalo (niektoré jazyky takýto postup nepodporujú, lebo sa na začiatku pozrú koľkokrát opakovať, a nie pri skončení každého kroku cyklu)

Ak nepôjde ani jedno ani druhé, for by som nahradil za while
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu Odoslať e-mail Zobraziť autorove WWW stránky AOL Instant Messenger Yahoo Messenger
pato83
Guru
Guru


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 21.11.2005
Príspevky: 2806

Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 14 Apr 2008, 23:15    Predmet: Odpovedať s citátom  

1. Odstranennie pola historia2 nie je riesenim. Vymazal som cele pole hned ako sa nacitalo naspat do suboru Historia.txt. Ono to sice zapisalo pekne na spravne miesto a v spravnom tvare do toho suboru, ale nasledne hodi error, lebo chce citat z pola historia2, ktore uz neexistuje. To by sa dalo oblbnut pomocou try a except, ale to mi nepride vobec nejake pekne riesenie. Idem pozriet ten druhy postup s break a potom to tu editnem.

2. Skvele. Pozitim prikazu break to krasne stopne. Uzasne, skvele, unbelievable Very Happy Ked som si nechaval pocas behu programu vypisovat hodnoty poli a premennych, tak boli spravne, vsetko, len ten cyklus sa nezastavil, nech som vymyslal akokolvek.

Takze takto to nakoniec vyzera:
Kód:
from time import localtime, strftime
from string import split
konto=500
subor=file('Historia.txt','r')
historia=subor.read()
subor.close()
historia2=historia.splitlines()
for riadok in historia2:
   hodnota=riadok.split()
   print hodnota
   if konto > (int(hodnota[0])):
      indexR=historia2.index(riadok)
      print indexR
      subor=file('Historia.txt','w')
      meno=raw_input('Zadajte svoje meno: ')
      zapis=(str(konto))+(' : ')+(meno[0:10])+(strftime("    %H:%M:%S  %d-%m-%Y",localtime()))
      historia2.insert(indexR,zapis)
      for n in historia2[0:10]:
         subor.write((n)+('\n'))
      subor.close()
      break
else:
   print ">>>>> Lutujem, ale minimalne 10 hracov dosiahlo lepsi vysledok. Skus opat! <<<<<"   
print "Dovidenia"
Takze obrovska vdaka audiotrack.
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
audiotrack
Moderátor
Moderátor


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 09.09.2005
Príspevky: 6743
Bydlisko: Prievidza
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 14 Apr 2008, 23:24    Predmet: Odpovedať s citátom  

audiotrack napísal:
..niektoré jazyky takýto postup nepodporujú, lebo sa na začiatku pozrú koľkokrát opakovať, a nie pri skončení každého kroku cyklu...
pato83 napísal:
...ale nasledne hodi error, lebo chce citat z pola historia2, ktore uz neexistuje. ...
ok, tak aj python je z tej skupiny kde to nejde, dobre vedieť Smile ale tuším že v pascale ak mám cyklus for i:=1 to 10 do .. môžem i prepísať na 10 aby som ukončil cyklus. Nie som si úplne istý, ale tuším to bol pascal kde som to skúšal a šlo to.
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu Odoslať e-mail Zobraziť autorove WWW stránky AOL Instant Messenger Yahoo Messenger
zaggi
Expert
Expert


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 04.02.2007
Príspevky: 173

Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 15 Apr 2008, 0:11    Predmet: Odpovedať s citátom  

audiotrack napísal:
ok, tak aj python je z tej skupiny kde to nejde, dobre vedieť Smile ale tuším že v pascale ak mám cyklus for i:=1 to 10 do .. môžem i prepísať na 10 aby som ukončil cyklus. Nie som si úplne istý, ale tuším to bol pascal kde som to skúšal a šlo to.
mozno zalezi od kompilatora, ale ja si zase pamatam ze na strednej som mal program kompilovany v starom turbo pascale s pouzitim for N:=1 to 10, v cykle som N menil jak sa mi chcelo aj tak to zbehlo 10 krat ako keby som menil uplne inu premennu ... pamatam si to preto lebo som to napisal na papier tak na pisomke, ucitelka mi to neuznala a musel som jej to ukazovat na pocitaci ze to naozaj zbehne Smile
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
pato83
Guru
Guru


Pohlavie: Pohlavie:Muž
Stav: Odhlásený
Založený: 21.11.2005
Príspevky: 2806

Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 15 Apr 2008, 13:11    Predmet: Odpovedať s citátom  

audiotrack napísal:
ok, tak aj python je z tej skupiny kde to nejde, dobre vedieť Smile ale tuším že v pascale ak mám cyklus for i:=1 to 10 do .. môžem i prepísať na 10 aby som ukončil cyklus. Nie som si úplne istý, ale tuším to bol pascal kde som to skúšal a šlo to.
Zial, uz to tak vyzera Smile Tu som prichystal taky maly dokaz, snad si to takto myslel:
Kód:
from random import random, sample
pole=sample(xrange(0,100), 20)
cislo=input('Zadaj cislo ')
for i in xrange(0,(len(pole))):
    if cislo > pole[i]:
        print 'OK'
        i=len(pole)
    else:
        print 'zle'

Vygeneruje sa nahodne pole, potom si vypyta cislo na vstupe a porovna s kazdym prvkom v poli. Ak je vacsie, vypise OK, ak je mensie ZLE. Ak je cislo vacsie, tak sa premennej i priradi hodnota reprezentujuca pocet clenov, co je zaroven aj najvyssia hodnota, aku moze i dosiahnut a program by sa mal teda ukoncit s vypisom OK, ak sa cislo bude vacsie ako dany prvok v poli. Ale, nestane sa tak. Pridavam aj screenshoty z debuggeru. Pred.png ukazuje hodnotu i pred vykonanim prikazu i=len(pole) a po.png ukazuje hodnotu i po vykonani prikazu i=len(pole). Ci tam ten prikaz je alebo nie, nema vplyv na chod programu.

Edit: Chybicka se vloudila aj do tychto par riadkov. Opravene.



pred.png
 Popis:
 Veľkosť prílohy:  80.22 kB
 Prezretá:  24 krát

pred.png



po.png
 Popis:
 Veľkosť prílohy:  94.9 kB
 Prezretá:  20 krát

po.png


Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
piton
Medium Professional
Medium Professional



Stav: Odhlásený
Založený: 02.08.2005
Príspevky: 1097
Bydlisko: Hnojisko(J9)
Karma:  Odobrať Kladná karma Pridať

PríspevokZaslal: 16 Apr 2008, 22:08    Predmet: Odpovedať s citátom  

audiotrack napísal:
ok, tak aj python je z tej skupiny kde to nejde, dobre vedieť Smile ale tuším že v pascale ak mám cyklus for i:=1 to 10 do .. môžem i prepísať na 10 aby som ukončil cyklus. Nie som si úplne istý, ale tuším to bol pascal kde som to skúšal a šlo to.
V pascale to myslim nejde, ale napr. v C v pohode...
Návrat hore
Zobraziť informácie o autorovi Odoslať súkromnú správu
Zobraziť príspevky z predchádzajúcich:    Časy uvádzané v GMT + 1 hodina
Odoslať novú tému   Odpovedať na tému    Obsah fóra www.hojko.com -> Programovanie
Strana 1 z 1

 
Prejdi na:  
Nemôžete odosielať nové témy do tohto fóra
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre
Nemôžete hlasovať v tomto fóre
Nemôžete pripájať súbory do tohto fóra
Môžete sťahovať súbory v tomto fóre


Powered by phpBB © 2005 phpBB Group, phpBB SEO, © Hojko 2004-2008

[ Vygenerované za: 0.2s ] :: [ 18 Queries ] :: [ 18,604 stránok za dnes ] :: [ Dnes DB: 315,717 ] :: [ Max DB: 2,334,336 Queries ]