mein interpterer sagt mir dabei:
No module named pascaldreieck
Pascalsches Dreieck mit python (dringend!)
-
- User
- Beiträge: 8
- Registriert: Dienstag 5. Januar 2010, 19:34
meine programme sind nicht fehlerhaft...sie entwickeln nur zufällig neue features
Hast du den Post von DasIch nicht gelesen? Wahrscheinlich fehlt das Modul pascaldreieck.py in deinem site-packages-Ordner ...gamemaster2422 hat geschrieben:da heißt es das from aus
from pascaldreieck import PascalDreieck
sei falsch.
-
- 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
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Nun hört doch auf den OP zu verarschen - er hat den Witz halt nicht gechecktnumerix hat geschrieben:Hast du den Post von DasIch nicht gelesen? Wahrscheinlich fehlt das Modul pascaldreieck.py in deinem site-packages-Ordner ...gamemaster2422 hat geschrieben:da heißt es das from aus
from pascaldreieck import PascalDreieck
sei falsch.
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
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.
-
- User
- Beiträge: 8
- Registriert: Dienstag 5. Januar 2010, 19:34
@...
könntest du mir dein programm bitte zeile für zeile erklären?
ich weiß, ist viel arbeit, wäre aber echt nett^^
ich versteh nämlich von alldem nur etwa ein viertel^^
könntest du mir dein programm bitte zeile für zeile erklären?
ich weiß, ist viel arbeit, wäre aber echt nett^^
ich versteh nämlich von alldem nur etwa ein viertel^^
meine programme sind nicht fehlerhaft...sie entwickeln nur zufällig neue features
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Hier mal mein "pretty_print":
pd ist eine Liste von Listen, in denen die einzelnen Zahlen einer Reihe stehen.
So sollte das hübsch dynamisch klappen.
Die Werte des Dreiecks muss man natürlich vorher berechnen
Code: Alles auswählen
def pretty_print(pd):
item_length = len(str(pd[-1][len(pd[-1])/2]))
line_length = (item_length + 1) * (len(pd[-1]) + 1)
space = " " * item_length
for line in pd:
print space.join(map(str, line)).center(line_length)
So sollte das hübsch dynamisch klappen.
Die Werte des Dreiecks muss man natürlich vorher berechnen
-
- User
- Beiträge: 8
- Registriert: Dienstag 5. Januar 2010, 19:34
ehm...da kommt garnichts^^
meine programme sind nicht fehlerhaft...sie entwickeln nur zufällig neue features
Code: Alles auswählen
# -*- coding: utf-8 -*-
"""
Spyder Editor
This temporary script file is located here:
/home/michael/.spyder/.temp.py
"""
print 'Wieviele Zeilen?' #Ausgabe: Wieviele Zeilen
lines = raw_input() #Warte auf eingabe
lines = int(lines) #Wandelt die Eingabe in Integer um
lines = range(lines) #Erstellt eine Liste mit lines zahlen ab 0 (bei lines = 9, [0,1,2,3,4,5,6,7,8]
pascal_list = [] #Erstellt eine leere Liste
for line in lines: #Für jedes Element (line) in der liste lines...
pascal_list.append([1]) #Fügt man eine Liste mit dem Startinhalt [1] an die pascal_list an. Dadurch wird eine 2-Dimensionale Liste erstellt.
if line != 0: #Die Erste (0te) Zeile ist bereits mit der 1 fertig ausgefüllt, darum wird das weitere nur durchlaufen wenn es sich nicht um diese handelt
for element in range(len(pascal_list[line-1])): #es wird eine Liste mit Zahlen 0 - n erstellt, mit der länge der vohergehenden Zeile. Für jedes element dieser Zeile wird die Schleife durchlaufen.
pascal_list[line].append(sum(pascal_list[line-1][element:element+2])) #Der Aktuellen Zeile (pascal_list[line]) wird die Summe der Zahlen des elements und des nachfolgenden, aus der vohergehenden Zeile angehängt. Die Variable element ist der Index.
rev_lines = lines #die Liste lines (siehe oben) wird kopiert
rev_lines.reverse() #Die kopie wird umgekehrt.
for n in range(len(rev_lines)): #Schwachsinn. Kannst anstelle range(len(rev_lines)) auch lines verwenden. Ich erstelle hier eine Liste von 0-n mit der länge von rev_lines. Die liste ist aber mit lines dann identisch. Letztendlich brauch ich n als index für die zu bearbeitende Zeile von pascal_list.
pascal_print = '' #ein leerer String wird erstellt
for m in pascal_list[n]: #m wird nach und nach jedes element der Aktuellen Zeile.
if pascal_print == '': #wenn pascal_print noch ein leerer String ist, sollen keine zusätzlichen leerzeichen eingefügt werden.
pascal_print = str(m) #es wird also einfach nur das element, als String angehängt.
else:
pascal_print = pascal_print + ' '*(6-len(str(m))) + str(m) #ansonsten sollen die Leerzeichen eingefügt werden. und zwar 6 stück, abzüglich der Anzahl der Zeichen. Da m INT ist, und darum die länge nicht ermittelt werden kann, wandle ich es (Kopf duch die Wand) in einen sting um. Dann wird noch m als string angehängt.
print ' '*(rev_lines[n]) + pascal_print #zuletzt werden noch - und dafür brauchte ich die umgekehrte liste der Zeilenzahl lehrzeichen eingefügt, um die gesammte Zeile einzurücken. Je weiter oben, desto mehr. Bei 10 Zeilen wird die oberste jetzt 9x soviel eingerückt wie die unterste. Die unterste wird 3*0, die oberste 3*9. Nach der Einrückung wird dann der erstellte String ausgegeben.
-
- User
- Beiträge: 8
- Registriert: Dienstag 5. Januar 2010, 19:34
cool...danke sehr
jez hab ichs verstanden
jez hab ichs verstanden
meine programme sind nicht fehlerhaft...sie entwickeln nur zufällig neue features
Ich habe es so gelöst:Hyperion hat geschrieben:Hier mal mein "pretty_print":
Code: Alles auswählen
def __str__(self):
b, n = len(str(max(self.dreieck[-1])+1)), len(self.dreieck)
return "\n".join(" "*((b+1)*(n-k)//2)+" ".join("%*s" %(b,w) for w in zeile)
for k,zeile in enumerate(self.dreieck))
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Patsch! Auf das max() hätte ich auch mal kommen sollen ^^
Code: Alles auswählen
item_length = len(str(max(pd[-1])))
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ist aber mit max() eleganter finde ich.hendrikS hat geschrieben:Da der größte Wert immer in der Mitte ist, dürfte man auch mit direkt reinindizieren bei len/2 Erfolg haben.Hyperion hat geschrieben:Patsch! Auf das max() hätte ich auch mal kommen sollen ^^
Ich will auch noch mal:
Code: Alles auswählen
#!/usr/bin/env python
from itertools import chain, imap, islice
from operator import add
def iter_rows():
row = one = [1]
while True:
yield row
row = list(chain(one, imap(add, row, islice(row, 1, None)), one))
def print_triangle(rows):
last_row = rows[-1]
last_row_length = len(last_row)
max_number_width = len(str(last_row[last_row_length // 2]))
line_width = (max_number_width + 1) * last_row_length
print
for row in rows:
print (' '.join(str(i).rjust(max_number_width) for i in row)
.center(line_width))
def main():
rows = list(islice(iter_rows(), int(raw_input('Wie viele Zeilen? '))))
print_triangle(rows)
print '-' * 40
if __name__ == '__main__':
main()