Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Pythonin kanssa painimista

Sivun loppuun

Skibiliano [29.04.2008 22:44:31]

#

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.

osku91 [29.04.2008 23:07:10]

#

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")

Skibiliano [29.04.2008 23:40:58]

#

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?

pipo [30.04.2008 01:54:24]

#

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.

Skibiliano [30.04.2008 10:55:25]

#

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

Antti Laaksonen [30.04.2008 11:21:35]

#

Sanakirjan määrittelyssä täytyy käyttää aaltosulkuja:

sanat = {'puu':'der Baum', 'joki':'der Fluss', 'taivas':'der Himmel'}

pipo [30.04.2008 14:46:30]

#

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

Skibiliano [01.05.2008 11:22:49]

#

Kiitoksia paljon avusta, Todella auttavia esimerkkejä! Odottelen enemmän python oppaita kyllä Ohjelmointiputkaan.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta