Populationen errechnen

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.
Antworten
Sülo
User
Beiträge: 29
Registriert: Dienstag 4. Mai 2021, 09:58

Hallo liebe Programmierer!
Ich hab folgendes Problem:
Ich soll eine Population für Organismen errechnen, wenn pro Tag 30% dazukommen. Das ganze soll 5 Tage dauern.

Folgendes habe ich schon gemacht:
#Frage nach Anzahl

while True:
Anzahl_Organismen = int(input('Anzahl beginninder Organismen?: '))
if Anzahl_Organismen < 0:
print('Anzahl muss größer/gleich Null sein!')
#Frage nach Prozentualem Zuwachs

while True:
prozentualer_zuwachs_pro_tag = float(input('Wie hoch ist der Zuwachs po Tag in prozent?: '))
if prozentualer_zuwachs_pro_tag < 0:
print('Zuwachs muss größer als Null sein!')
else:
break

#Frage der Dauer
while True:
Tage = float(input('Wie viel Tage soll es dauern?: '))
if Tage < 0:
print('Tage müssen mehr als Null sein!')
else:
break
print('Durch ihre eingabe sieht die Poulation wie folgt aus: ')

for Tage in range(1,6,1):
square = Tage + (Anzahl_Organismen*prozentualer_zuwachs_pro_tag/100)

print(Tage, '', square)

Jetzt bekomme ich als Ergebnis immer nur die 0.6 (30%von 2) aber der addiert das nicht

Sieht dann wie folgt aus:
1 1.6
2 2.6
3 3.6
4 4.6
5 5.6


Und das richtige Ergebnis sollte sein
1 2
2 2.6
3 3.38
4 4.394
5 5.7122

Könnt ihr mir helfen wo das Problem liegt?
PlatonBrent
User
Beiträge: 2
Registriert: Dienstag 7. Dezember 2021, 20:08

Hallo,

deine Ausgabe addiert nur die 30% (0.6) auf den Tag.
Das Problem liegt in dieser Zeile:

Code: Alles auswählen

square = Tage + (Anzahl_Organismen*prozentualer_zuwachs_pro_tag/100)
Square wird immer wieder mit dem Tag + die 0.6 überschrieben. Der vorherige Tag geht aber verloren.

Probiere mal folgendes:

Code: Alles auswählen

for Tage in range(1, Tage + 1, 1):
    print(Tage, '', Anzahl_Organismen)
    Anzahl_Organismen = Anzahl_Organismen + (Anzahl_Organismen*prozentualer_zuwachs_pro_tag/100)
Die print-Anweisung vor der Rechnung gibt dir den 1. Tag mit der Anzahl an Organismen aus.
Danach folgt die Berechnung. Square wird eig. nicht benötigt, du kannst stattdessen die Anzahl hernehmen, diese um die vorherige Anzahl erhöhen und dazu den Prozentsatz aufaddieren.

Meine Ausgabe ergibt dann:

Anzahl beginnender Organismen?: 2
Wie hoch ist der Zuwachs pro Tag in Prozent?: 30
Wie viel Tage soll es dauern?: 5
Durch ihre Eingabe sieht die Population wie folgt aus:
1 2.0
2 2.6
3 3.38
4 4.394
5 5.7122

Beste Grüße,

Platon
----------------------------------------------------------------------------------------------------------------------
Kompletter Code:

Code: Alles auswählen

# Frage nach Anzahl
while True:
    Anzahl_Organismen = float(input('Anzahl beginnender Organismen?: '))
    if Anzahl_Organismen < 0:
        print('Anzahl muss größer/gleich Null sein!')
    else:
        break

# Frage nach Prozentualem Zuwachs
while Anzahl_Organismen >= 0:
    prozentualer_zuwachs_pro_tag = float(
        input('Wie hoch ist der Zuwachs pro Tag in Prozent?: '))
    if prozentualer_zuwachs_pro_tag < 0:
        print('Zuwachs muss größer als Null sein!')
    else:
        break

# Frage der Dauer
while True:
    Tage = int(input('Wie viel Tage soll es dauern?: '))
    if Tage <= 0:
        print('Es muss mindestens ein Tag dauern!')
    else:
        break
print('Durch Ihre Eingabe sieht die Population wie folgt aus: ')

for Tage in range(1, Tage + 1, 1):
    print(Tage, '', Anzahl_Organismen)
    Anzahl_Organismen = Anzahl_Organismen + \
        (Anzahl_Organismen*prozentualer_zuwachs_pro_tag/100)
PlatonBrent
User
Beiträge: 2
Registriert: Dienstag 7. Dezember 2021, 20:08

Hi Sülo,

dein square addiert nur den aktuellen Tag + die %.
Der Wert des vorherige Tages geht verloren.

Dein Fehler ist also in der Berechnung in dieser Zeile:

Code: Alles auswählen

square = Tage + (Anzahl_Organismen*prozentualer_zuwachs_pro_tag/100)
Du brauchst square eigentlich garnicht. Du kannst dir den ersten Tag + die aktuelle Anzahl ausgeben lassen, im Anschluss daran kannst du deine Anzahl neu berechnen lassen und dann immer wieder die print-Funktion aufrufen, bis die Anzahl an Tagen durchgelaufen ist.
Probiere es mal so:

Code: Alles auswählen

for Tage in range(1, Tage + 1, 1):
    print(Tage, '', Anzahl_Organismen)
    Anzahl_Organismen = Anzahl_Organismen + (Anzahl_Organismen*prozentualer_zuwachs_pro_tag/100)


Es gibt nur ganze Tage, daher würde ich die Variable Tage in int ändern. Eigentlich würde es auch nur ganze Organismen geben, aber hier habe ich mal float gewählt.

Hier mal der komplette Code:

Code: Alles auswählen

# Frage nach Anzahl
while True:
    Anzahl_Organismen = float(input('Anzahl beginnender Organismen?: '))
    if Anzahl_Organismen < 0:
        print('Anzahl muss größer/gleich Null sein!')
    else:
        break

# Frage nach Prozentualem Zuwachs
while Anzahl_Organismen >= 0:
    prozentualer_zuwachs_pro_tag = float(
        input('Wie hoch ist der Zuwachs pro Tag in Prozent?: '))
    if prozentualer_zuwachs_pro_tag < 0:
        print('Zuwachs muss größer als Null sein!')
    else:
        break

# Frage der Dauer
while True:
    Tage = int(input('Wie viel Tage soll es dauern?: '))
    if Tage <= 0:
        print('Es muss mindestens ein Tag dauern!')
    else:
        break
print('Durch Ihre Eingabe sieht die Population wie folgt aus: ')

for Tage in range(1, Tage + 1, 1):
    print(Tage, '', Anzahl_Organismen)
    Anzahl_Organismen = Anzahl_Organismen + \
        (Anzahl_Organismen*prozentualer_zuwachs_pro_tag/100)
Viel Spaß und Beste Grüße,

Platon
Benutzeravatar
sparrow
User
Beiträge: 4183
Registriert: Freitag 17. April 2009, 10:28

Setze Code hier im Forum immer in Code-Tags. Dann bleibt die Einrückung erhalten. Die Tags werden automatisch eingefügt, wenn du den </>-Knopf im vollständigen Editor drückst. Dazwischen gehört dein Code.

Namen werden klein_mit_unterstrich geschrieben.

Was denkst du denn, was diese Zeilen tun? (ich habe die Namen korrigiert)

Code: Alles auswählen

for tag in range(1,6,1):
    square = tag + (anzahl_organismen * prozentualer_zuwachs_pro_tag / 100)
Schau dir doch mal an, was "square" in jedem Durchlauf für einen Wert hat.
Verstehst du warum?
Antworten