Summe einer Reihe mit Python berechnen

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
Alphatier
User
Beiträge: 4
Registriert: Donnerstag 18. Dezember 2008, 20:44

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]
Zuletzt geändert von Alphatier am Donnerstag 18. Dezember 2008, 21:17, insgesamt 1-mal geändert.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

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 ;)
Alphatier
User
Beiträge: 4
Registriert: Donnerstag 18. Dezember 2008, 20:44

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
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
Alphatier
User
Beiträge: 4
Registriert: Donnerstag 18. Dezember 2008, 20:44

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
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

A Byte of Python, Dive into Python
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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
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.
Alphatier
User
Beiträge: 4
Registriert: Donnerstag 18. Dezember 2008, 20:44

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
Benutzeravatar
pysq
User
Beiträge: 31
Registriert: Samstag 29. November 2008, 17:48

Code: Alles auswählen

a=1.0/b
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:

Code: Alles auswählen

a=1/float(b)
mfg pysq
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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
Antworten