【发布时间】:2014-04-12 17:19:31
【问题描述】:
我正在计算机课上完成一项作业,但我很难处理其中的一段代码。我将发布分配指南(粗体部分是我遇到问题的代码):
您将创建一个模拟蚁群,用户将在其中 扮演女王的角色,负责管理健康 的殖民地。模拟将以回合制方式进行, 每回合用户可以选择花费宝贵的食物资源 更多的蚂蚁。
首先创建一个包含两个类的 python 文件 Ants.py:
Colony和Ant.
Colony类将有一个工蚁列表(最初为空),一个 食物量(最初是 10 个)和 3 种方法:
breedWorker()step()purge()
breedWorker()创建一个新的Ant并将其添加到殖民地的列表中 工蚁。创建一个工人需要花费 5 个殖民地的食物。如果有 食物不足,应向用户打印一条消息,并且不 应该创建 ant。
step()处理殖民地每回合的自动行为。 也就是说,这个方法将控制每只蚂蚁的行为 殖民地。每回合每只蚂蚁应该从蚁群的食物中吃掉一种食物 供应。如果没有足够的食物,蚂蚁将失去一分 而是健康。然后每只蚂蚁都会觅食(如下所述), 并且找到的任何食物都将重新添加到殖民地的食物供应中。
purge()扫描工蚁列表,将所有生命值为 0 的蚂蚁从列表中移除。对于每只死蚂蚁,食物供应量增加 1, 因为蚂蚁循环利用!我不知道如何确保列表中的所有蚂蚁都有健康,我不确定如何从列表中删除健康为零的蚂蚁。
Ant类将有
- 健康(初始设置为 10)
forage()方法
forage()随机确定蚂蚁在寻找时的运气 每一回合的食物。
- 蚂蚁有 5% 的几率死于一场可怕的事故(健康 = 0,不返回食物)
- 蚂蚁有 40% 的几率找到食物。找到的数量应该是 1 到 5 之间的随机数。
- 有一个 蚂蚁找不到食物的概率为 50%。
- 并且有 5% 的机会 蚂蚁找到了甜蜜的花蜜!她的健康得到补充(即,设置为 10)她带回了10个食物到殖民地!每次的结果 蚂蚁的觅食应该为用户打印并返回。
最后,您需要编写一个
main()方法来启动 模拟并反复提示用户选择。每转 用户应该可以选择培育一个新工人(成本为 5 食物),或者什么都不做(没有新的蚂蚁)。您的代码应检查用户的 输入错误并再次询问它是否无效。跟随用户的 行动(品种与否),殖民地将采取一个“步骤”,如所述 上面,最后,应该清除蚁群中所有死去的蚂蚁。 模拟应该像这样重复,直到殖民地不在两者中 蚂蚁和足够的食物来制造更多的蚂蚁。
这是我的代码:
import random
class Colony(object):
def __init__(self):
Colony.food = 10
Colony.numWorkerAnts = 0
Colony.workerAnts = []
def breedWorker(self):
print ("Breeding worker...")
Colony.numWorkerAnts += 1
Colony.food -= 5
Colony.workerAnts.append(1)
if (Colony.food < 5):
print ("Sorry, you do not have enough food to breed a new worker ant!")
def step(self):
for i in range(0,len(Colony.workerAnts)):
Colony.food -= 1
class Ant(object):
def __init__self(self):
Ant.health = 10
def forage(self):
foodFound = random.random()
if (foodFound <= 0.05):
print("Ant has died in an accident!")
Ant.health = 0
if (foodFound > 0.05 and foodFound < 0.40):
amountFood = random.randint(1,5)
print("Ant finds "+str(amountFood)+" food.")
Colony.food += amountFood
if (foodFound >= 0.40 and foodFound < 0.95):
print("Ant worker returns empty handed.")
if (foodFound >= 0.95):
print("Your ant finds sweet nectar! Ant returns "+str(amountFood)+" to the colony and health is restored to "+str(self.health)+"!")
amountFood = 10
Ant.health = 10
Colony.food = amountFood + Colony.food
def main():
colony = Colony()
ant = Ant()
while (Colony.numWorkerAnts >= 1 or Colony.food >= 5):
print ("Your colony has "+str(Colony.numWorkerAnts)+" ants and "+str(Colony.food)+" food, Your Majesty.")
print ("What would you like to do?")
print ("0. Do nothing")
print ("1. Breed worker (costs 5 food)")
prompt = '> '
choice = int(raw_input(prompt))
if (choice == 1):
colony.breedWorker()
colony.step()
for i in range(0, len(Colony.workerAnts)):
ant.forage()
else:
for i in range(0, len(Colony.workerAnts)):
ant.forage()
colony.step()
main()
【问题讨论】:
-
您遇到的错误或面临的问题是什么?
-
很不清楚你在问什么 - 你真正做的只是为我们抄写你的家庭作业。
-
我无法理解如何确保列表中的所有蚂蚁都具有健康状况,并且我不确定如何从列表中删除健康状况为零的蚂蚁。
-
@hivert 在您进行编辑时请不要从帖子中删除相关信息(查看问题的修订历史以查看您删除的内容)
-
@MarissaLeigh 不是你要问的,但你应该在培育一个新工人之前检查是否有足够的食物。您的代码存在很多问题 - 我建议您与您的教授或学生助理交谈以帮助您。