【发布时间】:2020-05-19 07:40:08
【问题描述】:
我正在尝试解决以下挑战,但无济于事: 僵尸从距离米开始,以每秒 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循环是什么吗? (这听起来可能很刻薄,但我保证这是真诚的) -
哈哈,是的,我想输入“while distance>0”,但在这种情况下这行不通,而且我不确定如何继续迭代我的程序(也许“for i在范围内(距离)”?)。
-
你已经接近了。为什么你认为
while distance > 0不起作用? -
我应该补充一下,作为一个新程序员,您可能有兴趣学习橡皮鸭编程en.wikipedia.org/wiki/Rubber_duck_debugging我认为它可以帮助您解决这里的问题
-
我错过了什么吗?这个谜题不需要循环或任何类似的东西。这是简单的算术:
return ammo >= zombies and distance_in_metres > zombies * 0.5。
标签: python python-3.x algorithm if-statement while-loop