Python 如何让一个函数循环到另一个函数中,并在每次循环时使用不同的randint
因此,我有以下代码:Python 如何让一个函数循环到另一个函数中,并在每次循环时使用不同的randint,python,text,random,Python,Text,Random,因此,我有以下代码: def monsterturn(): global monster global playerhp turn = True print "Rolling for", monster, "...(14 or better to hit)" time.sleep(1) if r > 14: print r, "- The", monster, "
def monsterturn():
global monster
global playerhp
turn = True
print "Rolling for", monster, "...(14 or better to hit)"
time.sleep(1)
if r > 14:
print r, "- The", monster, "hit you!"
playerhp-=1
time.sleep(0.5)
print "Your HP:", playerhp
if playerhp == 0:
turn = False
time.sleep(0.5)
print "YOU HAVE BEEN SLAIN."
else:
turn = False
time.sleep(1.5)
playerturn()
elif r < 14:
print r, "- The", monster, "missed you."
turn = False
playerturn()
r = randrange(1, 21)
def monsterturn():
全球怪物
全球演奏家
转为真
打印“掷骰”,怪物,“…(命中14或更好)”
时间。睡眠(1)
如果r>14:
打印r,“-怪物”,打你
playerhp-=1
睡眠时间(0.5)
打印“您的HP:”,playerhp
如果playerhp==0:
转向=错误
睡眠时间(0.5)
打印“你被杀了。”
其他:
转向=错误
时间。睡眠(1.5)
playerturn()
elif r<14:
打印r,“-怪物”,想你。“
转向=错误
playerturn()
r=随机范围(1,21)
函数playerturn()
的结构与monsterturn()
完全相同,除了全局变量monsterhp代替playerhp,r2代替r,以及玩家对话代替怪物。问题是,它只计算一次随机整数,然后将其保持不变,这通常会导致没有人击中任何人,直到永远。如何让它每次都计算不同的随机整数
此外,调用函数
playerturn()
,最后触发monsterturn()
,触发playerturn()
,以此类推,直到有人死亡。在循环内而不是在循环外计算r
你也可以通过分解普通材料来大大提高这一点,使怪物和玩家拥有相同的回合功能。你可以通过避免引用全局变量和传递变化的细节(对手的生命值、要打印的消息等等)来实现这一点。我认为你应该重新考虑你的总体设计,因为这会导致你遇到问题。这在很大程度上是理论上的,但战斗时间越长,调用堆栈越深,最终可能导致堆栈溢出(并增加内存消耗;即使它继续正常运行) 相反,我建议您重新编写函数以返回布尔值,无论游戏是否应该继续。然后,只要两个函数都返回true,您就可以循环,这基本上意味着游戏将继续:
while playerturn() and monsterturn():
要使每次命中/攻击随机,您需要在使用前重新指定一个随机值:
...
time.sleep(1)
r = randrange(1, 21)
if r > 14
...
当playerturn()和monsterturn()的时候:
你不应该用globals来做这些