Hallo,
als Hobby versuche ich mir im Moment Python anzueignen. Bei der Bearbeitung einer Aufgabe stellt sich mir jedoch ein Problem, das eher mathematischer Natur ist bzw. ein Verständnisproblem ist.
Ich will eine Funktion schreiben, die als Parameter einen integer hight entgegen nimmt und dann ein umgekehrtes gleichschenkliges Dreieck mit hight Zeilen im Terminal ausgibt:
Hier ist der Code der Funktion:
Zur Erläuterung:
Ein for-loop geht Zeile für Zeile nach unten und ein for-loop geht innerhalb der Zeile jedes Zeichen bis zur Länge der Basis des Dreiecks durch.
Für jede Spalte wird dann geprüft, ob ein Leerzeichen als Puffer, oder ein * ausgegeben werden muss, damit das Dreieck wie oben ausgegeben wird.
Meine Idee war, dass jede Zeile die Anzahl und Stellen der Puffer-Leerzeichen durch die Differenz der Sternchen der Zeile zu denen in der Basis berechnet werden könnten:
Die Differenz dann durch 2 sollte die Anzahl und Position für die Puffer am Anfang der Zeile ergeben:
und die Differenz durch 2 von baseLength abgezogen, die am Ende der Zeile
Die Ausgabe für 6 ist aber:
Ich verstehe einfach nicht, wo mein Denkfehler liegt, ich habe vier DIN A4 Seiten diese beiden conditions entworfen (traurig genug), und war mir sicher, dass ich es hinbekommen hätte. Eigentlich sollten die ausgegebenen Zeilen eine ungerade Anzahl von Sternchen enthalten, also für sTri(6)
11
9
7
5
3
1
Ich würde die Funktion gerne selber reparieren, aber bin für jeden Hinweis auf mein Verständnisproblem dankbar.
EDIT:
- Klammerfehler verbessert (danke an NullPointer für den Hinweis)
- Berechnung von Hades85
Dieser Code funktioniert jetzt, aber die berechnung erschließt sich mir noch nicht ganz
Mit freundlichen Grüßen
psi24
als Hobby versuche ich mir im Moment Python anzueignen. Bei der Bearbeitung einer Aufgabe stellt sich mir jedoch ein Problem, das eher mathematischer Natur ist bzw. ein Verständnisproblem ist.
Ich will eine Funktion schreiben, die als Parameter einen integer hight entgegen nimmt und dann ein umgekehrtes gleichschenkliges Dreieck mit hight Zeilen im Terminal ausgibt:
Code:
Ausgabe für hight = 6:
***********
*********
*******
*****
***
*
Hier ist der Code der Funktion:
Python:
# int hight : als Parameter der Funktion die Anzahl der Zeilen (Höhe des Dreiecks)
# int baseLength : Länge der Basis des Dreiecks, keine Puffer-Leerzeichen
# string s : Puffer, der jede Zeile geleert wird und für jede Spalte erweitert wird.
#Am Ende des for-loops für die Zeile wird er ausgegeben
# int row : Zeile
# int column : Spalte
def sTri(hight):
baseLength = hight*2 -1
for row in range(0, hight):
s = ""
for column in range(1, baseLength):
if column <= baseLength - (baseLength - (row*2-1)/2) or column > (baseLength- (row*2-1)/2):
s += " "
else:
s += "*"
print(s)
Zur Erläuterung:
Ein for-loop geht Zeile für Zeile nach unten und ein for-loop geht innerhalb der Zeile jedes Zeichen bis zur Länge der Basis des Dreiecks durch.
Für jede Spalte wird dann geprüft, ob ein Leerzeichen als Puffer, oder ein * ausgegeben werden muss, damit das Dreieck wie oben ausgegeben wird.
Meine Idee war, dass jede Zeile die Anzahl und Stellen der Puffer-Leerzeichen durch die Differenz der Sternchen der Zeile zu denen in der Basis berechnet werden könnten:
Python:
row*2-1# Anzahl der Sternchen in der Zeile row
baseLength - (row*2-1)# Anzahl der Leerzeichen zum Puffern
Code:
column <= baseLength - (baseLength - (row*2-1)/2)
und die Differenz durch 2 von baseLength abgezogen, die am Ende der Zeile
Code:
column > (baseLength- (row*2-1)/2)
Die Ausgabe für 6 ist aber:
Code:
**********
**********
********
******
****
**
00000000011
12345678901
Ich verstehe einfach nicht, wo mein Denkfehler liegt, ich habe vier DIN A4 Seiten diese beiden conditions entworfen (traurig genug), und war mir sicher, dass ich es hinbekommen hätte. Eigentlich sollten die ausgegebenen Zeilen eine ungerade Anzahl von Sternchen enthalten, also für sTri(6)
11
9
7
5
3
1
Ich würde die Funktion gerne selber reparieren, aber bin für jeden Hinweis auf mein Verständnisproblem dankbar.
EDIT:
- Klammerfehler verbessert (danke an NullPointer für den Hinweis)
- Berechnung von Hades85
Dieser Code funktioniert jetzt, aber die berechnung erschließt sich mir noch nicht ganz
Code:
def sTri(hight):
baseLength = hight*2
for row in range(0, hight):
s = ""
for column in range(1, baseLength):
if column <= baseLength - (baseLength - (row*2)/2) or column >= (baseLength- (row*2)/2):
s += "-"
else:
s += "x"
print(s)
Mit freundlichen Grüßen
psi24
Zuletzt bearbeitet:
(Edit: falsche Ausgabe gepostet)