Harmonische Reihe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
zeta3010
User
Beiträge: 2
Registriert: Donnerstag 5. Dezember 2013, 12:14

Hi alle zusammen, ich soll ein Programm schreiben was mir die harmonische Reihe aus
(1/n) von 1 bis unendlich berechnet bzw das Ergebniss der Summe von 1 bis n ausgibt, wobei n eingelesen werden soll

Ich möchte das über eine while Schleife machen, die folgendermaßen aussieht:

Code: Alles auswählen

print"________________________________________________________\n"
print"Rechner der harmonischen Reihe des Quotienten (1/n) fuer n gegen unendlich."
print"________________________________________________________\n"

eingabe=input()

i=1.0

while i<=eingabe:
  i=i/(i+1.0)
  print "",i
Nur gibt er mir eine endlosschleife mit lauter 0en aus.
Wo ist der Fehler?

Danke schonmal für die Hilfe
Zuletzt geändert von zeta3010 am Donnerstag 5. Dezember 2013, 12:40, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@zeta3010: an Deiner Stelle würde ich mir zuerst anschauen was 1/2, 1/3, 1/4, ... ergibt, wenn Du das in Python eingibst und mich dann daran erinnern, dass es so etwas wie Ganzzahldivision gibt. Wenn Du dann Floatingpoint-Division durchgeführt hast, kannst Du Dich fragen, warum i nie größer als 1 geschweige denn »eingabe« werden kann.
zeta3010
User
Beiträge: 2
Registriert: Donnerstag 5. Dezember 2013, 12:14

an Deiner Stelle würde ich mir zuerst anschauen was 1/2, 1/3, 1/4, ... ergibt
Ok hab ich versucht, hab

Code: Alles auswählen

i= 1/4 ersetzt durch i=1.0/4.0
Jetzt gibt er mir allerdings als Endlosschleife laute Dezimalstellen aus.
BlackJack

@zeta3010: Dann denk mal über den letzten Satz von Sirius3 nach.

Sonstiges: Verwende in Python 2 kein `input()`. Damit wird die Eingabe als Python-Ausdruck ausgewertet und der Anwender kann damit nahezu beliebigen Code ausführen. Was auch der Grund ist warum eine Fehlerbehandlung sehr schwer ist, weil im Grunde *alles* passieren kann. Lass den Benutzer mit `raw_input()` eine Zeichenkette eingeben und wandle die gezielt in einen Typ um mit dem Du weiterarbeiten willst. Zum Beispiel in ein `int` wenn es eine ganze Zahl sein soll.

Dann würde ich Funktionen empfehlen die das Problem in Unterprobleme aufteilen. Zum Beispiel könnte man eine Generatorfunktion schreiben (Stichwort ``yield``) welche die Quotienten als endlosen Iterator liefert. Da kann man dann über die ersten `N` (Eingabe des Benutzers) Elemente iterieren, beziehungsweise sich einen solchen Iterator mit der passenden Funktion aus dem `itertools`-Modul erstellen. Und für das Aufsummieren gibt es auch schon eine fertige Funktion in Python.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Allein der Umstand, dass der Nenner immer um eins größer ist, als der Zähler (wobei der Zähler bei eins beginnt), sollte zu denken geben: Wie soll eine solche Gleichung jemals größer als eins werden, geschweige denn größer als die Eingabe (die ja vermutlich ganzzahlig ist)?
Antworten