Вам не нужен цикл, его можно рассчитать с помощью простой формулы для экспоненциального роста:
totalOrganisms = math.floor(organisms * rateOfGrowth ** (totalHours / numOfHours))
Я использую math.floor()
, потому что формула может давать дроби, если totalHours
не являетсякратный numOfHours
, но у вас не может быть половины организма.
Если вам действительно нужно использовать цикл, у вас есть две проблемы.
Во-первых, ваше условие цикла обратное,следует использовать <=
вместо >=
.
Во-вторых, numOfHours += numOfHours
удваивает эту переменную каждый раз.Вам необходимо использовать отдельную переменную для времени, в течение которого выполнялась симуляция.
В-третьих, вам не нужно умножать organisms
, а также добавлять его к totalOrganisms
.Просто умножьте organisms
на скорость роста, это будет новое общее количество организмов.
hoursSoFar = 0
while hoursSoFar <= totalHours:
organisms *= rateOfGrowth
hoursSoFar += numOfHours
print("The total population is", organisms)
Но если totalHours
не кратно numOfHours
, это будет игнорировать рост в течение последнегочастичный период.
Эквивалентная формула, которая игнорирует частичный период, будет использовать целочисленное деление:
totalOrganisms = organisms * rateOfGrowth ** (totalHours // numOfHours)