2014-12-07 41 views
-1

所以我一直在阅读Zed Shaw的“Learn Python the Hard Way”一书,它说使用超过2个if语句很糟糕。我目前正在写一个游戏,它会更有意义,我使用多个if语句:为什么认为深度超过2时认为不好?

shoot = -50 
zombie_hp = -100 

def zombie1(shoot, zombie_hp): 
    return shoot - zombie_hp 

def attack(): 
    attack = raw_input("What will you do?: ") 
    print zombie1(zombie_hp, shoot) 
    if attack == "shoot": 
     if shoot == -50: 
      print "Zombie health 50/100" 
      attack2 = raw_input("What will you do?: ") 
      print zombie1(zombie_hp, shoot) 
      if attack == "shoot": 
       print "Zombie health 0/100 (Zombie dies)" 
attack() 

现在为什么这样做不好if语句深深这一去3?谢谢!

+2

做,如果攻击==拍和拍== -50:这是不是真的坏(如一切都将正常工作),但它取决于上下文真的。如果你可以避免使用大量的if语句,它会使你的代码清理器。 – 2014-12-07 04:42:42

+1

我认为所有的语言:这只是丑陋的看看。顺便说一句,你不需要第二个'如果攻击==“射击”'因为你已经在你的第一个if语句中检查了它。 – Mikey 2014-12-07 05:01:37

+0

这里的问题不是嵌套深度本身,它更普遍的是糟糕的代码结构。内部的'if'是外部部分的重复,这使得你容易受到攻击而不是'attack2'的攻击。此外,全局变量是一个坏主意,考虑面向对象,有一个'健康'属性的'僵尸'类实例。 – jonrsharpe 2014-12-07 09:12:28

回答

1

我认为这是深嵌套if分支可以限制您的代码可以扩展很容易。举个例子,如果将来你想要实施不同程度伤害的攻击或具有不同数量生命值的僵尸,会怎么样?我的建议是避免委托自己为每个不同的攻击序列和僵尸组合创建明确不同的if分支条件。

这个链接也给出了为什么你可能想避免这种模式的一些更具体的例子: http://c2.com/cgi/wiki?ArrowAntiPattern

0

1)使之更难以对其他开发者理解,更重要的是 - 这使得它更难为自己了解你什么时候回头看。

2)它使你的代码不灵活和脆弱。

3)Tell, don't ask

相关问题