Seite 1 von 1
Summe einer Reihe mit Python berechnen
Verfasst: Donnerstag 18. Dezember 2008, 20:51
von Alphatier
Hallo Leute,
ich wollte ein Programm zur Berechnung von Summen von Zahlenreihen programmieren, doch kenne mich relativ wenig mit Python aus. Zunächst einmal habe ich versucht wenigstens eine Folge mit Python darzustellen doch mein Prog klappt irgendwie noch nicht.
Code: Alles auswählen
Code:
#!/usr/bin/python
y=[ ]
eingabe=raw_input("Bitte geben Sie die obere Grenze der Summe ein:")
x=1
while x < eingabe :
a=1/x
y[0:0]=['a']
x=x+1
print y
Damit habe ich es versucht. Am Ende sollte eine Liste der harmonischen Reihe entstehen, doch ich weiß nicht wie ich eine Liste erstellen soll.
Kann mir bitte jemand helfen. Für die Summe der Folge muss ich mir noch was überlegen, doch, wenn ich wenigstens die Folge habe, komme ich vielleicht weiter.
Viele Grüße,
Alphatier
[/code]
Verfasst: Donnerstag 18. Dezember 2008, 20:57
von Dauerbaustelle
So etwa?
Code: Alles auswählen
liste = [] # neue, leere Liste erstellen
while True:
try:
liste.append(int(raw_input("Zahl eingeben: ")))
# testen, ob Eingabe sich in eine Zahl umwandeln lässt,
# falls ja, der liste anhängen, ansonsten...
except ValueError:
print "Eingabe war keine Zahl!"
print liste
Edit. hups, hab die reservierte Variable `in` verwendet. Ist jetzt gefixt ;)
Verfasst: Donnerstag 18. Dezember 2008, 21:07
von Alphatier
Code: Alles auswählen
File "./tester2", line 6
in = int(raw_input("Zahl eingeben: "))
^
SyntaxError: invalid syntax
Das kommt bei mir, wenn ich dein Code versuche zu starten. Ich will eigentlich ein Programm haben, in welches ich die obere Summengrenze eingabe, und ich dann als Ergebnis die Summe von 1 bis zur Summengrenze von 1/x, also 1/1+1/2+1/3+1/4+...+1 / Summengrenze, erhalte.
Am Besten wäre es, wenn ich das Ergebnis als Dezimalzahl mit vielen Nachkommastellen erhalte. Dazu gibt es soviel ich weiß eine Klassenunterteilung bei Python, doch ich weiß nicht mehr welche Klasse wieder eine Zahl mit vielen Nachkommastellen war.
Viele Grüße
Verfasst: Donnerstag 18. Dezember 2008, 21:20
von numerix
Hallo Alphatier,
willkommen im Forum.
Wenn du Code zeigst, bitte in Code-Tags setzen!
Hast du irgendein Tutorial, Buch oder sonstwas, was dir als Grundlage zum Lernen von Python dient? Deine Probleme sind nämlich sehr grundlegender Art und es wäre vielleicht der richtige Weg, mit einem Tutorial zu beginnen, Beispielcode nachzuvollziehen und dich mit den Grundlagen vertraut zu machen. Dann sollte die harmonische Reihe kein unlösbares Problem mehr für dich sein.
Verfasst: Donnerstag 18. Dezember 2008, 21:29
von Alphatier
Kannst du mir ein gutes online Tutorial empfehelen?
Ich habe ein schriftliches Tutorium, doch da fehlen wesentliche Seite, deshalb kann ich damit nur Häppchenweise arbeiten.
Viele Grüße
Verfasst: Donnerstag 18. Dezember 2008, 21:33
von nemomuk
A Byte of Python, Dive into Python
Verfasst: Donnerstag 18. Dezember 2008, 21:34
von numerix
Falls es was deutsches sein soll, schau dich hier mal um:
http://wiki.python.de
Ansonsten: Das Original:
http://docs.python.org/3.0/tutorial/index.html
Verfasst: Donnerstag 18. Dezember 2008, 21:36
von BlackJack
@Alphatier: Das Tutorial aus der Python-Dokumentation sollte man mal gemacht haben. Mindestens bis "list comprehensions" und/oder "generator expressions", dann lässt sich Deine Aufgabe ganz einfach damit und der `sum()`-Funktion lösen.
Und Du solltest Quelltext bei dem Fehler auftauchen auch zeigen. Denn das war sicher nicht der Quelltext, den Dauerbaustelle gezeigt hat, da kommt eine Zeile ``in = int(raw_input("Zahl eingeben: "))`` *so* nicht drin vor, also wäre es interessant was noch anders ist.
Wenn man bei einer Schleife vor Eintritt weiss, wie viele Wiederholungen es gibt, zieht man in der Regel eine ``for``-Schleife einer ``while``-Schleife vor.
Verfasst: Donnerstag 18. Dezember 2008, 21:46
von Alphatier
Ok hab das Problem gefunden.
Code: Alles auswählen
#!/usr/bin/python
ende=input("Geben Sie die obere Grenze ein:")
b=1
while b < ende:
a = 1/b
print(a)
b=b+1
Damit funktioniert es glaube ich, doch wie kann ich a mit Nachkommastellen darstellen. Mit dem Programm steht da nur eine 0
Viele Grüße
Verfasst: Donnerstag 18. Dezember 2008, 22:00
von pysq
1.0 macht das ganze zu einer float Division (also mit Berücksichtigung von Nachkommastellen). Du kannst auch die builtin-Funktion float verwenden, etwa so:
mfg pysq
Verfasst: Donnerstag 18. Dezember 2008, 22:49
von cofi
Eine Lösung für dein Problem - evtl auch eine Nuss zum draufrumkauen für die nächsten Tage
Code: Alles auswählen
In [55]: def a():
....: try:
....: upper_boundary = int(raw_input("Geben Sie die obere Grenze an! "))
....: except ValueError:
....: print "Geben Sie eine Zahl ein!"
....: num_series = [1.0/a for a in xrange(1, upper_boundary+1)]
....: print "Summe: %f" % sum(num_series)
....:
....:
In [57]: a()
Geben Sie die obere Grenze an! 5
Summe: 2.283333
num_series ist übrigens eine Liste

Stichwort ist List comprehension