Disclaimer. Jos Python ei kiinnosta, poistu äkkiä. Tämä teksti ei tästä parane.
Koodauskouluni on edennyt siihen pisteeseen, että olen valmis silpomaan valtimoni auki muovilusikalla. Auttakaa naista mäessä: superjumalan koodaustaitoni on ruosteessa.
Bugi on jossain rivillä 37 (ja todennäköisesti muuallakin). Missä hiivatissa se vika piilee? Aloittelijan silmä ei keksi.
(EOT:hen on viime aikoina tullut nörtähtäviä aiheita. Sori siitä.)
Heippa! Sinulla näyttää olevan ylimääräinen sisennys rivistä 36 eteenpäin, se saattaa rikkoa koodisi. Kannattaa tulevaisuudessa näissä kysymyksissä laittaa koodi tekstinä eikä kuvana, niin mahdolliset debuggaajat voivat ajaa koodia itsekin 🙂
Kiitokset avusta! Facebookin puolellakin vinkattiin samaa, ja se tosiaan oli vian syy.
Tavallaan lohduttavaa, että komennoissa ei ollut vikaa. Jatkossa osaan hoksata tuon sisennysasian paremmin.
En oo kauheesti Pythonia koodannu, mutta siinähän on nuo sisennykset merkittäviä. Näyttää että riviltä 37 eteenpäin on turhaan sisennetty tota koodia.
Hauska tehtävä!
En ole Pythonia aikoihin harrastanut, mutta nopea kommentti.
Sisennysten korjauksen lisäksi: rivi 9 lienee ylimääräinen ja print-syntaksi ehtolauseen sisällä kannattaa tarkistaa (rivi 38 jne.).
Auttaa muuten kummasti Python-koodausta, kun pistää editorista white spacen näkyväksi. Hyviä editoreita Python-koodaukseen ovat mm. Sublime Text ja Notepad++. Molemmista löytyy tuo välilyöntien ja tabulaattori-merkkien visualisointi. Sublime Textistä löytyy lisäksi syntaksin korostus, mikä on oikein mukava ominaisuus :).
notepad++ myös korostaa automaattisesti kun muistaa nimetä koodin .py päätteellä.
Mä olen käyttänyt Trinketiä, mutta tuo kuva oli kyllä tosi onneton monessakin suhteessa.
yak python. Kuten aiemman kommentoijat sanoi toi sisennys. Jos se ei auta niin sit tulee sellanen mieleen että sisältääköhän toi vastaus2 muuttuja myös rivivaihdon jolloin vertaus palautaa false.
Pari sanaa koodista. En ole pythonguru, mutta siltikin:
1. Virhe on aika todennäköisesti sisennysvirhe eli python antaa jotain tälläistä:
IndentationError: unexpected indent
Eli epäilee yllättää sisentämistä.
2. Toinen nörtti etsii helpommin virhettä, kun saa koodin lisäksi myös virheilmoituksen.
3. Tuo if – elif – else rakenne on ihan turhan monimutkainen. Ei tuo menisi miehelle läpi eli sitä pitää yksinkertaistaa.
Sinulla on valinnat vastaus_joo ja vastaus_ei. Ja annat joka tapauksessa ykkösestä eroavassa tilanteessa tuon vastaus_ei ratkaisun eli mikset kirjottaisi yksinkertaisimmin.
if vastaus == ”1”:
[sisennys]print(vastaus_joo[randint(0,2)]
else:
[sisennys]print(vastaus_ei[randint(0,2)]
Eli yksinkertaistat koodia hiukan ja vähennät virhemahdollisuuksia.
4. Ja sitten vielä. Tuolla on muuttujat vastaus ja vastaus2 ja et tarvitse kuin yhtä muuttujaa koko hommassa. Kun vastaus on on saanut ean kerran arvon, niin näytät jotain. Sitten teet uuden kysymyksen ja talletat senkin vastauksen siihen vastaus- muuttujaan. Sen arvo muuttuu ja et tarvitse tuota toista eli vastaus2- muuttujaa mihinkään.
Jotain tuollaista ja siistiä koodia. Tuollaista en ole ikinä nähnyt koodaamista opettelevalta nuorelta.
Kari…
File ”koodittesti.py”, line 7
if vastaus == ”1”:
^
IndentationError: unexpected indent
Eli aina kun kysyy muilta neuvoa, niin tuo virheilmoitus on hyvä näyttää. Osassa kielissä virhe saattaa löytyä yllättävän kaukaa virheilmoituksen kertomasta paikasta.
Kiitos avusta Kari!
Ensi kerralla liitän tosiaan virheilmoituksen mukaan. Tällä kertaa se oli vain jotain siihen suuntaan, että ”virhe rivillä 37”. Sen enempää en saanut Trinketiltä vinkkiä.
Miksi ihmeessä et opettele Python 3.5:llä?
Sillä voisit kirjoittaa ohjelman vaikka näin:
from random import randint
def main():
vastaus = input(”Kysy yksisarviselta ratkaisu ongelmaasi: ”)
ennustuksia = (”Vastaus löytyy yksisarvisista. ”
”Osta minulta ykisarviskurssi 300 eurolla.”,
”Vastaus tulee aikanaan, kunhan uskot yksisarvisiin, ”
”etkä ota rokotuksia.”,
”Yksisarvinen antaa vastauksen, kun olet valmis. ”
”Nyt häntätupsuamuletti vain 20 euroa.”)
vastaus_joo = (”Vaahtokarkki DumDum”,
”Happy Tonto Refined”,
”Kermainen Jelly-Bunny”)
vastaus_ei = (”From-California.to-lieksa”,
”hittituote Bling-Bling”,
”Pajavasara Ruiskaunokki”)
print(ennustuksia[randint(0, 2)])
print(”nJokaisella sielulla on yksi suojelusyksisarvinen.”)
vastaus2 = input(”Haluatko kuulla oman yksisarvisesi nimen?”
”n1 = oi kyllä haluan”
”n2 = Kiitos ein”)
if vastaus2 == ”1”:
yksisarvisen_nimi = vastaus_joo[randint(0, 2)]
print(”Oman yksisarvisesi nimi on {}”.format(yksisarvisen_nimi))
else:
yksisarvisen_nimi = vastaus_ei[randint(0, 2)]
print(”No, kerron sen silti. ”
”Oman yksisarvisesi nimi on {}”.format(yksisarvisen_nimi))
main()
Kannattaa käyttä jotain kehitysympäristöä apuna. Esim. PyCharm varoittaa tavallisista virheistä ja sisennysvirheet näkee nopeasti. Lisäksi automaattitäydennys ja listaukset omista muuttujista ovat kiva apu.
Kiitos kommentista! Mä olen niin aloittelija, että opin vain sitä, mitä mulle opetetaan. En osaa itse vielä valita kieltä saati sen kehitysversiota. 🙂
Kannattaa pyytää opetus Pythonin versioon 3. Se on kivempi kuin käyttämäsi versio 2, vaikka erot jäävätkin vähäisiksi.
Lisää edellisen kommentin koodiin vielä blogin hukkaamat sisennykset. Sisennyksistä ei sentään Python 3:ssa olla vielä luovuttu.