Seite 1 von 2
Pascalsches Dreieck mit python (dringend!)
Verfasst: Dienstag 5. Januar 2010, 19:42
von gamemaster2422
Ich muss für die schule die ersten 15 zeilen des pascalschen dreiecks in python so programmieren, dass es in python shell ausgegeben wird, und zwar 1. als liste ( [ [1][1,1][1,2,1]...]) und 2. in der richtigen form (
http://exbook.de/wp-content/Pascal_triangle.png), also in form eines dreiecks.
kann mir da jemand helfen, wenn möglich jeden schritt erläutert? ich kriege es einfach nicht gebacken!
allerdings muss ich das ganze donnerstag abgeben.
schonmal danke im vorraus
edit: ich hatte keine ahnung in welches forum diese frage gehört, wenn sie hier falsch ist, tuts mir leid^^
Re: Pascalsches Dreieck mit python (dringend!)
Verfasst: Dienstag 5. Januar 2010, 19:48
von numerix
gamemaster2422 hat geschrieben:ich hatte keine ahnung in welches forum diese frage gehört, wenn sie hier falsch ist, tuts mir leid^^
Diese Frage ist in jedem Forum falsch, weil - vermutlich (aber sicher kann man da nie sein) - keiner DEINE Hausaufgaben machen will, auch wenn die gestellte Aufgabe von vielen hier im Forum in wenigen Minuten gelöst werden könnte.
Dein Weg sieht so aus: Entwickle den Code so weit wie du kommst und beschreib dann, was noch nicht funktioniert und was du gerne hättest.
Verfasst: Dienstag 5. Januar 2010, 19:58
von gamemaster2422
ich weiß nicht, wie man vorgeben soll, welche zahlen addiert weden.
bsp:
1
1 1
1 2 1
1 3 3 1
zuerst werden 1 und 1 addiert, dann 1 und 2, dann 1 und 3, dann 3 und 3 usw.
Verfasst: Dienstag 5. Januar 2010, 20:10
von lunar
Verfasst: Dienstag 5. Januar 2010, 20:13
von Hyperion
gamemaster2422 hat geschrieben:ich weiß nicht, wie man vorgeben soll, welche zahlen addiert weden.
Dann guck doch hier:
http://de.wikipedia.org/wiki/Pascalsches_Dreieck
Auch ohne komplexe Formel sollte einem das Prinzip klar werden... (und Dein Ergebnis steht da ja auch schon!)
Mach Dir folgendes klar:
Du musst Dir immer die letzte Zeile merken, sowie die sich Schritt weise aufbauende aktuelle. Diese wird dann im nächsten Durchgang zur "alten", aus der Du dir die beiden Zahlen entsprechend dem Schema holst, die Du addieren musst. Zeilen kann man sich leicht in einer Liste merken.
Zudem musst Du wohl eine Schleife 14 mal durchlaufen (sofern die erste Zeile gegeben ist; evtl. macht es sogar Sinn erst mit der 3. Zeile in der Schleife zu beginnen).
Das sind ja quasi alle Zutaten, die man braucht, um dieses Problem zu lösen.
Verfasst: Dienstag 5. Januar 2010, 20:21
von hendrikS
Habe ich zufälligerweise parat.
Code: Alles auswählen
l=[1];x=15
while x:
print" ".join(map(str,l));x-=1
l=map(sum,zip([0]+l,l+[0]))
Verfasst: Dienstag 5. Januar 2010, 20:26
von numerix
@hendrikS: Da stimmt aber das gewünschte Ausgabeformat nicht.
Sollte doch so aussehen:
Code: Alles auswählen
>>> from pascaldreieck import PascalDreieck
>>> dreieck = PascalDreieck(15)
>>> print dreieck
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1
Verfasst: Dienstag 5. Januar 2010, 20:30
von Hyperion
Wo finde ich diese Lib?
SCNR

Verfasst: Dienstag 5. Januar 2010, 20:32
von ...
Code: Alles auswählen
print 'Wieviele Zeilen?'
lines = raw_input()
lines = int(lines)
lines = range(lines)
pascal_list = []
for line in lines:
pascal_list.append([1])
if line != 0:
for element in range(len(pascal_list[line-1])):
pascal_list[line].append(sum(pascal_list[line-1][element:element+2]))
for print_pascal in pascal_list:
print print_pascal
Unformatiert, bestimmt grauenhafter Programmierstil usw... aber ich glaub es sollte funktionieren :S
Verfasst: Dienstag 5. Januar 2010, 20:33
von DasIch
Hyperion hat geschrieben:
Wo finde ich diese Lib?
SCNR

/usr/lib/python2.6/site-packages/pascaldreieck.py natürlich.
Verfasst: Dienstag 5. Januar 2010, 20:34
von jbs
Gibts das auch als .egg?
Verfasst: Dienstag 5. Januar 2010, 20:34
von hendrikS
Ja, Formattierung fehlt noch.
Sollte aber auch kein Problem sein. Ich denke rjust(5) auf alle Zahlen und dann noch Leerzeichen entsprechend der Zeile vorschieben.
Verfasst: Dienstag 5. Januar 2010, 20:40
von gamemaster2422
also bei mir klappts nicht ganz...das von hendrikS und numerix zusammengebastelte klappt nicht, da heißt es das from aus
from pascaldreieck import PascalDreieck
sei falsch.
die version von ... funktioniert, bis auf den punkt, dass es nicht vollständig formatiert ist und ich nicht genau weiß wie das jetzt funktioniert^^
Verfasst: Dienstag 5. Januar 2010, 20:45
von Hyperion
hendrikS hat geschrieben:Ja, Formattierung fehlt noch.
Sollte aber auch kein Problem sein. Ich denke rjust(5) auf alle Zahlen und dann noch Leerzeichen entsprechend der Zeile vorschieben.
Müßte das nicht auch mit string.center() gehen?
Verfasst: Dienstag 5. Januar 2010, 20:45
von numerix
hendrikS hat geschrieben:Ja, Formattierung fehlt noch.
Sollte aber auch kein Problem sein. Ich denke rjust(5) auf alle Zahlen und dann noch Leerzeichen entsprechend der Zeile vorschieben.
Dann sieht das aber bei kleinen Dreiecken aus wie Hund. Lieber so:
Code: Alles auswählen
>>> from pascaldreieck import PascalDreieck
>>> dreieck = PascalDreieck(3)
>>> print dreieck
1
1 1
1 2 1
1 3 3 1
>>> dreieck = PascalDreieck(10)
>>> print dreieck
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
>>> dreieck = PascalDreieck(100) # das erspare ich euch ...
Verfasst: Dienstag 5. Januar 2010, 20:47
von gamemaster2422
mein interpterer sagt mir dabei:
No module named pascaldreieck
Verfasst: Dienstag 5. Januar 2010, 20:47
von numerix
gamemaster2422 hat geschrieben:da heißt es das from aus
from pascaldreieck import PascalDreieck
sei falsch.
Hast du den Post von DasIch nicht gelesen? Wahrscheinlich fehlt das Modul pascaldreieck.py in deinem site-packages-Ordner ...

Verfasst: Dienstag 5. Januar 2010, 20:49
von gamemaster2422
und wo kriege ich das her?
Verfasst: Dienstag 5. Januar 2010, 20:51
von Hyperion
numerix hat geschrieben:gamemaster2422 hat geschrieben:da heißt es das from aus
from pascaldreieck import PascalDreieck
sei falsch.
Hast du den Post von DasIch nicht gelesen? Wahrscheinlich fehlt das Modul pascaldreieck.py in deinem site-packages-Ordner ...

Nun hört doch auf den OP zu verarschen - er hat den Witz halt nicht gecheckt

Verfasst: Dienstag 5. Januar 2010, 20:53
von ...
Code: Alles auswählen
# -*- coding: utf-8 -*-
"""
Spyder Editor
This temporary script file is located here:
/home/michael/.spyder/.temp.py
"""
print 'Wieviele Zeilen?'
lines = raw_input()
lines = int(lines)
lines = range(lines)
pascal_list = []
for line in lines:
pascal_list.append([1])
if line != 0:
for element in range(len(pascal_list[line-1])):
pascal_list[line].append(sum(pascal_list[line-1][element:element+2]))
rev_lines = lines
rev_lines.reverse()
for n in range(len(rev_lines)):
pascal_print = ''
for m in pascal_list[n]:
if pascal_print == '':
pascal_print = str(m)
else:
pascal_print = pascal_print + ' '*(6-len(str(m))) + str(m)
print ' '*(rev_lines[n]) + pascal_print
Hier noch mit Kopf durch die Wand...
Jetzt gibt es die Ausgabe auch als Dreieck
Code: Alles auswählen
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
Die 6-len(str(m)) muss man halt anpassen...
Wenn die Zahlen unten immer größer Werden, und irgendwann mehr als 6 Stellen haben, tuts weh.