gpt4 book ai didi

python - 如何设置一个循环,以便在一个数字与另一个数字太相似时生成一个新的随机数?

转载 作者:行者123 更新时间:2023-12-01 09:02:52 24 4
gpt4 key购买 nike

我正在尝试使用随机模块生成(伪)随机数。我需要生成的数字在范围上不要太接近。例如,如果生成了一个数n,那么另一个数x就不可能是n +- 5。

from random import randint

i = 10

j_list = []
k_list = []

while i != 0:

j = randint(-10, 10)
k = randint(-15, 15)

j_list.append(j)
k_list.append(k)

i -= 1

print("J list is: {} and K list is {}".format(j_list, k_list))

例如,当我上次运行它时,我得到以下输出:

J list is: [-4, 5, 2, -3, 7, -4, 3, -1, -1, -6] and K list is [10, 3, -7, -1, -5, -11, 3, 8, 1, -7]

如您所见,j_list 的第 1 个和第 3 个元素(即 j_list[1:3])彼此相差在 +- 5 范围内。这不是我想要的;我希望列表中的每个元素都生成超出特定范围的值。

有什么办法可以做到这一点吗?

最佳答案

首先,这里使用 for 循环比使用 while 循环更好:

# One line and you know the loop range immediately
for i in range(10):
print(i)

# Three lines and takes the reader two seconds to comprehend
i = 10
while i != 0:
i -= 1
print(i)

现在回答您的问题,您可以使用 random.choice 排除 range(j - 5, j + 5):

from random import randint, choice

j_list = []
k_list = []

for i in range(10):

j = randint(-10, 10)
k = choice([n for n in range(-15, 15) if n not in range(j - 5, j + 6)])

j_list.append(j)
k_list.append(k)

print("J list is: {} and K list is {}".format(j_list, k_list))

如果您只想使用 randint,另一种方法是使用 while 循环来不断重新滚动值 k,直到它不在 j +- 5 范围内:

from random import randint

j_list = []
k_list = []

for i in range(10):

j = randint(-10, 10)
k = randint(-15, 15)

while abs(j - k) <= 5:

k = randint(-15, 15)

j_list.append(j)
k_list.append(k)

print("J list is: {} and K list is {}".format(j_list, k_list))

正如 @ShadowRanger 指出的那样,while 循环策略的计算要求较低,并且更易于阅读,因此您可能会想要这样做。

关于python - 如何设置一个循环,以便在一个数字与另一个数字太相似时生成一个新的随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52323965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com