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

时间:2015-03-06 22:02:33

标签: python python-3.x

我无法弄清楚如何结束这个循环:(

import random

class Enemy:
    life = 300
    print ('Player 1 your life is ' + str(life) + ' hp' )

    def bonusdmg(self):
        bondmg=random.randrange(40,51)
        print('congratz u made ' + str(bondmg)+' bonus dmg')
        self.life-=bondmg
    def attack(self):
        ad1=random.randrange(50,81)
        print(str(ad1) + 'dmg')
        print('ouch')
        self.life -=ad1
    def attack2(self):
        ad2=random.randrange(60,90)
        print(str(ad2) + 'dmg')
        print('arghhh')
        self.life -=ad2
    def attack3(self):
        ad3=random.randrange(100,111)
        print(str(ad3) + 'dmg')
        print('tsshaaah')
        self.life -=ad3

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

    def checkLife(self):
        if self.life <=0:
            print('Your enemy is dead')
        else:
            print(str(self.life) + "hp life left")

class Enemy2:
    life = 300
    print ('Player 2 your life is ' + str(life) + ' hp' )

    def bonusdmg(self):
        bondmg=random.randrange(40,51)
        print('congratz u made ' + str(bondmg)+' bonus dmg')
        self.life-=bondmg
    def attack(self):
        ad1=random.randrange(50,81)
        print(str(ad1) + 'dmg')
        print('ouch')
        self.life -=ad1
    def attack2(self):
        ad2=random.randrange(60,90)
        print(str(ad2) + 'dmg')
        print('arghhh')
        self.life -=ad2
    def attack3(self):
        ad3=random.randrange(100,111)
        print(str(ad3) + 'dmg')
        print('tsshaaah')
        self.life -=ad3

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

    def checkLife(self):
        if self.life <=0:
            print('Your enemy is dead')
        else:
            print(str(self.life) + "hp life left")

enemy2 = Enemy2()
enemy1 = Enemy()
while 1:
    turn = 1
    if turn ==1:
        while 1:
            print('Player 1 is your turn !')
            bonus=str(random.randrange(1,6))
            player_move=input('Player1 choose your attack !')
            if player_move =='a':
                enemy1.attack()
                enemy1.checkLife()
                turn +=1
                break
            if player_move =='s':
                enemy1.attack2()
                enemy1.checkLife()
                turn +=1
                break
            if player_move == 'd':
                enemy1.attack3()
                enemy1.checkLife()
                turn +=1
                break
            if enemy1.life <=0:
                break
            if bonus=='2':
                enemy1.bonusdmg()

    if turn ==2:
        while 1:
            print('Player 2 is your turn !')
            bonus=str(random.randrange(1,6))
            player_move=input('Player2 choose your attack !')
            if player_move =='a':
                enemy1.attack()
                enemy1.checkLife()
                turn -=1
                break
            if player_move =='s':
                enemy1.attack2()
                enemy1.checkLife()
                turn -= 1
                break
            if player_move == 'd':
                enemy1.attack3()
                enemy1.checkLife()
                turn -=1
                break
            if enemy1.life <=0:
                break
            if bonus=='2':
                enemy1.bonusdmg()

3 个答案:

答案 0 :(得分:2)

一旦满足某个条件,您可以尝试打破循环。例如,试试这样:

# in while loop

if condition_is_true:
    break

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

while condition_is_true:

答案 1 :(得分:1)

我清理了很多这个,底部的一些笔记。

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
  • Enemy个班级设为一个Player班级,player1player2是同一班级的实例。
  • 给每个Player个实例提供一个对他们敌人的引用,这样他们就不会对自己造成伤害。
  • 创建了一系列有助于简化主游戏循环的方法
  • 使用字符串格式(%)运算符改进打印。
  • input更改为更安全的raw_input
  • life现在是实例属性,而不是类属性
  • 其他较小的更改

答案 2 :(得分:0)

虽然你的代码有很多错误,但我认为你所指的无限循环是在内循环中

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,以便第二个玩家可以移动。但这并不能解决您的所有问题。