Kesällä aloittamani Python-opassarjan kirjoitus on edennyt melko mukavasti. Opassarjan ensimmäinen osio, joka käsittelee ohjelmoinnin perusasioita Python-kielellä, on nyt valmis julkisesti arvioitavaksi ennen julkaisua.
Osa 1 - Ensimmäinen ohjelma
Osa 2 - Tiedon käsittely
Osa 3 - Ehtorakenteet
Osa 4 - Toistorakenteet
Osa 5 - Listojen käsittely
Osa 6 - Merkkijonot
Osa 7 - Omat funktiot
Osa 8 - Tiedostot ja virheet
Osa 9 - Standardikirjasto
Osa 10 - Tietorakenteet
Osa 11 - Alkeita edemmäs
Osa 12 - Yhteenveto
Opassarjan kohderyhmä ovat nuoret henkilöt, jotka eivät ole aiemmin ohjelmoineet. Tarkoituksena on ennen kaikkea opettaa ohjelmoinnin yleisiä periaatteita, minkä vuoksi Python-kielen jotkin yksityiskohdat jäävät vähälle.
Toivon kaikilta asiasta kiinnostuneilta kriittistä palautetta, jotta tästä tulisi mahdollisimman hyvä opassarja.
Esimerkiksi:
* Mitä tärkeitä asioita oppaista vielä puuttuu?
* Mitkä asiat on selitetty epäselvästi?
* Missä kohdissa pitäisi olla kuvia?
* Voisiko jonkin esimerkin korvata paremmalla?
Olen kiitollinen kaikesta palautteesta suurista ja pienistä asioista.
Erinomainen opassarjan aloitus! Pikaisesti vilkaistuna tuli mieleen, että virheenkäsittelyn voisi tehdä enemmän ns. Pythonmaisesti ja ottaa mukaan myös else
- ja finally
-lohkot, esim.:
lainaus:
Seuraava ohjelma varautuu virhetilanteeseen:
# -*- coding: latin-1 -*- try: tiedosto = open("uolevi.txt", "r") print tiedosto.readline() tiedosto.close() except IOError: print "Tiedostovirhe!"
=>
# -*- coding: latin-1 -*- try: tiedosto = open("uolevi.txt", "r") except IOError: print "Tiedostovirhe!" else: # tänne mennään, jos virhettä ei tullut print tiedosto.readline() finally: # tämä suoritetaan aina (nk. siivous) tiedosto.close()
Hyvältä oppaalta vaikuttaa. Tässä pikaisesti katsottuna pari minusta epäselvästi ilmaistua juttua.
https://www.ohjelmointiputka.net/oppaat/opas.
Funktion tehtävänä on muuttaa sille annettu tieto uuteen muotoon. Tässä tapauksessa funktio len ottaa vastaan minkä tahansa merkkijonon ja palauttaa sen merkkien määrän.
(kuva)
Vastaavasti funktio raw_input ottaa vastaan merkkijonon, näyttää sen käyttäjälle ja palauttaa sitten käyttäjän kirjoittaman merkkijonon.
Minusta tuo kursivoimani sanallinen kuvaus, joka viittaa lähinnä sivuvaikutuksettomaan funktioon, on hämäävä, koska Pythonin funktiot, kuten tuo välittömästi seuraava raw_input
eivät välttämättä sovi tähän muottiin.
https://www.ohjelmointiputka.net/oppaat/opas.
Totuusarvo on joko tosi (True) tai epätosi (False): jokin asia pitää paikkansa tai ei pidä paikkaansa. Esimerkiksi "pistemäärä on yli 1000" ja "pelaajan nimi ei ole Einari" ovat totuusarvoja, jotka voivat olla ohjelman yhdellä suorituskerralla tosia ja toisella suorituskerralla epätosia.
Kyseisillä lauseilla toki on tietyisä tilanteissa tietty totuusarvo, mutta lauseen kutsuminen totuusarvoksi (ehkä teknisessä hengessä: r-value tyyppiä boolean) ei välttämättä selkeytä selitettävää asiaa.
trilog kirjoitti:
Pikaisesti vilkaistuna tuli mieleen, että virheenkäsittelyn voisi tehdä enemmän
Harkitsen vielä, pitäisikö virheenkäsittelystä kertoa enemmän.
os kirjoitti:
Minusta tuo kursivoimani sanallinen kuvaus, joka viittaa lähinnä sivuvaikutuksettomaan funktioon, on hämäävä
os kirjoitti:
lauseen kutsuminen totuusarvoksi - - ei välttämättä selkeytä selitettävää asiaa
Olet oikeassa, muutan nämä kohdat paremmiksi.
Minusta tämä on hieno opas. Toivottavasti tästä on hyötyä monelle, valitettavasti tätä ei ollut silloin, kun itse opettelin nämä asiat. =)
Oppaiden julkaisu on lähellä, mutta vielä ehtii lähettää palautetta!
Osassa "Alkeita edemmäs" annetaan seuraava esimerkki:
def kaanna2(mjono): merkit = list(mjono) merkit.reverse() return "".join(merkit)
Mielestäni esimerkki on jotenkin ei-pythonmainen - tyylikkäämpää olisi käyttää tässä Pythonin käänteisiteraattoria, jottei tarvitse erikseen muuntaa merkkijonosta listaksi.
def kaanna2(mjono): return "".join(reversed(mjono))
Tosin tämäkään ei pärjää nopeudessa tai tiiviydessään viimeiselle esimerkille (kaanna4).
Vastaavasti anagrammi-esimerkissäkin (https://www.ohjelmointiputka.net/oppaat/opas.
def jarjesta(sana): return "".join(sorted(sana))
Harkitsin noita funktioita monta kertaa, mutta päädyin kuitenkin pidempään toteutukseen, koska se on mielestäni selkeämpi. Lisäksi funktiossa kaanna2 on ajatus ongelman palauttamisesta toiseen ongelmaan, johon tunnetaan ratkaisu.
Onko vastauksia oppaassa olleisiin tehtäviin? Olen kiristellyt hampaitani 'Osa 6' - sivun 10. tehtävässä enkä saa millään aikaiseksi ohjelmaa joka toimisi eripituisien sanojen kanssa. :I
Ehkä pienet vihjeet voisivat olla paikallaan noihin tehtäviin, sekä mahdollisuus tarkistaa vastaukset jostakin. Myös sellainen voisi toimia hyvin että harjoitustehtäviä ripoteltaisiin siten että jokaisen uuden asian esittelyn jälkeen olisi muutama herjoitustehtävä. Näin pääsisi heti kokeilemaan ja omaksumaan esitellyn asian ilman että vastaluettu uusi asia jäisi muistinvaraiseksi.
Muutoin opas on ollut mainio, sopivan asiapitoista tekstiä jota on helppo ymmärtää sillä oppaassa on selitetty asioita 'maallikkotermein' ilman hienoja vierassanoja. Kiitokseni oppaan kirjoittajalle, olen innokkaasti niitä lukien ottanut ensiaskeleitani Pythoniin ja ohjelmoinnin maailmaan. :)
e: Lisätty sisältöä.
Minusta taas monet noista tehtävistä ovat luonteeltaan niin yksinkertaisia, että vastaus on välttämättä keksittävä itse: vaikka valmiin ratkaisun helposti ymmärtäisi, siitä ei kuitenkaan ehkä oppisi, miten tulokseen on päästy. Juuri tuo kuviotehtävä (osa 6, tehtävä 10) on tällainen. (Ratkaisu ei muuten vaadi silmukkaa ihmeempiä ohjelmointitaitoja, vaan kaikki selviää matemaattisesti etäisyyksiä laskemalla. Aloita siitä, että tulostat neliön, ja lisää sitten neliöön keskipiste eri merkillä.)
Oops, tarkoitin siis tehtävää 9 enkä tehtävää 10. Eli tehtävä jossa pitää etsiä kahdesta sanasta pisin yhteinen osa.
Samoin itse myös ajattelin että parhaiten oppii kun etsii ratkaisut/kokeilee itse, mutta jostain syystä en vain löydä ratkaisua tuohon tehtävään, muut olivat ihan kohtuullisen helposti ratkaistavissa.
Yksinkertainen (mutta hidas!) ratkaisu on etsiä yhden sanan kaikkia erilaisia osia toisesta.
for (mahdolliset alkukohdat): for (mahdolliset loppukohdat): onko tämä pätkä toisessa sanassa?
Kun tuon saa toimimaan, voi miettiä tehokkaampia ratkaisuja.
Kiitos, tuosta sain kaipaamani vinkin ja lopulta ahaa-elämyksen. :) Yritin aiemmin jokseenkin aivan liian monimutkaista lähestymistapaa tuohon tehtävään.
Kieltämättä olisi hyvä, jos saatavilla olisivat tehtävien ratkaisut. Niistä voisi oppia hyödyllisiä asioita, vaikka tehtävän olisi onnistunut ratkaisemaan itsekin. Tehtävien lisääminen pienissä erissä kaikkiin oppaisiin on myös harkinnan arvoinen ehdotus.
Aihe on jo aika vanha, joten et voi enää vastata siihen.