Kielenä siis Python
avaa = open("sanoja.txt","r") lista = [avaa.read()] lista.sort() print("Sanat laitettuna aakkosjärjestykseen:") for i in lista: print(i)
Tehtävässä on tiedosto nimeltä "sanoja.txt", joka sisältää SANAT
aavikkorotta autokauppias hattuteline huono kaljakori kivitalo kumipallo lapio puuveistos rautanaula saunatonttu tuuli
Kuitenkin väärässä aakkosjärjestyksessä ja tehtävässä nuo tulee saada laitettua aakkosjärjestykseen
ongelmani tässä tehtävässä on siis täysin kuinka saada nuo sanat sortattua.
Ensimmäinen kerta kun tehtäviä tehdessä tuli tilanne, jossa en yksinkertaisesti saa mieleeni mitään asiaa mikä saisi tuon toimimaan oikein.
Saan siis tekstin tuolla koodilla tulostumaan oikein tehtävänannon mukaisesti allekkain jokaisen sanan, mutta aakkosjärjestys on väärä. Ainut pieni asia minkä keksin on se, että mahdollisesti, eli oman oletukseni mukaan
for i in lista print(i)
tulostaa suoraan listan mitä avaa.readlines() tulostaisi niin, että lista olisi ainoastaan variable tuon kutsumiselle. Haluaisiko joku auttaa ja kertoa missä on vika, koska minulla ei ole mitään ideaa?
.sort() Laittaa alkiolistan järjestykseen arvojen mukaisesti. Järjestys määräytyy merkkien ASCII-arvon mukaisest
on ainut mitä mainitaan koko asiasta koko minun kurssimateriaalissani joten oletan, että ongelma jossain muualla kuin siinä.
Kiitos avusta jo etukäteen
Ongelmana on, että
lista = [avaa.read()]
muodostaa listan, jossa on yhtenä merkkijonona koko tiedoston sisältö (eli tässä tapauksessa kaikki sanat rivinvaihdoin erotettuina). Koska listalla on vain yksi merkkijono, sen järjestämisellä ei ole vaikutusta.
Ratkaisu on kirjoittaa tämän sijasta esim.
lista = avaa.readlines()
jolloin listalle tulee jokainen tiedoston rivi omana merkkijonona.
Ehkä parempi tapa on
lista = [x.strip() for x in avaa.readlines()]
joka tekee muuten saman kuin äskeinen koodi, mutta poistaa samalla jokaisen rivin lopusta rivinvaihdon.
Miten/miksi rivinvaihtomerkin poistaminen vaikuttaa .sort-toimintoon?
En saanut millään toimimaan tuota. Ei tulostanut mitään, ainoastaan sanan "lapio\n" jos käytin .readline() tai jos käytin .readlines() kaikki sanat muodossa x\n ilman rivivaihtoja.
Olen oppinut parhaiten näkemällä toimivan koodin, koska siitä nään mikä toiminto tai koodin osa tekee mitäkin joten jos olisi mahdollista voisitko postata täydellisen koodin miten itse tekisit sen? Ongelma tässä itseopiskelukurssissa on se, että ei ole ketään keneltä kysyä "virallisesti" apua jos kohtaan tehtävissä ongelman vaan pitää jäädä junnaamaan samaa tehtävää moneksi moneksi tunniksi, koska en voi hypätä seuraavaan tehtävään.
jogi kirjoitti:
Miten/miksi rivinvaihtomerkin poistaminen vaikuttaa .sort-toimintoon?
Ei se (olennaisesti) vaikutakaan. Lähinnä tulostukseen, että tuleeko sieltä sitten "lapio" vai "lapio\n"
Ja eikös tuossa nyt käytännössä annettu toimiva koodi, jos omasta koodistasi piti peräti yhtä riviä muuttaa ja Antti kertoi mikä se voisi olla. Ainakin itsellä toimii niin kuin pitääkin:
avaa = open("sanoja.txt","r") lista = [x.strip() for x in avaa.readlines()] lista.sort() print("Sanat laitettuna aakkosjärjestykseen:") for i in lista: print(i)
Grez kirjoitti:
jogi kirjoitti:
Miten/miksi rivinvaihtomerkin poistaminen vaikuttaa .sort-toimintoon?
Ei se (olennaisesti) vaikutakaan. Lähinnä tulostukseen, että tuleeko sieltä sitten "lapio" vai "lapio\n"
Ja eikös tuossa nyt käytännössä annettu toimiva koodi, jos omasta koodistasi piti peräti yhtä riviä muuttaa ja Antti kertoi mikä se voisi olla. Ainakin itsellä toimii niin kuin pitääkin:
avaa = open("sanoja.txt","r") lista = [x.strip() for x in avaa.readlines()] lista.sort() print("Sanat laitettuna aakkosjärjestykseen:") for i in lista: print(i)
Minun moka. Luulin, että nuo "X" osat vaativat, että lisään jonkun variablen tilalle.
Mitä nuo osat "X" edes tekevät tuossa koodissa? Strip on komento mitä koko kurssimateriaalissa ei edes opeteta niin sen käyttäminen on myös siitä syystä hyvin haparoivaa.
Kiitos molemmille avusta. Voi olla, että tulen kohta kysymään miten toimin kun pitää tallentaa tiedostoon bittiarvoina ja avata se myöhemmin ja ottaa tiedot sisältä ihan perus merkkeinä.
Antin koodissa x on muuttuja aivan kuten i omassasi. Veikkaan, että koodissa näytti oudolta siinä käytetty list comprehension -rakenne. Listan voisi luoda myös tavallisella for-silmukalla.
lista = [] for rivi in avaa.readlines(): sana = rivi.strip() lista.append(sana)
Aihe on jo aika vanha, joten et voi enää vastata siihen.