使用 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]