Seite 1 von 1
Kommastellen
Verfasst: Freitag 12. November 2010, 17:23
von menace
hey zusammen,
ich kann mir vorstellen, dass das hier eine sehr newbie-hafte frage ist aber ich komm einfach nicht drum herum sie zu stellen.
Für nen Auftrag soll ich ein Code schreiben der mir eine Annäherung an die Euler-Zahl gibt:
Code: Alles auswählen
def fak(x):
if x > 1:
return x * fak(x - 1)
else:
return 1
f = [(1/fak(n)) for n in range(20)]
print sum(f)
mein problem dabei ist nur, dass es mir als lösung einfach immer nur eine 2 angiebt. wie kann ich das problem lösen?
ich suche hier nicht leute die mir meine Aufgaben lösen, sondern eine Möglichkeit sie richtig darstellen zu können
danke für Antworten!
greez menace
Re: Kommastellen
Verfasst: Freitag 12. November 2010, 17:33
von bwbg
<jedimindtrick>Du willst Fließkommazahlen verwenden.</jedimindtrick>
Re: Kommastellen
Verfasst: Freitag 12. November 2010, 17:46
von BlackJack
@menace: Und um solchen Fehlern selber auf die Spur zu kommen, hilft es oft auch sich mal die Zwischenergebnisse anzuschauen. Dann hättest Du nämlich nicht gefragt warum am Ende 2 heraus kommt, sondern warum `f` so aussieht wie es aussieht.
Code: Alles auswählen
In [505]: [1 / fak(n) for n in xrange(20)]
Out[505]: [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0L, 0L, 0L, 0L, 0L, 0L, 0L]
Insgesamt kann man das übrigens effizienter als mit Rekursion schreiben. Selbst bei einem iterativen `fak()` könnte man hier noch eine Menge unnötiger Rechenschritte weglassen, wenn man mal überlegt wie die einzelnen, aufeinanderfolgenden Werte sich voneinander unterscheiden.
Re: Kommastellen
Verfasst: Freitag 12. November 2010, 17:56
von menace
@ BlackJack:
ich habe das mit den zwischenergebnissen nicht ganz kappiert.
heisst das ich soll jeden schritt einfach mal im direkten interface eingeben um zu sehen was passiert? oder gibts dazu noch etwas anderes als möglichkeit.
kannst du mir eine idiotensichere anweisung geben? ^^
als Lösung für mein Problem verwend ich jetz mal auf weiteres:
from __future__ import division
Re: Kommastellen
Verfasst: Freitag 12. November 2010, 18:04
von Hyperion
menace hat geschrieben:@ BlackJack:
ich habe das mit den zwischenergebnissen nicht ganz kappiert.
heisst das ich soll jeden schritt einfach mal im direkten interface eingeben um zu sehen was passiert?
Du meinst mit "direktes Interface" einfach eine interaktive Python-Shell? Dann: ja

Zudem sind print-Anweisungen zum Debuggen auch hilfreich, um Fehler bei einem größerem Durchlauf finden zu können (bei einem einfachen Beispiel kann es ja durchaus mal sein, dass durch Zufall das richtige rauskommt, bei einem anderen Initialwert findet man dann aber doch einen Fehler)