Fehler bei der Funktion raw_input()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Thundersystem
User
Beiträge: 10
Registriert: Montag 8. Juni 2009, 09:45
Kontaktdaten:

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]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo Thundersystem, willkommen im Forum,

Nun, das steht doch da. Du hast falsch eingerückt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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.
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

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.
Zuletzt geändert von Dill am Montag 8. Juni 2009, 10:39, insgesamt 1-mal geändert.
http://www.kinderpornos.info
yantur_v_b
User
Beiträge: 17
Registriert: Montag 25. Mai 2009, 10:32

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): ')
Benutzeravatar
Thundersystem
User
Beiträge: 10
Registriert: Montag 8. Juni 2009, 09:45
Kontaktdaten:

Ahh, ok besten Dank, funzt perfekt.

Naja ich komme von Perl, und da bin ich mit meiner Schreibweise etwas "freier" :D
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

sowas hab ich mir schon gedacht.
ich denke das offizielle tutorial ist besser für dich geeignet:

http://docs.python.org/tutorial/
http://www.kinderpornos.info
Benutzeravatar
Thundersystem
User
Beiträge: 10
Registriert: Montag 8. Juni 2009, 09:45
Kontaktdaten:

@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;?
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

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.
http://www.kinderpornos.info
Benutzeravatar
Thundersystem
User
Beiträge: 10
Registriert: Montag 8. Juni 2009, 09:45
Kontaktdaten:

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!
Benutzeravatar
Klip
User
Beiträge: 98
Registriert: Donnerstag 10. August 2006, 20:39

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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Aber besser ein ``elif`` statt dem ``else if``.
Benutzeravatar
Thundersystem
User
Beiträge: 10
Registriert: Montag 8. Juni 2009, 09:45
Kontaktdaten:

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 ;)
Benutzeravatar
jonas
User
Beiträge: 156
Registriert: Dienstag 9. September 2008, 21:03

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' 
Benutzeravatar
Thundersystem
User
Beiträge: 10
Registriert: Montag 8. Juni 2009, 09:45
Kontaktdaten:

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$
dahaze
User
Beiträge: 75
Registriert: Freitag 13. März 2009, 10:57
Wohnort: im Schwabenland

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
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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
Zuletzt geändert von cofi am Montag 8. Juni 2009, 13:32, insgesamt 2-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Antworten