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来做这些