首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟简单细菌生长

模拟简单细菌生长
EN

Stack Overflow用户
提问于 2022-02-02 05:08:51
回答 2查看 307关注 0票数 -1

所以我试图模拟一种简单的细菌生长。这些规则如下:

  1. 每1小时一次,细菌每3小时加倍
  2. ,细菌总数下降25%

代码语言:javascript
复制
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

有人能指出错误吗?非常感谢

EN

回答 2

Stack Overflow用户

发布于 2022-02-02 05:58:35

您的代码相当笨重。ab变量到底是做什么的?只需使用init变量本身,如下所示:

代码语言:javascript
复制
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整除,则

  1. 使人口每迭代
  2. 增加一倍,将其设置为75%的自身

按照这个顺序。

输出

代码语言:javascript
复制
>>> print([int(i) for i in bakteri(50, 10)])
[100, 200, 300, 600, 1200, 1800, 3600, 7200, 10800]
票数 2
EN

Stack Overflow用户

发布于 2022-02-02 06:05:48

这里的问题是:

代码语言:javascript
复制
a = a - a*0.25
yield a
a, b = b, b*2

注意,在这里,即使a改变了,破坏了模式,b仍然没有被调整。这一变化发生之前,b = a*2就已经起床了。所以,在减少0.25后,细菌数量没有增加一倍,而是在减少前增加了一倍,然后继续进行。

保留原来的代码结构,下面是一个修改后的代码结构:

代码语言:javascript
复制
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",最好以不同的方式命名变量,以避免混淆。

尽管如此,有一种更有效的方法来编写这个程序。如果你不断完善你的代码和学习,随着时间的推移,它会自然而然地来到你身边。

更简单的代码:

代码语言:javascript
复制
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)])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70950750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档