我正在尝试编写一个程序,用于计算特定时间段内正在生长的生物的数量:
当地生物学家需要一个程序来预测人口增长。输入为:
- 初始生物数量
- 增长率(大于1的实数)
- 达到此速度所需的小时数
- 人口增长的小时数
例如,一个人可能始于500个生物种群,2的生长速率以及达到6个小时的生长周期。假设没有任何生物死亡,这意味着该种群每6小时将增加一倍。因此,在生长6小时后,我们将拥有1000个生物体,而在12小时后,我们将拥有2000个生物体。
编写一个程序,接收这些输入并显示总人口的预测。
这是我到目前为止的代码:
{{1}}
我已经遍历了几次逻辑,无法弄清楚为什么我无法得到80的期望答案
答案 0 :(得分:0)
您不需要循环,可以使用一个简单的指数增长公式来计算:
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)
答案 1 :(得分:0)
organisms = int(input("Enter the initial number of organisms:"))
rateOfGrowth = int(input("Enter the rate of growth : "))
numOfhours = int(input("Enter the number of hours to achieve the rate of growth: "))
totalhours = int(input("Enter the total hours of growth: "))
hours=0
while (hours <= totalhours):
organisms*=rateOfGrowth
hours += numOfhours
if (hours==totalhours):
break
print("The total population:" ,organisms)
答案 2 :(得分:0)
number = int(input("Enter the initial number of organisms: "))
rate = float(input("Enter the rate of growth [a real number > 1]: "))
cycleHours = int(input("Enter the number of hours to achieve the rate of growth:"))
totalHours = int(input("Enter the total hours of growth: "))
cycles = totalHours // cycleHours
for eachPass in range(cycles):
number = number * rate
print("The total population is", int(number))