die gestellte Aufgabe konnte ich zwar m. E. gut umsetzten, aber ich habe gerade einen Knoten im Kopf, was meine while-Schleife angeht.
Ich denke, dass sie nur 8mal durchlaufen muss, aber ich weis nicht, wie ich sie dazu bringe.
Hier die Aufgabe:
Punkt 4 der Hinweise habe ich soweit erst mal "ignoriert", da ich eine grundlegend funktionierende Lösung gefunden habe. Wenn ihr dazu auch noch ne Meinung habe, in wie weit ich meinen Code verbessern kann, bin ich auch dafür dankbar.Entwickeln Sie eine Funktion quadratpflanze, welche den Wachstum einer quadratischen Pflanze berechnet, die gemäß folgender Abbildung wächst:
Quadratpflanze.png
In jedem Zyklus wachsen an allen drei Seiten der äußersten Quadrate kleinere Quadrate, jeweils mit einem Drittel der Seitenlänge.
Die Abbildung zeigt die Pflanze nach zwei Zyklen.
Der Funktion sollen die Basislänge b [cm] und optional die Anzahl an Zyklen, die berechnet werden sollen, übergeben werden.
Wenn keine Anzahl der Zyklen vorgegeben wird, soll berechnet werden, nach wie vielen Zyklen die Pflanze ausgewachsen ist. Dies ist der Fall, wenn die Fläche sich um weniger als 0.01cm² ändert. Die Ausgabe soll dann wie folgt aussehen:
Eine Quadratpflanze mit einer Basislänge von 10 cm ist nach 8 Zyklen ausgewachsen.
Umfang der ausgewachsenen Quadratpflanze: 200.0 cm
Fläche der ausgewachsenen Quadratpflanze: 149.99 cm²
Sollten die Zyklen jedoch vorgegeben sein, sollen Umfang und Fläche der Pflanze nach der gegebenen Anzahl an Zyklen ausgegeben werden. Die Ausgabe soll dann wie folgt aussehen:
Umfang der Quadratpflanze mit einer Basislänge von 10 cm nach 5 Zyklen: 140.0 cm
Fläche der Quadratpflanze mit einer Basislänge von 10 cm nach 5 Zyklen: 149.79 cm²
Hinweise
1. Beachten Sie unbedingt auf die Formatierung der einzelnen Zeilen, d. h. etwaige Leerzeichen, Doppelpunkte, etc. sind korrekt anzugeben!
2. Bei dem Umfang handelt es sich immer nur um die äußersten Seiten der Pflanze. In der Abbildung ist der Umfang durch die roten Linien gekennzeichnet.
3. Die Ergebnisse sollen auf 2 Nachkommastellen gerundet werden.
4. Für die Berechnung der Zuschläge kann es sinnvoll sein, eine Funktion zu schreiben, die anhand der Seitenlänge der aktuell äußersten Quadrate und dem aktuellen Zyklus die Zuschläge berechnet und diese zurückgibt.
Aber hier erst mal mein Stand der Dinge:
Code: Alles auswählen
def quadratpflanze(b, zyklen=None):
umfang = 4 * b
flaeche = b ** 2
if zyklen is None:
zyklen = 0
aenderung_max = 0.01
flaeche_aktuell = 0
while True:
zyklen += 1
aenderung_aktuell = flaeche / ( 3 ** zyklen )
flaeche_aktuell += aenderung_aktuell
if aenderung_aktuell < aenderung_max:
break
umfang += zyklen * ( 3 * b/3 * 2 )
flaeche = flaeche + flaeche_aktuell
# print(aenderung_aktuell)
print(f'Eine Quadratpflanze mit einer Basislänge von {b} cm ist nach {zyklen} Zyklen ausgewachsen.')
print(f'Umfang der ausgewachsenen Quadratpflanze: {umfang:.2f} cm')
print(f'Fläche der ausgewachsenen Quadratpflanze: {flaeche:.2f} cm²')
else:
umfang += zyklen * ( 3 * b/3 * 2 )
flaeche_aktuell = 0
for zyklus in range(zyklen + 1):
flaeche_aktuell += flaeche / ( 3 ** zyklus )
flaeche = flaeche_aktuell
print(f'Umfang der Quadratpflanze mit einer Basislänge von {b} cm nach {zyklen} Zyklen: {umfang:.2f} cm')
print(f'Fläche der Quadratpflanze mit einer Basislänge von {b} cm nach {zyklen} Zyklen: {flaeche:.2f} cm²')
VG
Fabian