Katselin tuossa tuota Oppaat paikassa olevaa Python opasta, latasin uusimman version siitä ja laitoin koneelle, tuota opasta on kyllä hankala tulkita koska tulee tälläsiä tapauksia todella usein.
if x == 1: print 'x on yksi.'
kirjoitin tuota komentoriville.
if x == 1: toimi hyvin
sitten kun kirjoitin
print 'x on yksi.'
tulee tälläinen virhe.
File "<stdin>", line 2 print 'x on yksi.' ^ IndentationError: expected an indented block
Käytän siis versiota
Python 2.5.2.
Sitten se "sanakirja" ei toimi, se valittaa sitä kaksoispistettä joka pitää oppaan mukaan tunkea 'puu':'tree'
While silmukassa se alkaa valittamaan print komennosta virheellä IndentationError: expected an indented block
Lähes kaikki kohdat joissa on Print tai : tulee virhe (paitsi print 'hello world')
EDIT: Niin ja oppaassa jäi vähän epäselväksi mitä tehdään .py tiedostoille, niitä en saa avattua python.exe kautta ja kun painan .py tiedostoa niin se avautuu millisekunniksi ja sulkeutuu samantien.
Tuo "IndentationError: expected an indented block" johtuu varmaankin siitä, että et ole laittanut sisennystä ja kun avaat .py tiedoston niin se sulkeutuu heti ohjelman loputtua, joten kannattaa lisätä sinne loppuun esim. raw_input("Paina enteriä lopettaaksesi")
osku91 kirjoitti:
Tuo "IndentationError: expected an indented block" johtuu varmaankin siitä, että et ole laittanut sisennystä ja kun avaat .py tiedoston niin se sulkeutuu heti ohjelman loputtua, joten kannattaa lisätä sinne loppuun esim. raw_input("Paina enteriä lopettaaksesi")
Opin kyllä enemmän esimerkeillä kuin selittämällä, sain tuon IndentationErrorin korjattua lisäämällä välilyönnin alkuun.
tuo raw_input homma ei toiminut, laitoin
Print "Python hallitsee!"
raw_input("Paina enteriä lopettaaksesi")
sitten avasin sen .py tiedoston ja se sammui taas millisekunnin päästä.
Mitenkäs sitten sen sanakirja pulman kanssa?
IndentationError tarkoittaa tunnistamisvirhettä. Python ei tiedä mihin joku rivi kuuluu eli esim. kuuluuko se if -lauseen toimintoon vai luetaanko rivi if-lauseen toimintojen jälkeen.
expected an indented block tarkoittaa että pythonin mielestä tässä kohdin on yleensä sisennys, kuten esim. if tai while -lauseen jälkeen.
Joskus python änkyttää myös seuraavaa: "IndentationError: unexpected indent", mikä taas tarkoittaa päinvastaista eli "ei tossa mitään sisennystä kuulu olla".
Skibiliano kirjoitti:
sain tuon IndentationErrorin korjattua lisäämällä välilyönnin alkuun.
Sisennykseksi riittää välilyönti, mutta se ei ole käytännöllistä jos haluaa käyttää (copypaste) koodia myöhemmin.
Skibiliano kirjoitti:
valittaa sitä kaksoispistettä joka pitää oppaan mukaan tunkea 'puu':'tree'
Mitä se siitä valittaa? En ole perehtynyt putkan python-oppaaseen mutta sanakirja määritellään tällasesti:
sanakirja = {avain1 : arvo1, avain2 : arvo2}
Arvoparien välikköihin laitetaan kaksoispisteet, tietueitten välikköihin pilkut, koko roskan ympärille aaltosulkeiset. Sitten sanakirjan nimi tallennetaan muuttujaan.
Skibiliano kirjoitti:
Print "Python hallitsee!"
raw_input("Paina enteriä lopettaaksesi")
Kirjoita print Pienellä Peellä. Huomioi näppäimistökartan määrittely, jos käytät skandinaavisia kirjaimia.
En ole kokeillut ohjelman kirjoittamista komentoriville, mutta suosittelen asentamaan python idlen, jonka avulla sisennykset tulee automaattisesti ja käskyt näkyy eri väreillä, mikä nopeuttaa virheiden ettimistä suunnattomasti.
Kiitos pipo,
Oppaassa luki sanakirja näin
sanat = ('puu':'der baum', 'joki':'der fluss', 'taivas':'der himmel')
Ja virhe on Invalid Syntax ja se ^ osoittaa kaksoispistettä.
EDIT:
sanakirja = {avain1 : arvo1} Traceback (most recent call last): Files "<stdin>", line 1, in <module> NameError: name 'arvo1' is not defined sanakirja = [avain1 : arvo1] File "<stdin>" line 1 sanakirja = [avain1 : arvo1] ^ SyntaxError: invalid syntax
Sanakirjan määrittelyssä täytyy käyttää aaltosulkuja:
sanat = {'puu':'der Baum', 'joki':'der Fluss', 'taivas':'der Himmel'}
Skibiliano kirjoitti:
EDIT:
sanakirja = {avain1 : arvo1}
Traceback (most recent call last):
Files "<stdin>", line 1, in <module>
NameError: name 'arvo1' is not defined
Tossa ei kai ole mitään epäselvää? Jos haluat sanakirjan ensimmäisen arvoparin avaimeksi merkkijonon avain1, laita siihen esimerkin
Antti Laaksonen kirjoitti:
sanat = {'puu':'der Baum', 'joki':'der Fluss', 'taivas':'der Himmel'}
mukaisesti ' tai " -merkit.
Jos haluat sanakirjan ensimmäisen arvoparin arvoksi muuttujan arvo1, täytyy muuttuja esitellä ennen sanakirjaa:
arvo1 = 'Tähän joku numero tai merkkijono tai mitä ikinä haluat' sanakirjan_nimi = {'avain1' : arvo1} print sanakirjan_nimi
Kiitoksia paljon avusta, Todella auttavia esimerkkejä! Odottelen enemmän python oppaita kyllä Ohjelmointiputkaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.