| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Keskustelut - Python / Ruby / Perl - Python: Aloittelijan ongelmaeditoitu: 00:52 2.9.08 The Savage Sam 22:31 1.9.08 Iltaa! Olen tässä jo jonkin aikaa kypsytellyt ratkaisua erääseen ongelmaan jota en saa ratkaistua. Kokemusta Python-ohjelmoinnista ei ole järin paljoa, korkeintaan muutamia satoja rivejä yhteensä. Ongelman ei pitänyt olla järin suuri, mutta siltä se jo tuntuu. Toivoisin teiltä apua, en välttämättä valmista koodia, mutta esim. pseudokoodia tai vastaavaa. Eli mulla on tekstitiedostossa(olkoon se vaikka tietokanta.txt) tilastodataa pelaajista. Kaikki arvot ovat pilkuilla erotettuina toisistaan. Ja samoin mulla on koottuna joukkue listaan(eli pelaajien nimet, joista joukkue muodostuu). Nyt kuitenkaan kaikkien joukkueeseen nimettyjen pelaajien tietoja ei ole tiedostossa tietokanta.txt, joten käyttäjältä täytyy kysyä mitä tehdään, kun tämä huomataan. Oma käsitykseni koodista olisi jotain tämän kaltaista: Python #tietokannassa data on muotoa name,score,games pelaajat = 'tietokanta.txt' tietokanta = open(pelaajat, 'r') joukkue = [pelaaja1, pelaaja2, pelaaja3] for vaihdapelaajaa in range(len(joukkue)): #vaihtaa pelaajaa, joka poimitaan listasta while True: #vaihtaa riviä rivi = tietokanta.readline() pituus = len(rivi) line = rivi.split(',') name = line[0] score = line[1] games = line[2] if joukkue[vaihdapelaajaa] = name: print 'pelaaja %s löytyi'% (joukkue[vaihdapelaajaa]) if pituus == 0: #jos pituus on nolla, ollaan lopussa # !!!HUOMIO!!! #nyt pitäisi tarkastaa löydettiinkö pelaajaa tietokannasta vai ei #ja sitten kysyä käyttäjältä syöttääkö arvot tai tulostaa vain ettei löytynyt #Mutta miten? break editoitu: 23:48 1.9.08 chiman 23:44 1.9.08 Python pelaajat = 'tietokanta.txt' kanta = set(rivi.split(',')[0] for rivi in open(pelaajat).readlines()) joukkue = [pelaaja1, pelaaja2, pelaaja3] puuttuvat = (pelaaja for pelaaja in joukkue if pelaaja not in kanta) for pelaaja in puuttuvat: print 'Pelaajaa %s ei ole kannassa' % pelaaja Kirjoitin suomeksi mallisi mukaan. Englanti olisi kyllä suositeltavampaa. Ensiksi luetaan kannan pelaajien nimet, tehdään niistä joukko (set), josta hakeminen on nopeaa. Sitten luodaan joukkueesta generaattorilauseke, jonka avulla iteroidaan kannasta puuttuvat pelaajat nimi kerrallaan. Tarkempi ratkaisu riippuu tarkoituksesta. Tiedoston lukeminen on hidasta, joten se kannattaa tehdä vain kerran. En testannut, joten saattoi jäädä virheitä. Pätkisitkö tuota ylipitkää kommenttiriviä ("nyt pitäisi tarkastaa..."). Se levittää ruutua ikävästi, ainakin Firefoxissa. Grez 23:53 1.9.08 chiman kirjoitti: Pätkisitkö tuota ylipitkää kommenttiriviä ("nyt pitäisi tarkastaa..."). Se levittää ruutua ikävästi. Näitä kommentteja näkee aina välillä. Minua ihmetyttää kaksi asiaa.. Minkä kokoista näyttöä/ikkunaa ja mitä selainta oikein käytätte. Siis nämä ihan vaan sillä, että itselläni tuo mainittu rivi vie normaalisti vain noin puolet koodilaatikon leveydestä ja toisaalta jos kavennan ikkunan todella kapeaksi niin se ei silti levitä mitään vaan koodilaatikkoon tulee vaakaskrolli.. (Firefoxilla) No joo, onhan tuo 155 merkkiä, eli perinteiseen 80 merkin näyttöön ajatellen melko ylipitkä rivi. Mikäköhän mahtaa nykyään olla suositeltava rivinpituus... 80 merkkiin ei kyllä aina mahdu riittävästi, varsinkin kun pelkät sisennykset saattaa viedä jopa 40 merkkiä... editoitu: 00:42 2.9.08 chiman 00:03 2.9.08 Grez kirjoitti: Minkä kokoista näyttöä/ikkunaa ja mitä selainta oikein käytätte. Ruudun leveys on 1024 pikseliä, selain koko ruudun levyinen. Käytössä Ubuntu 8.04 ja uusin Firefox 3. Lisäyksenä sen verran, että on tuossa koodilaatikossa vaakaskrolli, joka rajoittaa koodilaatikon leveyden noin 1050 pikseliin. Tällä hetkellä se peittää viimeisen tavun pitkän rivin lopusta :) Lisäys: kuva Grez 00:25 2.9.08 Aika jännää että se käyttäytyy noinkin eri tavalla.. Itsellä näin, jos kavennan kovasti: http://grez.info/murea/kapeakuha.png editoitu: 12:40 2.9.08 Akiro 12:39 2.9.08 Tuo overflow: scroll; toimii vähän "jännästi" välil eri selainversioil, eli vaikka se laittaa vaakascrollin niin silti piirtää sivun helv. leveänä, tosi "kätevää". Helpoiten pääsee vaan kun välttää ylileveitä rivejä koodipätkissä. Grez: Ja > ~1024 leveä selain on vähän ankea, menee kappaleet niin leveiksi monella sivulla et hankala lukea ja tulee turhaa whitespacea moneen paikkaan. Mieluummin pitää selainikkunaa tällasena "a4-kokosena" vaik onkin isompi näyttö. Grez 14:15 2.9.08 (No eipä toi whitespace mitään maksa.. :D Itsellä on nyt selainikkuna noin A3 kokoisena, enkä huomaa että olisi häirinnyt. Onhan tuossa vielä 1/2 näytöstä muuhun käyttöön. En häiriinny whitespacesta liikaa edes selaimen ollessa vaaka-A2 kokoisena) Mutta ihan yleisesti kiinnostaisi onko olemassa jotain konsensusta siitä, montako merkkiä rivillä saa olla? En ainakaan usko että nykykoneilla 78 merkkiä pidettäisiin ehdottomana rajana, niinkuin joskus.. Nykykielissäkin tuppaa sisennystä tulemaan aika monta tasoa. Tuossa esimerkissä on nyt uudelleenrivitettynä näköjään eniten oikeanpuolimmaisin merkki "sarakkeessa" 90. editoitu: 17:26 19.9.08 Enec 17:26 19.9.08 Grez kirjoitti: 80 merkkiin ei kyllä aina mahdu riittävästi, varsinkin kun pelkät sisennykset saattaa viedä jopa 40 merkkiä... Kyllä itellä on 80 merkkiä riittänyt mainiosti, ja sitä yleensä käytän. Jos sisennykset vie puolet siitä, niin saa koodi olla aika rikkinäistä (..tai sitten käyttää jotain 10 spacen sisennyksiä). Lisättäköön vielä että itse käytän 2 spacen sisennyksiä. chiman 17:35 19.9.08 Koska tämä ketju ei taida enää pythonin osalta jatkua, mainitsen että paikkasin ongelman omalta kohdaltani lisäämällä näihin keskusteluihin Greasemonkey-lisäosalla tyylimääreen: #middle { max-width: 700px; } Koodina näin: function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); } addGlobalStyle('#middle { max-width: 700px; }'); Ei varmasti ole tyylikkäin ratkaisu, mutta ainakin toimii. |
![]() Haku
|