Python-将随机数分配给字典值?
我目前正在尝试为字典分配一个随机值。每次我调用*player[“敌方命中”]*,我都希望它从我提供的范围中选择一个随机值。当前,它从范围中为其指定一个值。有办法吗?谢谢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,
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()
必要时。感谢所有答案,我认为该类与我的需求最相关,尽管我从未真正使用过它们,但应该很有趣/令人沮丧,还有很多工作要做(如果玩家的健康下降到零以下会发生什么情况)?但我试着把一些积木放在适当的位置,希望引导他朝着正确的方向前进:)