2017-08-31 231 views
-2

我想写一个函数,计算一个细菌的种类需要为其最初的人口达到其最终人口的天数,因为每一天其人口增加一倍。我的代码是;Python - 虽然循环简单

def num_doublings(initial_population, final_population): 
    time = 0 
    while initial_population < final_population: 
     time+= 1 
     initial_population = initial_population * 2 
     print(time) 

这打印每一天,但我希望它只打印while循环停止所需的迭代总数。我的代码时,函数调用num_doublings(2, 8)输出是

1 
2 
3 

但我只需要它输出3.如何解决这个问题?

+3

只需推动'print'语句的左边,也就是出了'while'的循环。 –

+1

如果您不希望它在每次迭代中都打印,为什么在while循环中有打印呼叫? –

+4

为什么不使用数学?给定一个公式'x'的权力'y'等于或大于'z',你有'x'和'z',所以你只需要为'y'解决这个问题。 –

回答

2

你可以试试这个:

def num_doublings(initial_population, final_population): 
    time = 0 
    while initial_population <= final_population: 
     time+= 1 
     initial_population = initial_population * 2 

    return time 

该函数将返回时间变量,它是3,你给

0

你只需要拉while循环外print线的例子。像这样 -

def num_doublings(initial_population, final_population): 
    time = 1 
    while initial_population < final_population: 
     time+= 1 
     initial_population = initial_population * 2 
    print(time) 

注意,我初始化time =1

0

是范围问题,只是打印数据时while循环结束:

def num_doublings(initial_population, final_population): 
    time = 0 
    while initial_population < final_population: 
     time+= 1 
     initial_population = initial_population * 2 
    print(time) 
+0

你有三个输出吗? –

+0

@ClockSlave,问题的关键在于打印函数的范围,无论哪种方式,如果你更快乐地感觉自己的算法更加聪明,那么我们欢迎你。 – Netwave

+0

作弊在哪里呢?我只是指出,你不会得到'3'作为输出。这是否意味着作弊?另外,我不是那个压倒每个人的人。哎呀,我也被压低了。 –

-1

取消缩进的最后一行。

def num_doublings(initial_population, final_population): 
    time = 0 
    while initial_population < final_population: 
     time+= 1 
     initial_population = initial_population * 2 
    print(time) 
+0

我喜欢所有答案完全相同的事实,但其中一个答复的人低估了所有其他答案,以推动自己的答案。这就是为什么SE有时候这么糟糕...... – Gnarf

+1

此外,upvoted答案在技术上是错误的,因为问题是如何打印变量,而不是如何返回它。 – Gnarf

+4

除了upvoted回答者还没有投票的声望呢。 (不,我没有在这里投票)。 –

2

作为的Martijn Pieters的正确观察,在高性能的解决方案是不使用循环可言:

from math import log, ceil 

def num_doublings(initial, final): 
    return ceil(log(final/initial, 2))