在 Python 中,有时需要给字典值分配随机数。例如,在创建一个模拟战斗的游戏时,每次调用 player[“enemy_hit”] 时,都需要从指定的范围内选择一个随机值,以模拟敌人的攻击强度。但是,目前的代码只能为 player[“enemy_hit”] 分配一个固定的值,无法产生随机值。
以下代码展示了目前存在的问题:
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”] 时,都输出相同的随机值 3,而不是不同的随机值。
2、解决方案
有两种方法可以解决上述问题,分别为:
1、使用随机函数 random.choice()
使用 random.choice() 函数可以从列表中随机选择一个元素。我们可以创建一个列表,其中包含需要分配给 player[“enemy_hit”] 的随机值范围,然后使用 random.choice() 函数从列表中随机选择一个值。
import random
def easy_difficulty(player):
enemy_hit_range = [3, 4, 5, 6, 7, 8, 9]
player["enemy_hit"] = random.choice(enemy_hit_range)
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()
运行以上代码,输出为:
5
3
7
可以看出,每次调用 player[“enemy_hit”] 时,都输出不同的随机值,符合预期。
2、使用随机函数 random.randint()
使用 random.randint() 函数可以生成一个指定范围内的随机整数。我们可以直接使用 random.randint() 函数生成一个随机值,并将其分配给 player[“enemy_hit”]。
import random
def easy_difficulty(player):
player["enemy_hit"] = random.randint(3, 9)
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()
运行以上代码,输出为:
7
5
8
可以看出,每次调用 player[“enemy_hit”] 时,都输出不同的随机值,符合预期。