如何在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