python - 尝试使用 Python 代码确定生物体的 "height"

标签 python if-statement while-loop

我正在尝试获取一个包含列表的文本文件,其中获取输入值并在“高度”中对它们进行排名,这意味着任何只吃生产者的动物的高度都是 1。

我想我对如何解决这个问题的理解很低:

  1. 将包括生产者在内的所有生物的高度设置为0
  2. 标记有变化
  3. 虽然有些事情发生了变化......
    1. 标记没有任何变化
    2. 对于食物网中的每只动物,a
      1. 对于每只动物,pa 捕食
        1. 如果a的高度小于或等于p的高度,将a的高度设置为高度并标记某些东西发生了变化

非常感谢任何帮助。我希望我的信息没有太罗嗦或混淆

foodweb = {}

with open('AquaticFoodWeb.txt') as input:
    for line in input:
        animal, prey = line.strip().split(' eats ')
        foodweb.setdefault(animal, []).append(prey)

print ("Predators and Prey:")

for animal, prey in sorted(foodweb.items()):
    if len(prey) > 1:
        print ("{} eats {} and {}".format(animal, ", ".join(prey[:-1]),     prey[-1]))
    else:
        print ("{} eats {}".format(animal, ", ".join(prey)))

#Apex

values = [item.strip() for sub in foodweb.values() for item in sub]
for apex in foodweb.keys():
    if apex.strip() not in values:
        print("Apex Predators: ", apex)

这是文本文件输入:

Bird eats Prawn
Bird eats Mussels
Bird eats Crab
Bird eats Limpets
Bird eats Whelk
Crab eats Mussels
Crab eats Limpets
Fish eats Prawn
Limpets eats Seaweed
Lobster eats Crab
Lobster eats Mussels
Lobster eats Limpets
Lobster eats Whelk
Mussels eats Phytoplankton
Mussels eats Zooplankton
Prawn eats Zooplankton
Whelk eats Limpets
Whelk eats Mussels
Zooplankton eats Phytoplankton

想要的输出:

 Heights:
  Bird: 4
  Crab: 3
  Fish: 3
  Limpets: 1
  Lobster: 4
  Mussels: 2
  Phytoplankton: 0
  Prawn: 2
  Seaweed: 0
  Whelk: 3
  Zooplankton: 1

最佳答案

这不是一个糟糕的开始。我对它需要什么的分析:

对于每个有机体,高度比最大高度多一 它吃的生物。海藻和浮游植物为 0,因为它们不 吃任何东西。浮游动物和帽贝是 1,因为它们只吃 0级生物。

因此,从生物体到它们所吃食物列表的映射开始。你 有那个,除了你需要添加一行也将捕获 不吃任何东西的最低级生物:

with open('AquaticFoodWeb.txt') as input:
    for line in input:
        animal, prey = line.strip().split(' eats ')
        foodweb.setdefault(animal, []).append(prey)
        foodweb.setdefault(prey, [])  # new line of code

其余的,只是一个大纲,因为这听起来像是家庭作业,而且我 不会剥夺你的教育。

下一步是将 foodweb 转换为另一个映射,来自 organisms 到高处。在这里,我将按值的长度排序,将 level-0 生物体在上面,然后进行一次或多次通过。对于每个键,如果 所有猎物生物的高度都是已知的,为键分配最大值 高度加一,然后从 foodweb 中删除此键。

0级生物因为没有猎物,所以马上加入。然后 我们捕获吃它们的东西。可能需要不止一个 通过,但最终 foodweb 将为空,输出将为 满了。

关于python - 尝试使用 Python 代码确定生物体的 "height",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34039884/

相关文章:

python - 如何通过 CLI 连接到运行在 Docker 容器中的 Redis

c++ - ',' 在 if 语法中意味着什么?

c# - 在 while 循环的条件之后放置一个分号会发生什么?

php - foreach 在 while 循环中获取行值...?

python Pandas : groupby apply function looks at prior rows

python - 停止 Tkinter 窗口而不关闭它

python - 如何使用 Python 在特定逗号上进行拆分

比较 if 语句中的指针值

c - else 语句遵循什么顺序?

Java程序根据字符串比较不退出