Python While循环随组织增长而无法提供适当的输出

时间:2019-02-02 00:36:30

标签: python while-loop

我正在尝试编写一个程序,用于计算特定时间段内正在生长的生物的数量:

  

当地生物学家需要一个程序来预测人口增长。输入为:

     
      
  • 初始生物数量
  •   
  • 增长率(大于1的实数)
  •   
  • 达到此速度所需的小时数
  •   
  • 人口增长的小时数
  •   
     

例如,一个人可能始于500个生物种群,2的生长速率以及达到6个小时的生长周期。假设没有任何生物死亡,这意味着该种群每6小时将增加一倍。因此,在生长6小时后,我们将拥有1000个生物体,而在12小时后,我们将拥有2000个生物体。

     

编写一个程序,接收这些输入并显示总人口的预测。

这是我到目前为止的代码:

{{1}}

我已经遍历了几次逻辑,无法弄清楚为什么我无法得到80的期望答案

3 个答案:

答案 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))