每次调用函数时随机化它

2021-01-21 23:51:21 发布

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

如何让python3在每次调用它时从列表中随机选择一个项目? 我有两个函数需要处理。我试过物品=随机.randint()和项=随机选择(),但那些人只随机化一次,然后将其存储到item中。在

这里有两个函数。 对于函数1,每次调用它时,我需要该项随机化,这样玩家每次都会得到一个随机项。对于函数2,我需要玩家和老鼠攻击在我选择的数字范围内随机化。所以每当玩家攻击时,它在10到30之间,当老鼠攻击时,它在10到15之间。它必须每转一圈。在

这可能吗?在

功能1。在

def chest(sector):
    item = random.choice(items)
    print("You see a chest, you unlock it and inside is '{0}'".format(item))
    print()
    if item in inventory:
        print("You already have a {0}".format(item))
    item_take = input("Do you wish to take the '{0}'?: ".format(item)).lower()
    if item_take == ("yes"):
        inventory.append(item)
        if item == "Armor":
            player["hp"] = 150
        print("The {0} has been added to your inventory!".format(item))
        sector()
    else:
        print("You don't take the '{0}'!".format(item))
        print()
        sector()

功能2。在

^{2}$
2条回答
网友
1楼 ·

chest()很好。在

对于attack(),将att元素转换为函数,然后根据需要调用它。在

  att=lambda: random.randint(...),

 ...

      dmg = player['att']()
       ...
网友
2楼 ·

除非您尝试完全不使用类(可能是作为类工作或理解函数式编程或字典的练习),否则python类会大量清理代码。这也带来了许多连锁反应的好处。例如,在这段代码中,我可以很容易地访问最小和最大攻击值,可能会显示在棋盘或攻击对话框中的角色标记上。这是一个简单的示例,您需要扩展它并进一步修改它以满足您的需要。就我个人而言,我会包含一个“take khu damage”函数,它可以处理攻击的伤害(这样,如果我想在自己的函数中实现其他与伤害相关的效果,我可以将atk_min或atk_max作为所受伤害的函数来减少),对于每个变量,我都有另一个“当前”变量(自电流, 自电流最大值, 自电流),等等。这样,我可以独立于当前变量跟踪原始值,并在不丢失原始值的情况下应用项目加值、魔法加成、伤害惩罚等。在

from random import randint
class Character():
    def __init__(self, name, atk_min, atk_max, hp):
        self.name = name
        self.atk_min = atk_min
        self.atk_max = atk_max
        self.hp = hp

    def attack(self):
        return randint(self.atk_min, self.atk_max)

rat = Character('rat', 10, 15, 20)
player = Character('Player', 15, 30, 100)

我知道代码比较长,但它更容易被发现,在未来的2年里,你会感谢现在的你(从一个有近2000行kludgey代码的人那里,我让这个问题坐了2年不看它。我不得不把它全部扔掉,因为我再也无法判断它应该做些什么来明智地改变它)。在

相关问题