Seite 1 von 1

Welche der ausdrücke ist falsch bzw. unzulässig??

Verfasst: Montag 30. Januar 2006, 12:41
von Jimm
Hallo,
bin ein neuling in python und brauche für die lösung eines problems eure hilfe. Welche der folgenden Ausdrücke sind syntaktisch zulässig für den Abstrakten Datentyp Stack? Welchen Wert haben die korrekten Ausdrücke?
meinem python buch nach sind die ausdrücke zumindest korrekt konstruiert, allerdings hilft mir das nicht so sehr viel weiter.
ich hoffe in dieser hinsicht mal auf eure hilfe.

TIA

jimm

ÜBERSICHT DER AUSDRÜCKE:

• top(pop(push(e,push(e,create()))))
• top(push(e,isempty(create())))
• isempty(push(h,pop(push(g,push(f,push(e,create()))))))
• isempty(top(e,push(e,create())))
• top(pop(push(e,top(create()))))
• isempty(top(h,pop(push(e,push(e,create())))))

Verfasst: Montag 30. Januar 2006, 13:19
von modelnine
Humm??

Wenn alle Ausdrücke korrekt geklammert sind, dann sind sie alle korrekte Ausdrücke (könnten also mit eval() ausgewertet werden). Nur hängt die Auswertung natürlich vom Kontext ab, sprich in einem Standardkontext würdest Du bei allen einen NameError bekommen weil die Namen nicht definiert sind.

Aber: wahrscheinlich versteh ich Deine Frage nicht, sie ist viel zu undeutlich gestellt...

Und ganz davon abgesehen: hier in diesem Forum auch völlig falsch. Probiers das nächste mal unter "Allgemeines."

--- Heiko.

Verfasst: Montag 30. Januar 2006, 14:27
von Jimm
@ heiko:

es ist die vrs. für eine aufgabe, die ich lösen muss. die klammersetzung habe ich überprüft genauso, wie "struktur". ich komme nur nicht dahinter was falsch ist. habe auch schon im aspn cookbook nachgeschlagen, aber ich finde keinen anhaltspunkt.

Verfasst: Montag 30. Januar 2006, 14:37
von modelnine
Hmm... Es kommt ein bißchen drauf an was pop und push machen, ob das ganze läuft oder nicht. Der Datentyp Stack ist im Prinzip in Python durch eine Liste zu repräsentieren, und Du kannst das ganze so implementieren dass push und pop jeweils ein Element der Liste entfernen oder hinzufügen, und als Ausdruckswert die Liste selbst haben, top sollte für meinen Geschmack als Wert das Letzte Element des Stacks haben, und isempty prüft ob die Liste (also der Stack leer ist oder nicht).

Du solltest also mit folgendem Code die Dinge ausführen können:

Code: Alles auswählen

def create():
    return []

def push(v,l):
    if not isinstance(l,list):
        raise TypeError, "Probiere auf nicht-stack zu pushen"
    l.append(v)
    return l

def pop(l):
    if not isinstance(l,list):
        raise TypeError, "Probiere von nicht-stack zu poppen"
    l.pop()
    return l

def top(l):
    if not isinstance(l,list):
        raise TypeError, "Probiere oberstes Element von nicht-stack zu finden"
    return l[-1]

def isempty(l):
    if not isinstance(l,list):
        raise TypeError, "Probiere nicht-stack auf Inhalt zu prüfen"
    return l == []

e, f, g, h = None, None, None, None
Wenn ein TypeError kommt ist der Ausdruck fehlerhaft, wenn nicht, dann ist er okay. Den ganzen rest überlass ich Dir; vor allen Dingen zu verstehen warum ich die Methoden so wie oben implementiert habe. ;-)

--- Heiko.

Verfasst: Montag 30. Januar 2006, 14:55
von XT@ngel
Falsches Forum :wink:
MfG
Andreas

Verfasst: Montag 30. Januar 2006, 15:01
von Jimm
@ heiko.

vielen dank für die hilfe. ich habe jetzt eine idee woran es liegt. bzw. wie ich weiter mache. es war nicht wie ich gedacht habe irgendwelche dreher oder fehlende parameter in den zeilen, sondern gewissermaßen die logik bzw. die ausführung auf den stack. werde mich gleich mal ranmachen und weiter schrauben. danke für die schnelle hilfe.

jimm

Verfasst: Montag 30. Januar 2006, 15:04
von modelnine
Jupp. Wenn Du meine Methoden anwendest sind nur zwei der Ausdrücke (wenn ich das richtig gesehen habe) definiert, also auswertbar.

--- Heiko.