@JuGa2000: Es werden sehr wohl die Fragen nach den Daten ausgegeben und die Antworten entgegen genommen. Und dann läuft Dein Programm in eine Endlosschleife. Das ist sowieso noch unglaublicher Unsinn, den Du da teilweise schreibst. Du denkst ganz offenbar nicht nach sondern schreibst da irgendwas hin und hoffst, dass es das macht was Du gerne hättest. Ohne Rücksicht darauf was es tatsächlich bedeutet was Du schreibst.
Den Fehler mit dem Aufrufen von Tupeln hast Du immer noch drin. Du greifst aus Funktionen auf Namen zu, die nicht als Argumente die Funktion betreten haben. Du hast Schleifen deren Schleifenkörper keinen Einfluss auf die Abbruchbedingung haben. Funktionsaufrufe werden mehrfach gemacht. Wenn falsche Eingabewerte erkannt werden, wird das ausgegeben — die Funktion läuft aber trotzdem weiter. Namen werden an Werte gebunden, und nie wieder verwendet. Dafür versuchst Du auf Namen zuzugreifen, die nie an Werte gebunden wurden. Funktionen bekommen Argumente die nie verwendet werden. Es wird versucht eine Funktion durch eine Zahl zu teilen. Das alles ist semantisch totaler Unsinn.
Du schreibst offenbar auch zu viel ungetestet. Denn viele von den Fehlern die ich beschreibe, hast Du sicher noch nie bemerkt, weil Dein Programm gar nicht erst so weit kommt. Man entwickelt ein Programm nicht, in dem man es erst komplett hin schreibt, und dann erst versucht es auszuführen, sondern Stück für Stück. Mindestens eine Funktion nach der anderen. Und man fängt keine neue Funktion an solange die bisherigen nicht funktionieren.
Man sollte keinen Code auf Modulebene stehen haben, der nicht dazu da ist Konstanten zu definieren. Das was nach Deinen Funktionen steht, sollte also auch in einer Funktion verschwinden. Üblicherweise nennt man die `main()` und ruft sie folgendermassen auf:
Code: Alles auswählen
def main():
print 'blah...'
# Code...
if __name__ == '__main__':
main()
Dann kann man das Modul sowohl ausführen — dann wird die `main()`-Funktion aufgerufen — als auch als Modul importieren. Zum Beispiel in einer interaktiven Python-Shell um die Funktionen einzeln ausprobieren zu können.
Ausserdem kann man mit einer `main()`-Funktion nicht mehr aus Versehen oder aus Bequemlichkeit von anderen Funktionen auf Werte zugreifen, die nicht als Argumente an die Funktionen übergeben wurden.
Von der `input()`-Funktion sollte man in Python 2.x die Finger lassen. Da kann der Benutzer beliebige Python-Ausdrücke eingeben, die dann ausgewertet werden. Das ist eine Sicherheitslücke. Und man kann auch nur sehr schlecht auf Fehleingaben reagieren, weil man theoretisch mit *jeder* Ausnahme rechnen muss.