而循环在python(新手)

时间:2013-11-12 14:54:02

标签: python

嗨,我是python的新手,我很难理解这个简单的while循环。这个程序应该计算细菌加倍所需的时间。

time = 0
population = 1000 # 1000 bacteria to start with 
growth_rate = 0.21 # 21% growth per minute
while population < 2000:
    population = population + growth_rate * population 
    print population
    time = time + 1
print "It took %d minutes for the bacteria to double." % time
print "...and the final population was %6.2f bacteria." % population

结果是:

1210.0
1464.1
1771.561
2143.58881

It took 4 minutes for the bacteria to double.
...and the final population was 2143.59 bacteria.

我得到的是为什么最终结果大于2000导致它应该在2000之前停止。我是否出错了?

7 个答案:

答案 0 :(得分:1)

您的代码显示:“只要人口少于2000,计算下一代的人口,然后再次检查”。因此,它总是计算一代太多。

试试这个:

while True:
   nextGen = population + growth_rate * population
   if nextGen > 2000: break
   population = nextGen
   print population
   time = time + 1

编辑:

或者得到确切的结果:

print (math.log (2) / math.log (1 + growth_rate) )

所以整个计划可能是:

import math

population = 1000
growth_rate = 0.21 # 21% growth per minute
t = math.log (2) / math.log (1 + growth_rate)
print 'It took {} minutes for the bacteria to double.'.format (t)
print '...and the final population was {} bacteria.'.format (2 * population)

答案 1 :(得分:1)

因为在您上一次迭代之前(下面的#4),它低于2,000 迭代次数#1:1210.0 迭代次数#2:1464.1 迭代#3:1771.561 迭代#4:2143.58881

另一种方法,虽然可能不那么优雅,但是会在你的While循环中添加一个中断(假设你所关心的不是打印任何高于2,000的数字):

while population < 2000:
    population = population + growth_rate * population
    if population >= 2000:
        break
    else:
        print population
        time = time + 1

答案 2 :(得分:0)

在循环的倒数第二次迭代中,总体小于2,000,所以还有另一次迭代。在最后的迭代中,人口变得超过2,000,因此循环退出。

如果人口每次增加1,那么你是正确的;循环将退出2,000。您可以使用更简单的版本来查看此行为:

i = 0
while i < 10:
    i += 1
    print i

改变i增加的金额,以便了解其变化情况。

答案 3 :(得分:0)

while循环是“入口控制”循环的示例。这意味着在进入循环之前检查条件。因此,这意味着如果在上一次迭代期间违反了循环条件,而不是在开始时,您的循环将在第一次违规后终止,而不是在它之前。

这是一个简单的例子:

>>> a = 1
>>> while a < 5:
...     a = a+3
...     print a
... 
4
7

所以,如果你想要你的循环必须在a大于或等于5之前退出,你必须在循环中进行检查并突破循环:

>>> a = 1
>>> while a < 5:
...     a = a+3
...     if a < 5:
...             print a
...     else:
...             break
... 
4

答案 4 :(得分:0)

所以你的代码就在这里:

while population < 2000:
    population = population + growth_rate*population

假设我们输入while循环和population = 1800,并且growth_rate = .21。这满足了while循环进入另一个循环的所有要求。但是,在下一行中,你将设置人口= 1800 +(。21)* 1800,等于2178.所以,当你打印人口时,即使它高于2000,也会说2178

你能做什么,是这样的:

while population < 2000:
    if population == population + growth_rate * population < 2000:
        population = population + growth_rate * population 
        time = time + 1
    else:
        break
    print population

答案 5 :(得分:0)

time = 0
population = 1000 # 1000 bacteria to start with 
growth_rate = 0.21 # 21% growth per minute
while population != 2*population:
    population = population + (growth_rate * population )
    time = time + 1
print "It took %d minutes for the bacteria to double." % time

我想你现在会得到正确的输出。

答案 6 :(得分:-1)

我认为这是一个简单的数学问题 - 你希望时间是一个整数,尽管它可能是一个浮点数。当人口达到2000时,循环不能停止,因为你计算它的方式,它永远不会有2000的值。