gpt4 book ai didi

Python挑战:zombies

转载 作者:行者123 更新时间:2023-12-02 07:39:57 26 4
gpt4 key购买 nike

我正在尝试解决以下挑战,但无济于事:僵尸的起始距离为米,移动速度为每秒 0.5 米。每一秒,你首先射击一个僵尸,然后剩下的僵尸又向前移动 0.5 米。

如果任何僵尸设法到达 0 米,你就会被吃掉。如果你在射击所有僵尸之前耗尽了弹药,你也会被吃掉。为了简单起见,我们可以忽略重新加载所花费的时间。

编写一个函数,接受僵尸总数、范围(以米为单位)以及您拥有的子弹数量。

如果您射杀了所有僵尸,则返回“您射杀了所有 X 个僵尸”。如果您在杀死所有僵尸之前且弹药用完之前被吃掉,请返回“您在被吃掉之前射击了 X 个僵尸:不知所措。”如果您在射击所有僵尸之前耗尽了弹药,请返回“您在被吃掉之前射击了 X 个僵尸:弹药耗尽。”

(如果在剩余僵尸到达时你的弹药耗尽,则返回“你在被吃掉之前射杀了 X 个僵尸:不知所措。”。)

到目前为止我的代码是:

def zombie_shootout(zombies, distance, ammo):
if ammo >= zombies:
ammo -= 1
zombies -= 1
distance -= 0.5
elif ammo < zombies:
print("You shot ",zombies,"zombies before being eaten: ran out of ammo.")
elif distance == 0:
print("You shot ",zombies,"zombies before being eaten: overwhelmed.")
else:
print("You shot all ", zombies,"zombies.")

我知道对于那些无法解决这个难题的人来说有一些解决方案,但它们很可能更加简洁和优雅,我想知道如何(如果可能的话)去做这件事我的方式(很多 ifs 和 elifs,也许在某个地方添加一段时间)。

最佳答案

让我们看一下您的代码:您在注释中说过您知道在某个地方需要一个 while 循环,所以让我们考虑一下应该在该循环上放置什么条件。我们想继续射击,直到弹药用完、僵尸吃掉我们,或者僵尸用完。我们可以使用 all() 来检查所有变量是否大于 0:

while all(x > 0 for x in (distance, ammo, zombies)):

这相当于:

while distance>0 and ammo>0 and zombies>0:

虽然此条件为True,但我们希望在您的问题中应用您的 if 语句中已有的逻辑。您还想打印被射击的僵尸数量,所以让我们添加一个 zombies_shot 变量,并在函数开始时将其设置为 0,并每隔一段时间递增一次我们运行 while 循环的时间。我们现在有:

def zombie_shootout(zombies, distance, ammo):
zombies_shot = 0
while all(x>0 for x in (distance, ammo, zombies)):
ammo -= 1
zombies_shot += 1
zombies -= 1
distance -= 0.5

所以现在我们需要在跳出 while 循环后检查条件。你几乎也遇到了这种情况,但我们还要检查是否还有剩余的僵尸,否则,例如,如果我们在最后一个僵尸到达我们之前射击它,你的函数仍然会说我们被吃掉了。我们还可以使用新的 zombies_shot 变量。

if ammo <= 0 and zombies > 0:
print("You shot",zombies_shot,"zombies before being eaten: ran out of ammo.")
elif distance <= 0 and zombies > 0:
print("You shot",zombies_shot,"zombies before being eaten: overwhelmed.")
else:
print("You shot all", zombies_shot,"zombies.")

我们还可以添加 return 语句而不是 print 语句,但这取决于您。我们现在的完整功能是:

def zombie_shootout(zombies, distance, ammo):
zombies_shot = 0
while all(x>0 for x in (distance, ammo, zombies)):
ammo -= 1
zombies_shot += 1
zombies -= 1
distance -= 0.5
if ammo <= 0 and zombies > 0:
print("You shot",zombies_shot,"zombies before being eaten: ran out of ammo.")
elif distance <= 0 and zombies > 0:
print("You shot",zombies_shot,"zombies before being eaten: overwhelmed.")
else:
print("You shot all", zombies_shot,"zombies.")

关于Python挑战:zombies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60041098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com