Seite 1 von 1

Fakultät berechnen, Schleifenfehler

Verfasst: Sonntag 26. Februar 2017, 17:55
von Mio
Hallo Python-Gemeinde.
vorab, ich bin kein Schüler oder Informatikstudent, sondern einfach privat am Programmieren interessiert und habe mich vorgestern durchgerungen damit anzufangen und mich für Python entschieden.
Ich arbeite mich nun durch das offene Handbuch von Peter Kaiser und Johannes Ernesti, welches ich zur freien Verfügung fand.

Bei der persönlichen Ausarbeitung eines Beispiels zu Schleifen, mit dem Inhalt der Fakultätsberechnung, komm ich partout nicht weiter:
Das Programm will mir meine Faukltät einfach nicht berechnen..

Anbei mein Code, würde mich freuen wenn sich wer von euch durchringen könnte, mir zu erklären warum das nicht funktioniert..

Code: Alles auswählen

# Fakultätsberechnung
print "ich berechne dir, wenn du willst, die Fakultaet einer beliebigen Zahl!"
print "Beenden des Programms durch Eingabe der Ziffer 0"
zahl = 1
ergebnis = 1
while True:
    zahl = input("Zahl eingeben: ")
    ausgang = zahl
    if isinstance(zahl, basestring):
        print "Bitte eine Zahl eingeben"
        continue
    if zahl < 0:
        print "Fakultäten negativer Zahlen können nicht berechnet werden!"
        continue
    if zahl == 0:
        break
    while zahl > 0:
        ergebnis = ergebnis * zahl
        zahl = zahl - 1
    print "Ergebnis: Die Fakultaet von", ausgang, "ist: ",zahl
Lg,
Mio

Re: Fakultät berechnen, Schleifenfehler

Verfasst: Sonntag 26. Februar 2017, 18:43
von __deets__
Was passiert denn? Das solltest du schon noch beschreiben.

Re: Fakultät berechnen, Schleifenfehler

Verfasst: Sonntag 26. Februar 2017, 18:51
von nezzcarth
Na ja, du lässt dir in der letzten Zeile die falsche Variable ausgeben ;)

Ansonsten gäb' es noch zwei, drei Verbesserungsvorschläge. Für Zuweisungen nach dem Muster x = x <OPERATOR> y gibt es
in Python Kurzschreibweisen (x += 2, x *= 2, …). Die Typprüfung finde ich etwas ungewöhnlich. Ein gängiges Idiom wäre meines Wissens, die Eingabe einfach in einem try except-Block in einen integer zu konvertieren. Die While-Schleife könnte man durch eine for Schleife ersetzen (for i in range(zahl, 0, -1)). Du modifizierst außerdem die eingegebene Zahl. Das würde ich nicht machen; die Variable 'ausgang' kannst du trotzdem einsparen.

Re: Fakultät berechnen, Schleifenfehler

Verfasst: Sonntag 26. Februar 2017, 19:56
von Sirius3
@Mio: Variablen sollte man erst initialisieren, wenn man sie auch braucht. Dann erlebt man auch keine Unangenehmen Überraschungen und man merkt, dass ›zahl = 1‹ überflüssig ist. ›input‹ sollte man nicht verwenden, sondern ›raw_input‹ und die Eingabe danach explizit konvertieren. So wie jetzt, ist es relativ unwahrscheinlich, dass jemand tatsächlich einen String eingibt. ›continue‹ sollte man sparsam verwenden. Stattdessen wäre eine Funktion besser, die exakt die gewünschte Eingabe per return zurückgibt und sonst einfach in einer Endlosschleife bleibt.

Re: Fakultät berechnen, Schleifenfehler

Verfasst: Montag 27. Februar 2017, 10:09
von bwbg
Das von Dir verwendete Buch (Galileo) ist allerdings mit Vorsicht zu genießen (Python 2.5 ist ein wenig ... alt) und wenn Du zum Kapitel über Klassen kommst, such Dir was anderes:

Die offizielle Python-Dokumenation auf python.org oder die deutsche Übersetzung dieser sind m. E. sehr gut. Wirklich weitergeholfen haben mir aber auch die zahlreichen Forenbeiträge hier.

Lass Deinen Code hier komplett auseinander nehmen und freue Dich, wenn er durchfällt => Lerneffekt.

Zu Deinem Programm:

Funktionen - Auch wenn es wahrscheinlich noch nicht Thema war, helfen Funktionen wirklich weiter. Die Fakultät lässt sich prima als (echte) Funktion schreiben und im Programm verwenden. Vor allem kann man diese im Interpreter testen, bevor man das komplette Programm laufen lassen will/muss.