如何让一个函数循环到另一个函数,然后每个函数使用不同的randint进行循环

2024-09-27 23:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有以下代码:

    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)

函数playerturn()的结构与monsterturn()完全相同,只是使用了全局变量monsterhp而不是playerhp,r2而不是r,以及针对玩家的对话而不是怪物。问题是,它只计算一次一个随机整数,然后一直保持这个整数,结果往往是没有人打任何人。如何让它每次计算一个不同的随机整数?你知道吗

另外,调用函数playerturn(),最后触发monsterturn(),触发playerturn(),依此类推,直到有人死。你知道吗


Tags: theyoufalseiftimesleep整数global
2条回答

在循环内计算r,而不是在循环外。你知道吗

你也可以通过分解常见的材料来提高这一点,这样怪物和玩家就有了相同的回合功能。您可以通过避免引用全局变量并传递更改的细节(对手的命中率、要打印的消息等)来实现这一点

我认为你应该重新考虑一下你的整体设计,因为这会让你遇到问题。这在很大程度上是理论上的,但是战斗时间越长,调用堆栈就越深,最终可能导致堆栈溢出(并且还会增加内存消耗;即使它继续正常运行)。你知道吗

相反,我建议您修改函数以返回布尔值,无论游戏是否应该继续。然后,只要两个函数都返回true,就可以循环,本质上意味着游戏继续:

while playerturn() and monsterturn():

要使每次命中/攻击随机,您需要在使用r之前重新分配一个随机值:

...
time.sleep(1)
r = randrange(1, 21)
if r > 14
    ...

相关问题 更多 >

    热门问题