所以我试图模拟一种简单的细菌生长。这些规则如下:
。
def bakteri(init,hour):
a = init*2
b = a*2
for t in range (1,hour):
if t % 3 == 0:
a = a - a*0.25
yield a
a, b = b, b*2
else:
a = a
yield a
a, b=b, b*2
a = [int(i) for i in bakteri(50,10)]
print(a)我试过了,但结果显示100,200,300,800,1600,2400,6400,12800,19200
当它应该是100,200,300,600,1200,1800,3600,7200,10800,21600
有人能指出错误吗?非常感谢
发布于 2022-02-02 05:58:35
您的代码相当笨重。a和b变量到底是做什么的?只需使用init变量本身,如下所示:
def bakteri(init, hour):
for i in range(1, hour + 1):
init *= 2 # Same as init = init * 2
if i % 3 == 0:
init = 0.75 * init
yield init这是一个非常简单的问题,有一个非常简单的解决方案。看起来好像你已经把它复杂化了--一个更有必要的多。你要做的就是:
如果迭代数可被3整除,则
。
按照这个顺序。
输出
>>> print([int(i) for i in bakteri(50, 10)])
[100, 200, 300, 600, 1200, 1800, 3600, 7200, 10800]发布于 2022-02-02 06:05:48
这里的问题是:
a = a - a*0.25
yield a
a, b = b, b*2注意,在这里,即使a改变了,破坏了模式,b仍然没有被调整。这一变化发生之前,b = a*2就已经起床了。所以,在减少0.25后,细菌数量没有增加一倍,而是在减少前增加了一倍,然后继续进行。
保留原来的代码结构,下面是一个修改后的代码结构:
def bakteri(init,hour):
a = init*2
for t in range (1,hour+1):
if t % 3 == 0:
a = a - a*0.25
b = a*2
yield a
a, b = b, b*2
print(a, b)
else:
a = a
b = a * 2
yield a
a, b = b, b*2
print(a,b)
output = [int(i) for i in bakteri(50,10)]
print(output)在将一个值赋值给a之后,您需要为if和b = a*2块指定一个值。
还请注意,range(a,b)停留在b-1。所以当你做for t in range (1, hour)的时候,它只做了1到9,而不是1到10。
(我还将最后两行中的"a“改为"output",最好以不同的方式命名变量,以避免混淆。
尽管如此,有一种更有效的方法来编写这个程序。如果你不断完善你的代码和学习,随着时间的推移,它会自然而然地来到你身边。
更简单的代码:
def bakteri(init, hour):
for i in range(1, hour+1):
init = init * 2
if i % 3 == 0:
init = init * 0.75 # Times 0.75 is the same as decrease by 0.25
yield init
print([int(i) for i in bakteri(50, 10)])https://stackoverflow.com/questions/70950750
复制相似问题