Цикл Python While с ростом организации не дает правильного вывода - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь написать программу, которая рассчитывает популяцию растущих организмов за определенный период времени:

Местному биологу нужна программа для прогнозирования роста населения.Входные данные будут:

  • Начальное количество организмов
  • Скорость роста (действительное число больше 1)
  • Количество часов, необходимое длядостичь этой скорости
  • Количество часов, в течение которых популяция увеличивается

Например, можно начать с популяции из 500 организмов, скорости роста 2 и периода ростадля достижения этой скорости 6 часов.Предполагая, что ни один из организмов не умирает, это будет означать, что эта популяция будет удваиваться в размере каждые 6 часов.Таким образом, после 6 часов роста у нас будет 1000 организмов, а через 12 часов у нас будет 2000 организмов.

Напишите программу, которая принимает эти данные и отображает прогноз общей популяции.

Вот код, который у меня есть:

#Currently trying with 10, 2, 2, 6, giving a total pop of 10

organisms = int(input("Enter the initial number of organisms:"))
rateOfGrowth = int(input("Enter the rate of growth [a real number > 0]: "))
numOfHours = int(input("Enter the number of hours to achieve the rate of growth: "))
totalHours = int(input("Enter the total hours of growth: "))

totalOrganisms = organisms
while numOfHours >= totalHours:
    organisms *= rateOfGrowth
    totalOrganisms += organisms
    numOfHours += numOfHours
print("The total population is ",totalOrganisms)

Я несколько раз пробежался по логике и не могу понять, почему я не могу получить желаемый ответ из 80

1 Ответ

0 голосов
/ 02 февраля 2019

Вам не нужен цикл, его можно рассчитать с помощью простой формулы для экспоненциального роста:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...