如何在python3中结束这种循环(while)

如何在python3中结束这种循环(while),python,python-3.x,Python,Python 3.x,我不知道如何结束这个循环:( 随机导入 阶级敌人: 寿命=300 打印('Player 1你的生命是'+str(生命)+'hp') def bonusdmg(自身): bondmg=random.randrange(40,51) 打印('Congreatz u Make'+str(bondmg)+'bonus dmg') 自我生活-=bondmg def攻击(自我): ad1=随机。随机范围(50,81) 打印(str(ad1)+“dmg”) 打印(‘哎哟’) self.life-=ad1 de

我不知道如何结束这个循环:(

随机导入
阶级敌人:
寿命=300
打印('Player 1你的生命是'+str(生命)+'hp')
def bonusdmg(自身):
bondmg=random.randrange(40,51)
打印('Congreatz u Make'+str(bondmg)+'bonus dmg')
自我生活-=bondmg
def攻击(自我):
ad1=随机。随机范围(50,81)
打印(str(ad1)+“dmg”)
打印(‘哎哟’)
self.life-=ad1
def攻击2(自身):
ad2=随机随机随机范围(60,90)
打印(str(ad2)+“dmg”)
打印('arghhh')
self.life-=ad2
def攻击3(自身):
ad3=random.randrange(100111)
打印(str(ad3)+“dmg”)
打印(‘tsshaaah’)
self.life-=ad3
def heal(自我):
hp=random.randrange(40,51)
打印('不再有药剂')
self.life+=hp
打印(str(hp)+“hp已恢复”)
def检查寿命(自我):

如果self.life您可以在满足某个条件后尝试断开循环。例如,可以这样尝试:

# in while loop

if condition_is_true:
    break
否则,您需要在while循环的声明中指定一个条件。我建议使用这种技术,因为它不会关闭您的程序。如果您有循环,它也可以执行循环下面的代码

while condition_is_true:

虽然您的代码有很多错误,但我认为您所指的无限循环位于内部循环中

turn = 1
if turn ==1:
    while 1: #this cause a problem, how are you going to exit this loop?
        #rest of the code

你永远不会改变
turn=2
,因此if语句
turn==1
总是
True
。你需要找到一个地方来做
turn=2
,这样第二个玩家就可以移动了。但这并不能解决你所有的问题。

我已经清理了很多,下面有一些注释

import random

class Player:
    def __init__(self, num):
        self.num = num
        self.life = 300
        print('%s your life is %d hp' % (self, self.life))
        self.enemy = None

    def __str__(self):
        return "Player %d" % self.num

    def bonusdmg(self):
        bondmg=random.randrange(40,51)
        print('congratz u made %d bonus dmg' % bondmg)
        self.deal_damage(bondmg)

    def attack(self):
        ad1=random.randrange(50,81)
        print('You attack for %d dmg -- ouch' % ad1)
        self.deal_damage(ad1)

    def attack2(self):
        ad2=random.randrange(60,90)
        print('You attack for %d dmg -- arghhh' % ad2)
        self.deal_damage(ad2)

    def attack3(self):
        ad3=random.randrange(100,111)
        print('You attack for %d dmg -- tsshaaah' % ad3)
        self.deal_damage(ad3)

    def heal(self):
        hp=random.randrange(40,51)
        print ('No more potions')
        self.life += hp
        print('%d hp have been restored' % hp)

    def checkEnemyLife(self):
        if self.enemy.life <=0:
            return "%s is dead" % self.enemy
        else:
            return "%s has %d hp left" % (self.enemy, self.enemy.life)



    # New
    def take_damage(self, amt):
        print('%s takes %d dmg' % (self, amt))
        self.life -= amt

    # New
    def deal_damage(self, amt):
        self.enemy.take_damage(amt)
        print(self.checkEnemyLife())

    # New
    def handle_action(self, player_move):
        if player_move =='a':  self.attack()
        if player_move =='s':  self.attack2()
        if player_move == 'd': self.attack3()

        bonus=str(random.randrange(1,6))
        if bonus==2:    # Fixed this
            self.bonusdmg()


    # New
    def turn(self):
        print("")
        player_move = raw_input("%s it's your turn!  Choose your attack! " % self)
        self.handle_action(player_move)

    # New
    def won(self):
        return (self.enemy.life <= 0)


player1 = Player(1)
player2 = Player(2)
player1.enemy = player2
player2.enemy = player1

# Enemy class
# life as attribute
# raw_input
# string formatting



turn = 1    # Moved this
run_game = True
while run_game:
    if turn == 1:
        player1.turn()
        if player1.won():
            print("Player 1 wins")
            run_game = False
            break
        turn += 1

    elif turn == 2:
        player2.turn()
        if player2.won():
            print("Player 2 wins")
            run_game = False
            break
        turn -= 1
随机导入
职业球员:
定义初始化(self,num):
self.num=num
自我寿命=300
打印(“%s”您的生命是%d个生命“%”(self,self.life))
敌我=无
定义(自我):
返回“玩家%d”%self.num
def bonusdmg(自身):
bondmg=random.randrange(40,51)
打印('祝贺您取得了%d个奖金dmg'%1!')
自我伤害(邦德明)
def攻击(自我):
ad1=随机。随机范围(50,81)
打印('您攻击了%d个dmg--哎哟'%ad1!')
自身造成伤害(ad1)
def攻击2(自身):
ad2=随机随机随机范围(60,90)
打印('您攻击了%d个dmg--arghhh“%ad2”)
自身造成伤害(ad2)
def攻击3(自身):
ad3=random.randrange(100111)
打印('您攻击%d个dmg--tsshaaah'%ad3]
自我伤害(ad3)
def heal(自我):
hp=random.randrange(40,51)
打印('不再有药剂')
self.life+=hp
打印(“%d hp已还原为“%hp”)
def checkEnemyLife(自我):

如果是self.defest.life,它应该如何结束?我的意思是,换句话说,你想要什么作为退出条件?敌方和敌人的职业有什么区别redundant@DanielJimenez:这是一个错误,但他这样做是因为他使用的是类变量而不是实例变量。例如,他应该在u i中设置self.life方法,而不是在类定义中指定生命。@SteveS是的,这就是我想要的though@SteveS在我看来,代码似乎没有按预期工作。不按预期工作的代码完全脱离主题。在向其他用户推荐此Stack Exchange站点之前,请阅读。
import random

class Player:
    def __init__(self, num):
        self.num = num
        self.life = 300
        print('%s your life is %d hp' % (self, self.life))
        self.enemy = None

    def __str__(self):
        return "Player %d" % self.num

    def bonusdmg(self):
        bondmg=random.randrange(40,51)
        print('congratz u made %d bonus dmg' % bondmg)
        self.deal_damage(bondmg)

    def attack(self):
        ad1=random.randrange(50,81)
        print('You attack for %d dmg -- ouch' % ad1)
        self.deal_damage(ad1)

    def attack2(self):
        ad2=random.randrange(60,90)
        print('You attack for %d dmg -- arghhh' % ad2)
        self.deal_damage(ad2)

    def attack3(self):
        ad3=random.randrange(100,111)
        print('You attack for %d dmg -- tsshaaah' % ad3)
        self.deal_damage(ad3)

    def heal(self):
        hp=random.randrange(40,51)
        print ('No more potions')
        self.life += hp
        print('%d hp have been restored' % hp)

    def checkEnemyLife(self):
        if self.enemy.life <=0:
            return "%s is dead" % self.enemy
        else:
            return "%s has %d hp left" % (self.enemy, self.enemy.life)



    # New
    def take_damage(self, amt):
        print('%s takes %d dmg' % (self, amt))
        self.life -= amt

    # New
    def deal_damage(self, amt):
        self.enemy.take_damage(amt)
        print(self.checkEnemyLife())

    # New
    def handle_action(self, player_move):
        if player_move =='a':  self.attack()
        if player_move =='s':  self.attack2()
        if player_move == 'd': self.attack3()

        bonus=str(random.randrange(1,6))
        if bonus==2:    # Fixed this
            self.bonusdmg()


    # New
    def turn(self):
        print("")
        player_move = raw_input("%s it's your turn!  Choose your attack! " % self)
        self.handle_action(player_move)

    # New
    def won(self):
        return (self.enemy.life <= 0)


player1 = Player(1)
player2 = Player(2)
player1.enemy = player2
player2.enemy = player1

# Enemy class
# life as attribute
# raw_input
# string formatting



turn = 1    # Moved this
run_game = True
while run_game:
    if turn == 1:
        player1.turn()
        if player1.won():
            print("Player 1 wins")
            run_game = False
            break
        turn += 1

    elif turn == 2:
        player2.turn()
        if player2.won():
            print("Player 2 wins")
            run_game = False
            break
        turn -= 1