Python-将随机数分配给字典值?

Python-将随机数分配给字典值?,python,function,random,dictionary,range,Python,Function,Random,Dictionary,Range,我目前正在尝试为字典分配一个随机值。每次我调用*player[“敌方命中”]*,我都希望它从我提供的范围中选择一个随机值。当前,它从范围中为其指定一个值。有办法吗?谢谢 import random def easy_difficulty(player): player["enemy_hit"] = random.randrange(3, 10) return player def player_main(): player = {"health" : 100,

我目前正在尝试为字典分配一个随机值。每次我调用*player[“敌方命中”]*,我都希望它从我提供的范围中选择一个随机值。当前,它从范围中为其指定一个值。有办法吗?谢谢

import random

def easy_difficulty(player):
    player["enemy_hit"] = random.randrange(3, 10)
    return player

def player_main():
    player = {"health" : 100,
              "xp" : 100,
              "strength" : 0,
              "dexterity" : 0,
              "wisdom" : 0,
              "level_req" : None,
              "health_spawn" : None,
              "enemy_hit" : None}
    player = easy_difficulty(player)
    print(player["enemy_hit"])        
    print(player["enemy_hit"]) 
    print(player["enemy_hit"])       
    return player

player_main()

>>> 
3
3
3
>>> 

将一个函数分配给
玩家[“敌方命中”]
,该函数每次调用时都会产生一个值,例如

player["enemy_hit"] = lambda: random.randrange(3, 10)
然后您可以像这样访问它

player["enemy_hit"]()

它将产生一个随机值。

你的
易\u难
函数每次调用时都会为
玩家[“敌人命中”]
分配一个随机值。您只调用它一次--
print
调用之间没有任何变化


在每次
打印
调用之前,您可能需要调用
轻松难度

如果只执行一次
轻松难度
,只需打印三次,请尝试以下操作:

player = easy_difficulty(player)
print(player["enemy_hit"])      
player = easy_difficulty(player)  
print(player["enemy_hit"]) 
player = easy_difficulty(player)
print(player["enemy_hit"])    

因为你要把同样的东西打印三次。在打印之前,您需要再次调用
player\u难度

这是一个使您的
player
成为一个类,而
enenmy\u hit
成为一个方法的主要示例。有关如何使用类和对象的详细信息,请参见

import random

class Player(object):

    def __init__(self, health=100, xp=100, strength=0, dexterity=0,
                 wisdom=0, level_req=None, difficulty=1.0):
        """Initialize the player's attributes (health, xp, ...).
        Create a player object with some default values, unless the have
        been specified as keyword arguments.
        """
        self.health = health
        self.xp = xp
        self.strength = strength
        self.dexterity = dexterity
        self.wisdom = wisdom
        self.level_req = level_req
        self.difficulty = difficulty

    def hit(self):
        """This is the method that calculates a hit on the player.
        It uses a difficulty factor `self.difficulty` set when the class
        was instanciated, and multiplies it by some random amount to determine
        the damage taken. That damage then is subtracted from the player's
        health.
        """
        damage_taken = random.randint(1, 10) * self.difficulty
        self.health -= damage_taken
        print "Taken %s damage, down to %s!" % (damage_taken, self.health)


def main():
    player = Player(difficulty=1.5)
    player.hit()
    player.hit()
    player.hit()

if __name__ == '__main__':
    main()
输出:

Taken 1.5 damage, down to 98.5!
Taken 13.5 damage, down to 85.0!
Taken 15.0 damage, down to 70.0!
所以通过这样做

newbie = Player(difficulty=0.5)
veteran = Player(difficulty=2.0)
fighter = Player(strength=100, wisdom=10)
wizard = Player(strength=5, wisdom=70)

您可以利用创建具有不同属性的同一类的多个实例,覆盖
Player设置的默认值。\uuu init\uuu()
必要时。

感谢所有答案,我认为该类与我的需求最相关,尽管我从未真正使用过它们,但应该很有趣/令人沮丧,还有很多工作要做(如果玩家的健康下降到零以下会发生什么情况)?但我试着把一些积木放在适当的位置,希望引导他朝着正确的方向前进:)