如何从函数中返回一个值并在while循环中引用它
基本上我想从健康检查函数返回一个值,这样我就可以阻止攻击海誓山盟的小宠物了。你会看到我已经遗漏了“if”这一行的其余部分,因为我不确定要放在这里。我需要一种方法来从healthcheck函数返回一个函数,但是我无法使return语句正常工作。如何从函数中返回一个值并在while循环中引用它
class enemy():
global enemylives
global dead
dead=0
enemylives=10
def healthcheck():
if enemylives<=0:
print("You defeated the enemy!")
while True:
time.sleep(1)
enemy1.attacked()
enemy1.healthcheck()
if
break;
time.sleep(1)
squirtle.attacked()
squirtle.healthcheck()
(这不是我的全部代码)
不知道你的游戏的逻辑是,但你应该创建属性,避免使用全球,使用实例的属性和方法。您可以使用sys.exit退出循环,如果你的敌人的生命得到0
import time
import sys
from random import random
class Enemy():
def __init__(self):
self.dead = 0
self.life = 100
def attack(self):
if random() > .20:
self.life -= 10
print("Attack successful, enemy life decreased by 10 to {}".format(self.life))
elif self.life <= 90:
self.life += 10
print("Attack unsuccessful, enemy increases life to {}".format(self.life))
def health_check(self):
if self.life <= 0:
print("You defeated the enemy!")
sys.exit()
enemy1 = Enemy()
while True:
time.sleep(1)
enemy1.attack()
enemy1.health_check()
time.sleep(1)
输出示例:
Attack successful, enemy life decreased by 10 to 90
Attack unsuccessful, enemy increases life to 100
Attack successful, enemy life decreased by 10 to 90
Attack successful, enemy life decreased by 10 to 80
Attack successful, enemy life decreased by 10 to 70
Attack successful, enemy life decreased by 10 to 60
Attack successful, enemy life decreased by 10 to 50
Attack unsuccessful, enemy increases life to 60
Attack unsuccessful, enemy increases life to 70
Attack successful, enemy life decreased by 10 to 60
Attack successful, enemy life decreased by 10 to 50
Attack successful, enemy life decreased by 10 to 40
Attack successful, enemy life decreased by 10 to 30
Attack successful, enemy life decreased by 10 to 20
Attack unsuccessful, enemy increases life to 30
Attack successful, enemy life decreased by 10 to 20
Attack successful, enemy life decreased by 10 to 10
Attack successful, enemy life decreased by 10 to 0
You defeated the enemy!
你也可以将它通过增加设置的攻击成功的几率困难属性或减少什么你比较随机的()到:
class Enemy():
def __init__(self,diff):
self.dead = 0
self.life = 100
self.diff = diff
def attack(self):
if random() > self.diff:
self.life -= 10
print("Attack successful, enemy life decreased by 10 to {}".format(self.life))
elif self.life <= 90:
self.life += 10
print("Attack unsuccessful, enemy increases life to {}".format(self.life))
def health_check(self):
if self.life <= 0:
print("You defeated the enemy!")
sys.exit()
enemy1 = Enemy(.20)
如果你想在同时打破,在方法返回并用,如果检查:
class Enemy():
def __init__(self,diff):
self.dead = 0
self.life = 100
self.diff = diff
def attack(self):
if random() > self.diff:
self.life -= 10
print("Attack successful, enemy life decreased by 10 to {}".format(self.life))
elif self.life <= 90:
self.life += 10
print("Attack unsuccessful, enemy increases life to {}".format(self.life))
def health_check(self):
if self.life <= 0:
print("You defeated the enemy!")
return True
return False
enemy1 = Enemy(.3)
while True:
time.sleep(1)
enemy1.attack()
if enemy1.health_check():
break
time.sleep(1)
我会返回一个布尔值而不是在方法内调用'sys.exit()'并让主循环决定使用'break','sys.exit()'或其他。 –
@PabloDíazOgni,是的,它实际上只是一个如何使用属性的例子,无论如何我都添加了替代。 –
您应该学习如何在尝试类之前使用函数和循环http://anandology.com/python-practice-book/ –