Syntax error in simplen Code ?

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.
Antworten
Budi
User
Beiträge: 7
Registriert: Montag 28. Februar 2011, 21:33

Hey Leute.
Bin neu in Sachen Python und versuche mich grade an einem kleinem Taschenrechner.
Ich weiß nicht was daran falsch ist aber anscheinend habe ich einen Syntax-Fehler,wo ich keinen erkennen kann.

Code: Alles auswählen

#Kleiner Taschenrechner
ergebnis = 0

Print "Hallo"

zahl1 = int(raw_input("Bitte gebe deine erste Zahl ein: "))
zahl2 = int(raw_input("Bitte gebe deine zweite Zahl ein: "))

opp = raw_input("Gebe einen Opperatoren ein: ")

if opp == "+":
    ergebnis = zahl1 + zahl2
    elif opp == "-":
    ergebnis = zahl1 - zahl2
    elif opp == "*":
    ergebnis = zahl1 * zahl2
    elif opp == "/":
    ergebnis = zahl1 / zahl2

Print "Dein Ergebnis ist gleich: ", ergebnis
Der Fehler liegt schon bei den Anführungszeichen nach dem Hallo.
Könnt ihr mir da weiterhelfen ?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

In [1]: Print "Hallo"
------------------------------------------------------------
   File "<ipython console>", line 1
     Print "Hallo"
                 ^
SyntaxError: invalid syntax


In [2]: print "Hallo"
Hallo
Gross- und Kleinschreibung ist nunmal wichtig.
0x1cedd1ce
User
Beiträge: 31
Registriert: Sonntag 3. Oktober 2010, 12:21

hast du python 3 oder 2?
bei python3 musst du print("Hallo") schreiben.
Budi
User
Beiträge: 7
Registriert: Montag 28. Februar 2011, 21:33

cofi hat geschrieben:

Code: Alles auswählen

In [1]: Print "Hallo"
------------------------------------------------------------
   File "<ipython console>", line 1
     Print "Hallo"
                 ^
SyntaxError: invalid syntax


In [2]: print "Hallo"
Hallo
Gross- und Kleinschreibung ist nunmal wichtig.
oha.ich bin es leider von blitzbasic gewohnt print großzuschreiben :oops:
BlackJack

@Budi: So wie der Quelltext aussieht, solltest Du vielleicht auch noch mal über die Einrückung der ``elif``-Zeilen nachdenken.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Budi hat geschrieben:oha.ich bin es leider von blitzbasic gewohnt print großzuschreiben :oops:
Verzage nicht, benutze Python 3.2 oder schreibe bei Python 2.7 am Anfang jeder Datei "from __future__ import print_function" und dann kannst du einfach einmal "Print = print" hinschreiben und fortan brauchst du dich nicht mehr umgewöhnen, sondern kannst "Print('Hallo, Welt')" (jeweils ohne " aber mit Klammern) benutzen. Oder aber, du lässt den Finger doch von der SHIFT-Taste :)

Stefan
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sma, das meinst du doch hoffentlich nicht erst... :shock:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Budi
User
Beiträge: 7
Registriert: Montag 28. Februar 2011, 21:33

So.Hab den Code etwas überarbeitet.Ich möchte keinen neuen Thread aufmachen also frag ich nochmal hier.
Ist der Code für den Anfang nicht schlecht ? Mit den Wissen aus ByteOfPython Kapitel 1-6.

Code: Alles auswählen

#Kleiner Taschenrechner

#--------------------------
ergebnis = 0
weiter = True
#--------------------------

print "Hallo"

while weiter:
    zahl1 = float(raw_input("Bitte gebe deine erste Zahl ein: "))
    zahl2 = float(raw_input("Bitte gebe deine zweite Zahl ein: "))
    opp = raw_input("Gebe einen Opperatoren ein: ")

    if opp == "+":
            ergebnis = zahl1 + zahl2
    elif opp == "-":
            ergebnis = zahl1 - zahl2
    elif opp == "*":
            ergebnis = zahl1 * zahl2
    elif opp == "/":
            ergebnis = zahl1 / zahl2

    print ""
    print "Dein Ergebnis ist gleich: ", ergebnis
    print ""
    
    nochmal = raw_input("Noch eine Rechnung ? y/n ")

    if nochmal == "y":
        weiter = True
    elif nochmal == "n":
        weiter = False

    print ""
Hab das mit den leeren print anweisungen nur aus "schönheit" gemacht wenn das ok ist ?
Verzage nicht, benutze Python 3.2 oder schreibe bei Python 2.7 am Anfang jeder Datei "from __future__ import print_function" und dann kannst du einfach einmal "Print = print" hinschreiben und fortan brauchst du dich nicht mehr umgewöhnen, sondern kannst "Print('Hallo, Welt')" (jeweils ohne " aber mit Klammern) benutzen. Oder aber, du lässt den Finger doch von der SHIFT-Taste :)

Stefan
Ach nee.Ich bleib jetzt erstmal bei 2.7. Ich weiß garnicht was ein Anfänger mit 3.2 anfangen soll.Das ist ja doch etwas anders und die meisten Bücher/Tutorials sind noch nicht bei 3.2 denke ich
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Es ist ein guter Anfang. Nun solltest du richtig weitermachen: Trenn den Code in Logik und Darstellung/Ein- und Ausgabe.
Dir ist ja schon aufgefallen, dass die `print`-Anweisungen irgendwie deplaziert sind, mit der Trennung konzentrieren sie sich wenigstens nur an einem Fleck.

Code: Alles auswählen

 if opp == "+":
    ergebnis = zahl1 + zahl2
elif opp == "-":
    ergebnis = zahl1 - zahl2
elif opp == "*":
    ergebnis = zahl1 * zahl2
elif opp == "/":
    ergebnis = zahl1 / zahl2
Kann man z.B. so schreiben:

Code: Alles auswählen

import operator
def eval_op(op, a, b):
    fun = {'+' : operator.add,
           '-' : operator.sub,
           '*' : operator.mul,
           '/' : operator.div}[op]
    return fun(a, b)
Im Forum duerften noch viele weitere Taschenrechner rumschwirren.
Budi
User
Beiträge: 7
Registriert: Montag 28. Februar 2011, 21:33

cofi hat geschrieben:Es ist ein guter Anfang. Nun solltest du richtig weitermachen: Trenn den Code in Logik und Darstellung/Ein- und Ausgabe.
Dir ist ja schon aufgefallen, dass die `print`-Anweisungen irgendwie deplaziert sind, mit der Trennung konzentrieren sie sich wenigstens nur an einem Fleck.

Code: Alles auswählen

 if opp == "+":
    ergebnis = zahl1 + zahl2
elif opp == "-":
    ergebnis = zahl1 - zahl2
elif opp == "*":
    ergebnis = zahl1 * zahl2
elif opp == "/":
    ergebnis = zahl1 / zahl2
Kann man z.B. so schreiben:

Code: Alles auswählen

import operator
def eval_op(op, a, b):
    fun = {'+' : operator.add,
           '-' : operator.sub,
           '*' : operator.mul,
           '/' : operator.div}[op]
    return fun(a, b)
Im Forum duerften noch viele weitere Taschenrechner rumschwirren.
Der 2te Code enthält ja eine Array würde ich spontan sagen oder ?.Ich geh erstmal nach dem Buch vor.Den Code versteh ich aber schon etwas.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nein, das ist ein Dictionary, das den Operator die entsprechende Funktion zuordnet.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Code: Alles auswählen

    print ""
    print "Dein Ergebnis ist gleich: ", ergebnis
    print ""
kann man auch so schreiben:

Code: Alles auswählen

print '\nDein Ergebnis ist gleich: \n'
Ein '\n' innerhalb einer print-Anweisung bewirkt einen Zeilenumbruch.

Die if-Konstruktion

Code: Alles auswählen

    if nochmal == "y":
        weiter = True
    elif nochmal == "n":
        weiter = False
lässt sich ebenfalls vereinfachen:

Code: Alles auswählen

if nochmal in 'nN':
    weiter = False
Es muss ja nur dann reagiert werden, wenn der Nutzer ein 'n' oder ein 'N' eingibt. Somit ist jede andere Abfrage an dieser Stelle nicht wichtig. Ich würde allerdings die Schleife ganz ohne 'weiter' machen und die Abfrage, ob weitergemacht werden soll, gleich in die Schleife einbeziehen:

Code: Alles auswählen

choice = ' '
while choice not in 'nN':
    ...
    ...
    choice = raw_input('Noch eine Rechnung (y/n)? ')
Gruß
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Antworten