使用 while 循环时每次都让 random.randint(a,b) 改变?
Making the random.randint(a,b) change everytime when using a while loop?
在我正在编写的代码中,我有一个嵌套字典,其中包含一个值为 random.randint(0,100)
的键。这段代码下面是一个 while 循环,其中包含需要字典中的项目的函数。
当 while 循环再次运行时,random.randint(0,100)
输出相同的值。我该怎么做才能使随机值不同?我尝试制作一个新的 .py 文件并将 random.randint(a,b)
置于 While true
循环中的变量下,但主文件中的代码从未启动。我无法将字典放在 while 循环内或它结束后,因为那样代码将无法运行。
供参考,代码是这样的(因为原代码太长贴不上,所以总结了一下):
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': random.randint(0,100)},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': random.randint(5,100)}
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': random.randint(5,90)}}
while I > 5:
def func(a,b):
Rand_Value = A['Key1']['Random']
print(f'The value for this is {Rand_Value}')
func(10,5)
我是编码新手,如果问题不够好,我深表歉意。
问题是,您的字典被随机值填充只有一次。方法 random.randint(0, 100)
将 return 一个随机值 一次 而 不是每次你使用你的字典时 ,例如。 :
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': random.randint(0,100)},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': random.randint(5,100)}
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': random.randint(5,90)}}
可能会变成
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': 7},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': 18}
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': 96}}
如您所见,随机值现在已 固定 且 不会再更改 。
要解决这个问题,您可以在每次使用词典时为 re-initialize 创建一个函数,就像我在下面所做的那样。
def initialize_dictionary():
return {
'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': random.randint(0,100)},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': random.randint(5,100)},
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': random.randint(5,90)}
}
# do stuff
while i < 5:
def func(a, b):
my_new_dict = initialize_dictionary() # will create a new dict with new random values
Rand_Value = my_new_dict['Key1']['Random']
print(f'The value for this is {Rand_Value}')
func(10, 5)
尽管如此,我还是建议你使用类似下面的方法,因为如果你有一个巨大的字典,需要一遍又一遍地re-initialized,上面的解决方案会导致性能速度非常慢.
# do stuff
while i < 5:
def func(a, b):
Random_Value = random.randint(0, 100)
print(f'The value for this is {Rand_Value}')
func(10, 5)
提示:您可以在字典中添加两个 key-value 对,这将为您提供范围的起始值和结束值,如果您需要不同的范围每个键。
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'start': 0, 'end': 100},
'Key2': {'Key A2': 4, 'Key B2': 7, 'start': 5, 'end': 100}
'Key3': {'Key A3': 5, 'Key B3': 13, 'start': 5, 'end': 90}}
start = A['Key1']['start']
end = A['Key1']['end']
Random_Value = random.randint(start, end)
如果必须将随机函数放入字典中,您可以像这样使用 lambda 来完成(不要忘记调用它):
from random import randint
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': lambda : randint(0,100)},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': lambda : randint(5,100)},
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': lambda : randint(5,90)}}
res = [A['Key1']['Random']() for _ in range(5)]
#-------------------------^^ calling lambda
print(res)
'''
[59, 66, 42, 79, 100]
但更好的解决方案是用字典中的参数替换随机函数(不要忘记解压):
from random import randint
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': (0,100)},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': (5,100)},
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': (5,90)}}
res = [randint(*A['Key1']['Random']) for _ in range(5)]
#--------------^ unpacking
print(res)
'''
[8, 65, 10, 67, 76]
在我正在编写的代码中,我有一个嵌套字典,其中包含一个值为 random.randint(0,100)
的键。这段代码下面是一个 while 循环,其中包含需要字典中的项目的函数。
当 while 循环再次运行时,random.randint(0,100)
输出相同的值。我该怎么做才能使随机值不同?我尝试制作一个新的 .py 文件并将 random.randint(a,b)
置于 While true
循环中的变量下,但主文件中的代码从未启动。我无法将字典放在 while 循环内或它结束后,因为那样代码将无法运行。
供参考,代码是这样的(因为原代码太长贴不上,所以总结了一下):
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': random.randint(0,100)},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': random.randint(5,100)}
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': random.randint(5,90)}}
while I > 5:
def func(a,b):
Rand_Value = A['Key1']['Random']
print(f'The value for this is {Rand_Value}')
func(10,5)
我是编码新手,如果问题不够好,我深表歉意。
问题是,您的字典被随机值填充只有一次。方法 random.randint(0, 100)
将 return 一个随机值 一次 而 不是每次你使用你的字典时 ,例如。 :
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': random.randint(0,100)},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': random.randint(5,100)}
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': random.randint(5,90)}}
可能会变成
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': 7},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': 18}
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': 96}}
如您所见,随机值现在已 固定 且 不会再更改 。
要解决这个问题,您可以在每次使用词典时为 re-initialize 创建一个函数,就像我在下面所做的那样。
def initialize_dictionary():
return {
'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': random.randint(0,100)},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': random.randint(5,100)},
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': random.randint(5,90)}
}
# do stuff
while i < 5:
def func(a, b):
my_new_dict = initialize_dictionary() # will create a new dict with new random values
Rand_Value = my_new_dict['Key1']['Random']
print(f'The value for this is {Rand_Value}')
func(10, 5)
尽管如此,我还是建议你使用类似下面的方法,因为如果你有一个巨大的字典,需要一遍又一遍地re-initialized,上面的解决方案会导致性能速度非常慢.
# do stuff
while i < 5:
def func(a, b):
Random_Value = random.randint(0, 100)
print(f'The value for this is {Rand_Value}')
func(10, 5)
提示:您可以在字典中添加两个 key-value 对,这将为您提供范围的起始值和结束值,如果您需要不同的范围每个键。
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'start': 0, 'end': 100},
'Key2': {'Key A2': 4, 'Key B2': 7, 'start': 5, 'end': 100}
'Key3': {'Key A3': 5, 'Key B3': 13, 'start': 5, 'end': 90}}
start = A['Key1']['start']
end = A['Key1']['end']
Random_Value = random.randint(start, end)
如果必须将随机函数放入字典中,您可以像这样使用 lambda 来完成(不要忘记调用它):
from random import randint
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': lambda : randint(0,100)},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': lambda : randint(5,100)},
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': lambda : randint(5,90)}}
res = [A['Key1']['Random']() for _ in range(5)]
#-------------------------^^ calling lambda
print(res)
'''
[59, 66, 42, 79, 100]
但更好的解决方案是用字典中的参数替换随机函数(不要忘记解压):
from random import randint
A = {'Key1': {'Key A1': 1, 'Key B1': 5, 'Random': (0,100)},
'Key2': {'Key A2': 4, 'Key B2': 7, 'Random': (5,100)},
'Key3': {'Key A3': 5, 'Key B3': 13, 'Random': (5,90)}}
res = [randint(*A['Key1']['Random']) for _ in range(5)]
#--------------^ unpacking
print(res)
'''
[8, 65, 10, 67, 76]