Seite 1 von 2

Fehler bei der Funktion raw_input()

Verfasst: Montag 8. Juni 2009, 09:56
von Thundersystem
Morgen,

ich bin ich Sachen Python noch ein blutiger Anfänger (bin seit ca ner guten Stunde dabei in Python zu scripten).

Und naja ich gehe nach diesem http://www.wspiegel.de/pykurs/python05.htm Kurs vor, nur naja also dene ihr Lösungsweg gefällt mir irgendwie so gar nicht.

Mein Code sieht so aus:

Code: Alles auswählen

#!/usr/bin/python 

#Sternchenkasten mit Programmname
print '\n'
print ' '*8+'*'*19
print ' '*8+'*''Das Wetterscript *'
print ' '*8+'*'*19

#Usereingaben entgegennehmen
print 'Nun bitte folgende Eigaben machen:'
print 'Luftdruck (steigt oder faellt):',
	luftdruck=raw_input()
print 'Lufttemperatur (steigt oder fällt)',
	lufttemperatur=raw_input()
Allerdings spuckt der mir dabei folgenden Fehler aus:

andreas@thundersystem:~/Python$ ./test.py
File "./test.py", line 12
luftdruck=raw_input()
^
IndentationError: unexpected indent
andreas@thundersystem:~/Python$


Danke im Voraus

Greetz
Thundersystem ;)[/code]

Verfasst: Montag 8. Juni 2009, 10:21
von Leonidas
Hallo Thundersystem, willkommen im Forum,

Nun, das steht doch da. Du hast falsch eingerückt.

Verfasst: Montag 8. Juni 2009, 10:27
von BlackJack
@Thundersystem: Das hat nichts mit der Funktion `raw_input()` zu tun, bei jeder anderen käme genau die gleiche Meldung. Nämlich das die Einrückung da so nicht gültig ist. Richtige Einrückung ist in Python wichtig.

Für den Sternenkasten mit dem Programmnamen, würde ich als Übung übrigens vorschlagen irgendwann mal eine Funktion zu schreiben, die beliebige Zeichenketten in so einen Kasten setzen kann. Dann hat man etwas wiederverwendbares und nicht soviele magische, konstante Zahlen im Programm.

Verfasst: Montag 8. Juni 2009, 10:28
von Dill
ausserdem nimmt print nur expressions, keine zuweisungen als parameter.

Code: Alles auswählen


bar = 1
print "foo", bar  #foo 1
print "foo",
    bar #syntax error (indentation)
print "foo", \
    bar #foo 1 ('\' setzt zeile fort)
print "foo", bar = 1 #syntax error, zuweisung hier nicht erlaubt.

Verfasst: Montag 8. Juni 2009, 10:36
von yantur_v_b
Mit "luftdruck=raw_input()" setzt Du (zumindest nach der Programmlogik von Python) nicht die alte Zeile fort. Die nächste Zeile muß also wieder auf derselben Einrückung beginnen, auf der "print..." begonnen hat:

Code: Alles auswählen

print 'Luftdruck (steigt oder faellt):',
luftdruck=raw_input()
raw_input erlaubt auch, den Text in die Klammern zu 'verpacken', dann wird das Ganze etwas kürzer:
luftdruck=raw_input('Luftdruck (steigt oder faellt): ')

Verfasst: Montag 8. Juni 2009, 10:50
von Thundersystem
Ahh, ok besten Dank, funzt perfekt.

Naja ich komme von Perl, und da bin ich mit meiner Schreibweise etwas "freier" :D

Verfasst: Montag 8. Juni 2009, 10:53
von Dill
sowas hab ich mir schon gedacht.
ich denke das offizielle tutorial ist besser für dich geeignet:

http://docs.python.org/tutorial/

Verfasst: Montag 8. Juni 2009, 11:01
von Thundersystem
@Dill

Jo, vielen Dank, aber mein 9t Klass Realschulenglisch lässt doch sehr zu wünschen übrig.

Oder gibts das auch auf deutsch?

Und ehm gleich noch ne Frage hintendran, gibt es bei Python soetwas wie use strict;?

Verfasst: Montag 8. Juni 2009, 11:10
von birkenfeld
Thundersystem hat geschrieben:@Dill

Jo, vielen Dank, aber mein 9t Klass Realschulenglisch lässt doch sehr zu wünschen übrig.

Oder gibts das auch auf deutsch?
Ja, aber noch nicht vollständig, es wird gerade von der Community hier übersetzt: http://tutorial.pocoo.org/
Und ehm gleich noch ne Frage hintendran, gibt es bei Python soetwas wie use strict;?
Nein. Da Pythons Scoping ganz anders funktioniert als das von Perl, bringt das nichts.

Verfasst: Montag 8. Juni 2009, 11:20
von Dill
dein englisch wird aber dann auch kaum besser werden im letzten jahr. und wenn du dich ernsthaft mit einer sprache und softwareentwicklung im allgemeinen auseinandersetzen willst kommst du um englisch nicht drumrum. das tutorial ist in sehr einfachem englisch gehalten (wie die allermeisten englischen fachbücher, finde englische fachliteratur inzwischen einfacher zu verstehen als deutsche).

nach der schule konnte ich auch kein englisch (immer ne 4 oder 5) bin dann mit babylon durch die texte gepflügt. (tool das dir bei rechtsclick auf ein wort dieses übersetzt). ist am anfang nervig aber geht eigentlich ganz schnell bis du dich in den texten zurechtfindest. am anfang kommt man sich natürlich total verloren vor.

Verfasst: Montag 8. Juni 2009, 11:47
von Thundersystem
Hhm, joar mal sehen also ich gehe jetzt erst mal noch das jetzige Tutorial durch, danach das deutsch übersetzte, naja soweit es eben übersetzt ist.

Und dann mal sehen, aber ich habe mittlerweile leider schon wieder das nächste Problem, und zwar, macht macht meine Bedingung nicht das was sie tun soll:

Code: Alles auswählen

#!/usr/bin/python 

#Sternchenkasten mit Programmname
print '\n'
print ' '*8+'*'*19
print ' '*8+'*''Das Wetterscript *'
print ' '*8+'*'*19
print '\n'

#Deklarierte Texte
text1="Pack die Badehose ein, nimm dein kleines Schwesterlein ..."
text2="Hei, hei, hei, so eine Schneeballschlacht ..."
text3="I'm singing in the rain ..."
text4="Leise rieselt der Schnee ..."

#Usereingaben entgegennehmen
print 'Nun bitte folgende Eigaben machen:'
print 'Luftdruck (steigt oder faellt):',
luftdruck=raw_input()
print 'Lufttemperatur (steigt oder faellt)',
lufttemperatur=raw_input()
print 'Jahreszeit (Sommer oder Winter)',
jahreszeit=raw_input()

#IF-Bedingungen
if ( luftdruck=='steigt' and lufttemperatur=='steigt' and jahreszeit=='Sommer' ):
	print text1

if ( luftdruck=='steigt' and lufttemperatur=='faellt' and jahreszeit=='Winter' ):
	print text2

if ( luftdruck=='faellt' and lufttemperatur=='faellt' and jahreszeit=='Sommer' ):
	print text3

if ( luftdruck=='faellt' and lufttemperatur=='steigt' and jahreszeit=='Winter' ):
	print text4

else:	
	print 'Der Computer kann mit deinen suboptimalen Angaben nichts anfangen' 
Also das Script funzt schon, und wenn die jew. Parameter vom User richtig dementsprechend eingegeben werden, spuckt er auch den Inhalt von text(1,2,3,4) aus.

Nur hängt er das was in "else" steht jedesmal noch mit unten dran.

Blöderweise weis ich jetzt aber nicht woran das liegt!

Verfasst: Montag 8. Juni 2009, 11:49
von Klip

Code: Alles auswählen

if x == y:
  # mach was
else if x != y:
  # mach was anderes
else:
  # wenn gar nichts davon zutrifft...
Anstelle eines einfachen if's solltest du da eher ein 'else if' verwenden.

Verfasst: Montag 8. Juni 2009, 12:00
von cofi
Aber besser ein ``elif`` statt dem ``else if``.

Verfasst: Montag 8. Juni 2009, 12:07
von Thundersystem
Hhm, sorry, aber ich verstehe das nun nicht ganz, wo muss das elif hin?

also wenn ich die if's durch ein else if bzw elif ersetze, kommt n Fehler.

Also ich weis ja jetzt auch nicht weiter, die Bedingungen in Python sind i-wie etwas seltsam, naja oder gewöhnungsbedürftig, Ansichtssache!

Greetz
Andreas ;)

Verfasst: Montag 8. Juni 2009, 12:14
von jonas

Code: Alles auswählen

#IF-Bedingungen
if ( luftdruck=='steigt' and lufttemperatur=='steigt' and jahreszeit=='Sommer' ):
	print text1

elif ( luftdruck=='steigt' and lufttemperatur=='faellt' and jahreszeit=='Winter' ):
	print text2

elif ( luftdruck=='faellt' and lufttemperatur=='faellt' and jahreszeit=='Sommer' ):
	print text3

elif ( luftdruck=='faellt' and lufttemperatur=='steigt' and jahreszeit=='Winter' ):
	print text4

else:	
	print 'Der Computer kann mit deinen suboptimalen Angaben nichts anfangen' 

Verfasst: Montag 8. Juni 2009, 12:19
von Thundersystem
Hhm, ok dann hatte ich es schon richtig verstanden, aber wie gesagt, es kommt folgender Fehler:

andreas@thundersystem:~/Python$ ./test.py
File "./test.py", line 38
else
^
SyntaxError: invalid syntax
andreas@thundersystem:~/Python$

Verfasst: Montag 8. Juni 2009, 12:21
von dahaze
In dieser Art ist das gemeint:

Code: Alles auswählen

if x == y:
  # mach was
elif x != y:
  # mach was anderes
else:
  # wenn gar nichts davon zutrifft...
Dieses Tutorial ist auch nicht schlecht, ist halt jedoch nur Python 2.5:
http://openbook.galileocomputing.de/python/

Gruß,
Simon

Verfasst: Montag 8. Juni 2009, 12:27
von cofi
dahaze hat geschrieben:Dieses Tutorial ist auch nicht schlecht, ist halt jedoch nur Python 2.5:
http://openbook.galileocomputing.de/python/
Nein! Bitte nicht! Einfach mal im Forum nach Openbook suchen.

Thundersystem lass mal die Klammern weg, denn damit wird der Ausdruck u. U. anders ausgewertet als du denkst und syntaktisch sind sie nicht erforderlich.

Edit: Das übersetzte Kapitel zu Kontrollkonstrukten

Verfasst: Montag 8. Juni 2009, 12:28
von Leonidas
dahaze hat geschrieben:Dieses Tutorial ist auch nicht schlecht, ist halt jedoch nur Python 2.5:
http://openbook.galileocomputing.de/python/
Ähm, eigentlich ist es schon recht schlecht. Hint: Autoren Bücher schreiben lassen die das Thema auch beherrschen.

Verfasst: Montag 8. Juni 2009, 12:28
von EyDu
dahaze hat geschrieben:Dieses Tutorial ist auch nicht schlecht
Naja... doch...

Suche mal hier im Forum nach Galileo Openbook, du wirst genügend Kritik finden.