Es gibt eine Reihe von Problemen mit Ihrem Code.
Zunächst ist Ihre Typüberprüfung fraktal falsch (es wird immer falscher, je tiefer man hineinblickt). Sie sollten wahrscheinlich isinstance(a, (int, float)) and isinstance(b, (int, float))
anstatt der rückwärts Zeug, die Sie jetzt haben. Momentan prüfen Sie, ob a
und b
der Klasse type
entsprechen (dies ist der Typ von int
und float
). Sie haben auch die Ausdruck Gruppierung falsch, wie der and
-Operator bindet enger als die or
s tun (Ihr Code tut a or (b and c) or d
, wenn Sie wollten (a or b) and (c or d)
).
Als nächstes definieren Sie neue Funktionen tun Sie Ihre Stromberechnung, aber Sie rufen sie nie von der äußeren power
-Funktion (damit sie nie etwas tun). Wenn Sie die inneren Funktionen behalten wollen, brauchen Sie irgendwo einen Anruf return power(a, b)
. Sie können jedoch die Dinge vereinfachen, indem Sie die inneren Funktionen loswerden und die Berechnung direkt in einigen verschachtelten Schleifen durchführen. Verschachtelte Funktionen sind nur sehr selten erforderlich.
Sie tun auch nicht, was Sie im Fehlerfall tun sollen. Sie sollen raise
eine TypeError
, nicht eine Zeichenfolge zurückgeben.
Und schließlich, ich denke, Sie haben das ganze Problem viel komplizierter als nötig gemacht. Ihre Aufgabe lautet, nicht **
zu verwenden, aber ich vermute, dass Sie weiterhin die Operatoren *
und +
verwenden dürfen. Ich würde einfach etwas in einer Schleife multiplizieren, anstatt alles von Grund auf neu zu definieren (was nicht einmal funktioniert, da Ihre add
Funktion +=
benötigt).
Ein weiterer Hinweis: Die Problemaussage sagt nicht, ob b
(der Exponent) immer eine ganze Zahl sein wird, oder ob es einen Bruchteil haben kann. Die Behandlung von Teilexponenten ist viel schwieriger als die Behandlung ganzzahliger Exponenten. Daher würde ich Ihren Lehrer fragen, ob das tatsächlich Teil der Aufgabe ist, bevor Sie viel Zeit darauf verwenden, es zu lösen. Es kann sein, dass Sie sowohl int
als auch float
Typen unterstützen müssen, aber selbst wenn b
ein Float ist, wird es immer noch eine ganze Zahl sein.
Sie können also '*' oder '**' nicht verwenden? – Carcigenicate
Und wenn die Ausgabe falsch ist, müssen Sie es debuggen. Sie haben 3 innere Funktionen definiert. Welche gibt schlechte Ergebnisse zurück? – Carcigenicate
es passiert nicht die if-Bedingung für die Funktionen – wapadunk