Token Error:

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.
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

Dienstag 17. Januar 2006, 15:43

Hallo,

mein erster Beleg wurde dank euch, ohne Beanstandungen angenommen.
Nun habe ich aber wieder ein Problem mit einem neuen Programm:
Ich erhalte jedesmal, den mir unbekannten, Fehler: Token Error: EOF in multi- line statement

Code: Alles auswählen

from math import *

#dbuchenholz==7,86
#deisen==0,7
#dgold==19,3
#dwasser==1
#dbeton==1,8
#dglas==2,6

Stoffe = ["Buche", "Eisen", "Gold", "Wasser", "Beton", "Glas"]
Dichten = [7.86, 0.7, 19.3, 1, 1.8, 2.6]

Koerper = ["Zylinder", "Kugel", "Kegel", "Quader", "Pyramide"]

def zylinder(zradius,zhoehe):
    zv = pi*zradius*zrradius*zhoehe
    zo = 2*pi*zradius*(zradius+zhoehe)
    zm = []
    for i in Dichten:
        zm.append(zv / 1000 * i)
    return zv,zo,zm
        
def kugel(kuradius):
    kuv = 4/3*pi*kuradius**3
    kuo = 4*pi*kuradius**2
    kum = []
    for i in Dichten:
        kum.append(kuv / 1000 * i)
    return kuv,kuo,kum

def kegel(keradius,keseite,kehoehe):
    kev = pi*1/3*keradius**2*kehoehe
    keo = pi*keradius*(keradius*keseite)
    kem = []
    for i in Dichten:
        kem.append(kev / 1000 * i)
    return kev,keo,kem

def quader(qaseite,qbseite,qcseite):
    qv=qaseite*qbseite*qcseite
    qo=2(qaseite*qbseite+qaseite*qbseite+qbseite*qcseite)
    qm = []
    for i in Dichten:
        qm.append(qv / 1000 * i)
    return qv,qo,qm

def pyramide(pgrundseite,phoehe,pseitenhoehe)
    pv=1/3*pgrundseite**2*phoehe
    pq=pgrundseite*(pgrundseite+2*pseitenhoehe)
    pm = []
    for i in Dichten:
        pm.append(pv / 1000 * i)
    return pv,pq,pm

#-----------------------------------------------------------------------------
wdh=true
while wdh=true:
    k=input("Welcher Körper soll berechnet werden? (Zylinder,Kugel,Kegel,Pyramide,Quader)")
    if k='Zylinder':
        zradius=input("Gib den Radius des Zylinders ein: ")
        zhoehe=input("Gib die Höhe des Zylinders ein: ")
        zberechnung=zylinder(zradius,zhoehe)
        print("Zylindervolumen= %.2f\nZylinderoberfläche= %.2f)" %(zberechnung[0],zberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"

    elif k='Kugel':
        kuradius=input("Gib den Radius der Kugel ein: ")
        kuberechnung=kugel(kuradius)
        print("Kugelvolumen= %.2f/nKugeloberfläche= %.2f)" %(kuberechnung[0],kuberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"
        
    elif k='Kegel':
        keradius=input("Gib den Radius des Kegels ein: ")
        keseite=input("Gib die Seitenlänge des Kegels ein: ")
        kehoehe=input("Gib die Höhe des Kegels ein: ")
        keberechnung=kegel(keradius,keseite,kehoehe)
        print("Kegelvolumen= %.2f/nKegeloberfläche= %.2f)" %(keberechnung[0],keberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"

    elif k='Quader':
        qaseite=input("Gib die Seitenlänge a des Quaders in cm ein: ")
        qbseite=input("Gib die Seitenlänge b des Quaders in cm ein: ")
        qcseite=input("Gib die Seitenlänge c des Quaders in cm ein: ")
        qberechnung=quader(qaseite,qbseite,qcseite)
        print("Quadervolumen= %.2f/nQuaderoberläche= %.2f)" %(qberechnung[0],qberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"      

    elif k='Pyramide':
        pgrundseite=input("Gib die Länge der Grundseite der Pyramide ein: ")
        phoehe=input("Gib die Höhe der Pyramide ein: ")
        pseitenhoehe=input("Gib die Seitenhöhe der Pyramide ein: ")
        pberechnung=pyramide(pgrundseite,phoehe,pseitenhoehe)
        print("Pyramidenvolumen= %.2f/nPyramidenoberfläche= %.2f)" %(pberechnung[0],pberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"

    else print("Wählen Sie einen der 5 Körper und achten Sie auf die Schreibweise")
print("Möchten Sie noch einen Körper berechnen?")
a = raw_input("J/N")
if a != 'J':
    wdh=false
raw_input()
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 17. Januar 2006, 15:50

1. print ist keine Funktion, braucht deswegen auch keine Klammern.

2. Du hast in Deinem Programm einige nicht geschlossene Klammern. Ein TokenError ist der Hinweis darauf dass irgendwo eine offene Klammer nicht geschlossen wird. Suchen kannst Du selber, ich hab sie bei zwei print statements gesehen. ;-)

--- Heiko.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Dienstag 17. Januar 2006, 16:06

Code: Alles auswählen

 k=input("Welcher Körper soll berechnet werden? (Zylinder,Kugel,Kegel,Pyramide,Quader)") 
Das wird auch eine Fehlermeldung ausgeben, wenn ich Kugel eingebe! :wink:
mfg

Thomas :-)
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

Dienstag 17. Januar 2006, 16:12

Die Klammern bei print habe ich weggenommen, aber nach 3maliger Durchsicht, sehe ich keine weiteren offenen Klammern.
Warum gibt es einen Fehler :?

Code: Alles auswählen

  k=input("Welcher Körper soll berechnet werden? (Zylinder,Kugel,Kegel,Pyramide,Quader)")  

Code: Alles auswählen

from math import *

#dbuchenholz==7,86
#deisen==0,7
#dgold==19,3
#dwasser==1
#dbeton==1,8
#dglas==2,6

Stoffe = ["Buche", "Eisen", "Gold", "Wasser", "Beton", "Glas"]
Dichten = [7.86, 0.7, 19.3, 1, 1.8, 2.6]

Koerper = ["Zylinder", "Kugel", "Kegel", "Quader", "Pyramide"]

def zylinder(zradius,zhoehe):
    zv = pi*zradius*zrradius*zhoehe
    zo = 2*pi*zradius*(zradius+zhoehe)
    zm = []
    for i in Dichten:
        zm.append(zv / 1000 * i)
    return zv,zo,zm
        
def kugel(kuradius):
    kuv = 4/3*pi*kuradius**3
    kuo = 4*pi*kuradius**2
    kum = []
    for i in Dichten:
        kum.append(kuv / 1000 * i)
    return kuv,kuo,kum

def kegel(keradius,keseite,kehoehe):
    kev = pi*1/3*keradius**2*kehoehe
    keo = pi*keradius*(keradius*keseite)
    kem = []
    for i in Dichten:
        kem.append(kev / 1000 * i)
    return kev,keo,kem

def quader(qaseite,qbseite,qcseite):
    qv=qaseite*qbseite*qcseite
    qo=2(qaseite*qbseite+qaseite*qbseite+qbseite*qcseite)
    qm = []
    for i in Dichten:
        qm.append(qv / 1000 * i)
    return qv,qo,qm

def pyramide(pgrundseite,phoehe,pseitenhoehe)
    pv=1/3*pgrundseite**2*phoehe
    pq=pgrundseite*(pgrundseite+2*pseitenhoehe)
    pm = []
    for i in Dichten:
        pm.append(pv / 1000 * i)
    return pv,pq,pm

#-----------------------------------------------------------------------------
wdh=true
while wdh=true:
    k=input("Welcher Körper soll berechnet werden? (Zylinder,Kugel,Kegel,Pyramide,Quader)")
    if k='Zylinder':
        zradius=input("Gib den Radius des Zylinders ein: ")
        zhoehe=input("Gib die Höhe des Zylinders ein: ")
        zberechnung=zylinder(zradius,zhoehe)
        print "Zylindervolumen= %.2f\nZylinderoberfläche= %.2f" %(zberechnung[0],zberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"

    elif k='Kugel':
        kuradius=input("Gib den Radius der Kugel ein: ")
        kuberechnung=kugel(kuradius)
        print "Kugelvolumen= %.2f/nKugeloberfläche= %.2f" %(kuberechnung[0],kuberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"
        
    elif k='Kegel':
        keradius=input("Gib den Radius des Kegels ein: ")
        keseite=input("Gib die Seitenlänge des Kegels ein: ")
        kehoehe=input("Gib die Höhe des Kegels ein: ")
        keberechnung=kegel(keradius,keseite,kehoehe)
        print "Kegelvolumen= %.2f/nKegeloberfläche= %.2f" %(keberechnung[0],keberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"

    elif k='Quader':
        qaseite=input("Gib die Seitenlänge a des Quaders in cm ein: ")
        qbseite=input("Gib die Seitenlänge b des Quaders in cm ein: ")
        qcseite=input("Gib die Seitenlänge c des Quaders in cm ein: ")
        qberechnung=quader(qaseite,qbseite,qcseite)
        print "Quadervolumen= %.2f/nQuaderoberläche= %.2f" %(qberechnung[0],qberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"      

    elif k='Pyramide':
        pgrundseite=input("Gib die Länge der Grundseite der Pyramide ein: ")
        phoehe=input("Gib die Höhe der Pyramide ein: ")
        pseitenhoehe=input("Gib die Seitenhöhe der Pyramide ein: ")
        pberechnung=pyramide(pgrundseite,phoehe,pseitenhoehe)
        print("Pyramidenvolumen= %.2f/nPyramidenoberfläche= %.2f" %(pberechnung[0],pberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"

    else print("Wählen Sie einen der 5 Körper und achten Sie auf die Schreibweise")

print "Möchten Sie noch einen Körper berechnen?"
a = raw_input("J/N")
if a != 'J':
    wdh=false
raw_input()
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Dienstag 17. Januar 2006, 16:17

du solltest dir auch den unterschied zwischen = und == angucken :)
= ist eine zuweisung, z.b.

Code: Alles auswählen

test_variable = 5
bei If anweisungen willst du aber ja nichts zuweisen
sondern abfragen ob der wert von a dem wert von b entspricht.

Code: Alles auswählen

if a == b
desweiteren fehlt in deinem code auch ein : hinter einer funktion.
*edit*
puh wenn man sich den code mal genauer anguckt wird einem
ja ganz anders :D ist nicht böse gemeint, aber da ist bissl mehr falsch^^
*nochmal edit*
also paar tips, guck dir unterschiede zwischen raw_input() und input()
an. schau mal genau auf die variablen bzw funktionsnamen die du verwendest, da wird oft was vertauscht. dann willst du auf listeinträge mit einem string anstatt nem wert zugreifen -> Stoffe

gruss prostel
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 17. Januar 2006, 16:45

Und vor allen Dingen: ich find immer noch 'ne offene Klammer die nicht geschlossen wird...

<edit>
Und Du hast beim Copy-Paste von Zylinder zu den folgenden einiges nicht korrigiert...

Am besten schreibst Du das Programm noch mal neu und guckst Dir vorher an dass man auch Funktionen in ein dict() tun kann, und überlegst dann noch mal neu...
</edit>

--- Heiko.
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

Dienstag 17. Januar 2006, 16:54

Es wird jetzt kein Fehler mehr angezeigt. Das Programm startet aber nicht :shock: :?
Was ist mit Stoff falsch?
Danke

Code: Alles auswählen

from math import *

#dbuchenholz==7,86
#deisen==0,7
#dgold==19,3
#dwasser==1
#dbeton==1,8
#dglas==2,6

Stoffe = ["Buche", "Eisen", "Gold", "Wasser", "Beton", "Glas"]
Dichten = [7.86, 0.7, 19.3, 1, 1.8, 2.6]

Koerper = ["Zylinder", "Kugel", "Kegel", "Quader", "Pyramide"]

def zylinder(zradius,zhoehe):
    zv = pi*zradius*zradius*zhoehe
    zo = 2*pi*zradius*(zradius+zhoehe)
    zm = []
    for i in Dichten:
        zm.append(zv / 1000 * i)
    return zv,zo,zm
        
def kugel(kuradius):
    kuv = 4/3*pi*kuradius**3
    kuo = 4*pi*kuradius**2
    kum = []
    for i in Dichten:
        kum.append(kuv / 1000 * i)
    return kuv,kuo,kum

def kegel(keradius,keseite,kehoehe):
    kev = pi*1/3*keradius**2*kehoehe
    keo = pi*keradius*(keradius*keseite)
    kem = []
    for i in Dichten:
        kem.append(kev / 1000 * i)
    return kev,keo,kem

def quader(qaseite,qbseite,qcseite):
    qv=qaseite*qbseite*qcseite
    qo=2(qaseite*qbseite+qaseite*qbseite+qbseite*qcseite)
    qm = []
    for i in Dichten:
        qm.append(qv / 1000 * i)
    return qv,qo,qm

def pyramide(pgrundseite,phoehe,pseitenhoehe):
    pv=1/3*pgrundseite**2*phoehe
    pq=pgrundseite*(pgrundseite+2*pseitenhoehe)
    pm = []
    for i in Dichten:
        pm.append(pv / 1000 * i)
    return pv,pq,pm

#-----------------------------------------------------------------------------
wdh=true
while wdh=true:
    k=raw_input("Welcher Körper soll berechnet werden? (Zylinder,Kugel,Kegel,Pyramide,Quader)")
    if k=='Zylinder':
        zradius=input("Gib den Radius des Zylinders ein: ")
        zhoehe=input("Gib die Höhe des Zylinders ein: ")
        zberechnung=zylinder(zradius,zhoehe)
        print "Zylindervolumen= %.2f\nZylinderoberfläche= %.2f" %(zberechnung[0],zberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"

    elif k=='Kugel':
        kuradius=input("Gib den Radius der Kugel ein: ")
        kuberechnung=kugel(kuradius)
        print "Kugelvolumen= %.2f/nKugeloberfläche= %.2f" %(kuberechnung[0],kuberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"
        
    elif k=='Kegel':
        keradius=input("Gib den Radius des Kegels ein: ")
        keseite=input("Gib die Seitenlänge des Kegels ein: ")
        kehoehe=input("Gib die Höhe des Kegels ein: ")
        keberechnung=kegel(keradius,keseite,kehoehe)
        print "Kegelvolumen= %.2f/nKegeloberfläche= %.2f" %(keberechnung[0],keberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"

    elif k=='Quader':
        qaseite=input("Gib die Seitenlänge a des Quaders in cm ein: ")
        qbseite=input("Gib die Seitenlänge b des Quaders in cm ein: ")
        qcseite=input("Gib die Seitenlänge c des Quaders in cm ein: ")
        qberechnung=quader(qaseite,qbseite,qcseite)
        print "Quadervolumen= %.2f/nQuaderoberläche= %.2f" %(qberechnung[0],qberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"      

    elif k=='Pyramide':
        pgrundseite=input("Gib die Länge der Grundseite der Pyramide ein: ")
        phoehe=input("Gib die Höhe der Pyramide ein: ")
        pseitenhoehe=input("Gib die Seitenhöhe der Pyramide ein: ")
        pberechnung=pyramide(pgrundseite,phoehe,pseitenhoehe)
        print("Pyramidenvolumen= %.2f/nPyramidenoberfläche= %.2f" %(pberechnung[0],pberechnung[1])
        for i in zberechnung[2]:
            print "Masse bei ", Stoffe[i], " beträgt ", i, " kg"

    else print("Wählen Sie einen der 5 Körper und achten Sie auf die Schreibweise")

print "Möchten Sie noch einen Körper berechnen?"
a = raw_input("J/N")
if a != 'J':
    wdh=false
raw_input()
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Dienstag 17. Januar 2006, 17:16

Thyestes hat geschrieben:Was ist mit Stoff falsch?
Wahrscheinlich die Tatsache, dass du das Array Stoffe genannt hast...
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 17. Januar 2006, 17:18

Unabhängig davon dass Du immer noch nicht die Copy-Paste-Fehler korrigiert hast mußt Du auch noch mal den Loop genau angucken um die Dichten anzuzeigen (den Du 5 mal duplizierst, warum?!). Der ist alles andere als korrekt.

--- Heiko.
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

Dienstag 17. Januar 2006, 17:31

Sorry, ich kenne mich kaum aus in Python. Was ist ein Copy-Paste Fehler?
Was ist ein loop?
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 17. Januar 2006, 17:44

Code: Alles auswählen

# -*- coding: iso-8859-15 -*-

from math import pi

Koerper = {"Zylinder":(("Radius","Höhe"), # War falsch.
                       lambda r, h: (pi*h*r**2,pi*r*(2*h+r))),
           "Kugel":(("Radius,"), # Richtig.
                    lambda r: (pi*4/3*r**3,4*pi*r**2)),
           "Kegel":(("Radius","Seite","Höhe"), # Richtig??? Nicht nachgeguckt.
                    lambda r, s, h: (pi*1/3*h*r**2,pi*s*r**2)),
           "Quader":(("Seite A","Seite B","Seite C"), # War falsch.
                     lambda a, b, c: (a*b*c,2*(a*b+a*c+b*c))),
           "Pyramide":(("Grundseite","Höhe","Seitenhöhe"), # Richtig.
                       lambda g, h, s: (h*1/3*g**2,g*(g+2*s)))}

Dichten = {"Buche":7.86,"Eisen":0.7,"Gold":19.3,"Wasser":1,"Beton":1.8,
           "Glas":2.6}

def doCalc():
    while True:
        k = raw_input("Koerper auswählen ("+",".join(Koerper)+",Ende): ")
        if "ende".startswith(k.lower()):
            break
        try:
            valdescs, f = Koerper[k.capitalize()]
        except KeyError:
            print "Körper nicht definiert. Bitte korrekte Körperform angeben."
            continue
        print
        vals = []
        for valdesc in valdescs:
            while True:
                v = raw_input("Bitte "+valdesc+" in cm eingeben: ")
                try:
                    vals.append(float(v))
                    break
                except ValueError:
                    print "Ungültige Eingabe, bitte wiederholen."
        vol, oberfl = f(*vals)
        print
        print "Volumen des Körpers:", vol, "cm**3"
        print "Oberfläche des Körpers:", oberfl, "cm**2"
        print
        for ddesc, dval in Dichten.iteritems():
            print "Gewicht bei %s: %s kg" % (ddesc,vol*dval/1000)
        print

if __name__ == "__main__":
    doCalc()
Das mal so als Anreiz und einige Beispiele wie man Dinge besser machen kann... Wenn das Problem Hausaufgaben waren würde ich das obige nicht abgeben, weil da einige Sprachkonstrukte verwendet werden die wie's scheint Du noch nicht kennst. Das könnte auffallen. ;-)

--- Heiko.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Dienstag 17. Januar 2006, 17:46

Deine Fehler haben nichts damit zu tun, das du noch nicht so gut bist, das sind pure leichtsinnsfehler.

Code: Alles auswählen

 k=input("Welcher Körper soll berechnet werden? (Zylinder,Kugel,Kegel,Pyramide,Quader)")  
wird einen Fehler ausgeben, da input ausschließlich für Zahlen bestimmt ist! :wink:
mfg

Thomas :-)
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Dienstag 17. Januar 2006, 17:48

wird einen Fehler ausgeben, da input ausschließlich für Zahlen bestimmt ist!
Was ausgemachter Bullshit ist, weil input() einfach probiert im momentanen Kontext das zu evaluieren was ihm gegeben wird.

Bedeutet im Endeffekt sowas wie:

Code: Alles auswählen

def input(msg):
    return eval(raw_input(msg))
Und da geht noch 'ne ganze Menge mehr als nur Zahlen, wie zum Beispiel auch im momentanen Kontext definierte Namen, Liste, Tupel, alles was halt eine Python-Expression ist.

--- Heiko.
Thyestes
User
Beiträge: 23
Registriert: Dienstag 10. Januar 2006, 22:38

Dienstag 17. Januar 2006, 17:49

habe doch raw_input dastehen
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Dienstag 17. Januar 2006, 18:22

Musst aber nicht gleich zu jemanden sagen, das er bullshit redet, nur weil er sich mal irrt! :wink:
mfg

Thomas :-)
Antworten