Seite 1 von 1

Syntax error in simplen Code ?

Verfasst: Montag 28. Februar 2011, 21:37
von Budi
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 ?

Re: Syntax error in simplen Code ?

Verfasst: Montag 28. Februar 2011, 21:40
von cofi

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.

Re: Syntax error in simplen Code ?

Verfasst: Montag 28. Februar 2011, 21:41
von 0x1cedd1ce
hast du python 3 oder 2?
bei python3 musst du print("Hallo") schreiben.

Re: Syntax error in simplen Code ?

Verfasst: Montag 28. Februar 2011, 21:43
von Budi
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:

Re: Syntax error in simplen Code ?

Verfasst: Montag 28. Februar 2011, 22:23
von BlackJack
@Budi: So wie der Quelltext aussieht, solltest Du vielleicht auch noch mal über die Einrückung der ``elif``-Zeilen nachdenken.

Re: Syntax error in simplen Code ?

Verfasst: Dienstag 1. März 2011, 13:43
von sma
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

Re: Syntax error in simplen Code ?

Verfasst: Dienstag 1. März 2011, 14:16
von Leonidas
sma, das meinst du doch hoffentlich nicht erst... :shock:

Re: Syntax error in simplen Code ?

Verfasst: Dienstag 1. März 2011, 15:35
von Budi
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

Re: Syntax error in simplen Code ?

Verfasst: Dienstag 1. März 2011, 15:47
von cofi
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.

Re: Syntax error in simplen Code ?

Verfasst: Dienstag 1. März 2011, 15:53
von Budi
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.

Re: Syntax error in simplen Code ?

Verfasst: Dienstag 1. März 2011, 16:03
von cofi
Nein, das ist ein Dictionary, das den Operator die entsprechende Funktion zuordnet.

Re: Syntax error in simplen Code ?

Verfasst: Mittwoch 2. März 2011, 11:23
von mutetella

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