2017-10-24 6 views
0

私はPythonには比較的新しいですが、プログラミングには比較的新しいです。 If条件が誤って処理しつつある、と「他」部分が印刷されていますPython条件が実行されない場合は、他の条件だけが処理されます。

if self.health_points <= -1 and self._foo__is_dead == False: 
    print("Enemy Terminated") 
else: 
    print("Enemy is dead") 

私は2つの変数をプリントアウトし、彼らは「14」の入力のための真の状態を作ります。それでも、なぜelse部分が実行されていますか? どうか私は間違っていますか?

class Enemy: 
health_points = 5 
_foo__is_dead = False 

def set_hp(self,points_to_set): 
    if self._foo__is_dead == False: 
     self.health_points = points_to_set 
    else: 
     print("Enemy is already dead") 

def attack(self): 
    print("Hit confirmed") 
    self.health_points -= 1 

    if self.health_points <= -1: 
     self._foo__is_dead = true 

    print(self._foo__is_dead) 
    print(self.health_points) 

    if (self.health_points <= -1 and self._foo__is_dead == False): 
     print("Enemy Terminated") 
    else: 
     print("Enemy is dead") 

#Connected to pydev debugger (build 172.3968.37) 
#Enter hit points for first enemy14 
#Hit confirmed 
#False 
#13 


def reveal_hp(self): 
    if self._foo__is_dead == False: 
     print(self.health_points, " health points remaining") 
    else: 
     print("Enemy is already dead") 


first_enemy = Enemy() 

try: 
one_hp = int(input("Enter hit points for first enemy")) 
except ValueError or one_hp > 100: 
print("Enter only numerical values and less than 100") 
exit(0) 

first_enemy.set_hp(one_hp) 
first_enemy.attack() 
first_enemy.reveal_hp() 
+0

をのみ、他の実行されている場合は、あなたの状態は常にfalseであることを意味しています。あなたは '_foo__is_dead'があなたの考えだと確信していますか?また、別のフラグを立てて死を追跡することは、過度に複雑に思えます。ヘルス値に関して定義されている 'isDead'を定義する方が簡単です。 – Carcigenicate

+0

ようこそStackOverflowへ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 投稿したコードをテキストファイルに貼り付け、説明した問題を再現できるはずです。 – Prune

+0

最初の句(負のHP)が偽(その時点でHP = 13)しているため、 'else'部分が実行されています。これは 'if'文がどのように動作するかです。あなたはどこで混乱していますか? – Prune

答えて

0

あなたはロジックをかなり正しく考えていません。現在、敵の健康状態がゼロで死んでいない場合は、殺されたと言います。もしそうでなければ、健康が残っていてもすでに死んでいると言います。その最終チェックを追加するだけです。

あなたがこのスワップ場合、それはあなたのために正常に動作する必要がありますこのような何かのために

if (self.health_points <= -1 and self._foo__is_dead == False): 
    print("Enemy Terminated") 
else: 
    print("Enemy is dead") 

を:

if self.health_points <= -1: 
    if not self._foo__is_dead: 
     self._foo__is_dead = True 
     print("Enemy Terminated") 
    else: 
     print("Enemy is dead") 
else: 
    print("Enemy has {} health remaining".format(self.health_points)) 
+0

Peterに感謝します。それは完璧に働いた。 私のロジックでこの欠陥を知ることができますか? 私のコードで何が起こったのですか? –

+0

問題が見つかりました。 ご協力いただきありがとうございます。 –

関連する問題