Pascalsches Dreieck mit python (dringend!)

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.
gamemaster2422
User
Beiträge: 8
Registriert: Dienstag 5. Januar 2010, 19:34

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^^
meine programme sind nicht fehlerhaft...sie entwickeln nur zufällig neue features
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
gamemaster2422
User
Beiträge: 8
Registriert: Dienstag 5. Januar 2010, 19:34

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.
meine programme sind nicht fehlerhaft...sie entwickeln nur zufällig neue features
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

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

@hendrikS: Da stimmt aber das gewünschte Ausgabeformat nicht. :wink:
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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

numerix hat geschrieben:

Code: Alles auswählen

>>> from pascaldreieck import PascalDreieck
Wo finde ich diese Lib? :D
SCNR ;-)
...
User
Beiträge: 116
Registriert: Mittwoch 23. Dezember 2009, 20:22

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Hyperion hat geschrieben:
numerix hat geschrieben:

Code: Alles auswählen

>>> from pascaldreieck import PascalDreieck
Wo finde ich diese Lib? :D
SCNR ;-)
/usr/lib/python2.6/site-packages/pascaldreieck.py natürlich.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Gibts das auch als .egg?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

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.
gamemaster2422
User
Beiträge: 8
Registriert: Dienstag 5. Januar 2010, 19:34

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^^
meine programme sind nicht fehlerhaft...sie entwickeln nur zufällig neue features
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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

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 ...
gamemaster2422
User
Beiträge: 8
Registriert: Dienstag 5. Januar 2010, 19:34

mein interpterer sagt mir dabei:
No module named pascaldreieck
meine programme sind nicht fehlerhaft...sie entwickeln nur zufällig neue features
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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 ... :D
gamemaster2422
User
Beiträge: 8
Registriert: Dienstag 5. Januar 2010, 19:34

und wo kriege ich das her?
meine programme sind nicht fehlerhaft...sie entwickeln nur zufällig neue features
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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 ... :D
Nun hört doch auf den OP zu verarschen - er hat den Witz halt nicht gecheckt ;-)
...
User
Beiträge: 116
Registriert: Mittwoch 23. Dezember 2009, 20:22

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.
Zuletzt geändert von ... am Dienstag 5. Januar 2010, 20:55, insgesamt 1-mal geändert.
Antworten