Python:得到6个差值最小的随机数
Python: Get 6 random numbers with minimum difference
我正在尝试获取 1 到 3600 之间的 6 个随机生成的数字。但我希望各个数字的最小差异至少为 150。我已经创建了一个函数。我确实收到了我的 6 个随机数,但与我预期的不同。我的错误在哪里?我想不通。
我是 python 的新手。我尝试了不同的方法,但找不到解决问题的方法。
def get_random_seconds_with_difference(min_tx, max_tx, number_tx):
s_times = []
i_number = 0
new_times_s = random.randint(min_tx,max_tx)
s_times.append(new_times_s)
while i_number < number_tx:
new_times_s = random.randint(min_tx,max_tx)
if new_times_s >= s_times[i_number]:
difference_time_s = new_times_s - s_times[i_number]
else:
difference_time_s = s_times[i_number] - new_times_s
if difference_time_s >= 150:
s_times.append(new_times_s)
i_number += 1
return s_times
这是一种方法,使用相同的原则拒绝无效时间,直到我们获得所有需要的时间:
import random
def get_random_seconds_with_difference(min_tx, max_tx, number_tx):
times = []
while len(times) < number_tx:
new_time = random.randint(min_tx, max_tx)
if all(abs(new_time - time) >= 150 for time in times):
times.append(new_time)
return times
get_random_seconds_with_difference(0, 3600, 6)
# [2730, 435, 2069, 3264, 3496, 1091]
使用 all 使拒绝逻辑更简单一些,使用 abs
的差异让我们避免处理两种不同的情况。
问题是您只是将新号码与列表中的最后一个号码进行比较。您需要它根据列表中数字的 all 检查它以获得您想要的结果。下面是这个,使用 for 循环:
import random
def get_random_seconds_with_difference(min_tx, max_tx, number_tx):
s_times = []
i_number = 0
new_times_s = random.randint(min_tx,max_tx)
s_times.append(new_times_s)
while i_number < number_tx:
new_times_s = random.randint(min_tx,max_tx)
for i in range(len(s_times)):
if new_times_s >= s_times[i]:
difference_time_s = new_times_s - s_times[i]
else:
difference_time_s = s_times[i] - new_times_s
if difference_time_s >= 150:
s_times.append(new_times_s)
i_number += 1
break
return s_times;
print(get_random_seconds_with_difference(1, 3600, 10))
注意:可能有更快的方法来执行此操作,并且可能已经内置函数(请参阅上面的评论和 random.choice 的建议)。
试试这个:-
import random
def choice(a):
for _ in range(a):
print(random.choice(range(1,3600,150)))
choice(6) #you can pass nomber to get value
输出:-
3451
2401
1201
301
1951
3451
我正在尝试获取 1 到 3600 之间的 6 个随机生成的数字。但我希望各个数字的最小差异至少为 150。我已经创建了一个函数。我确实收到了我的 6 个随机数,但与我预期的不同。我的错误在哪里?我想不通。
我是 python 的新手。我尝试了不同的方法,但找不到解决问题的方法。
def get_random_seconds_with_difference(min_tx, max_tx, number_tx):
s_times = []
i_number = 0
new_times_s = random.randint(min_tx,max_tx)
s_times.append(new_times_s)
while i_number < number_tx:
new_times_s = random.randint(min_tx,max_tx)
if new_times_s >= s_times[i_number]:
difference_time_s = new_times_s - s_times[i_number]
else:
difference_time_s = s_times[i_number] - new_times_s
if difference_time_s >= 150:
s_times.append(new_times_s)
i_number += 1
return s_times
这是一种方法,使用相同的原则拒绝无效时间,直到我们获得所有需要的时间:
import random
def get_random_seconds_with_difference(min_tx, max_tx, number_tx):
times = []
while len(times) < number_tx:
new_time = random.randint(min_tx, max_tx)
if all(abs(new_time - time) >= 150 for time in times):
times.append(new_time)
return times
get_random_seconds_with_difference(0, 3600, 6)
# [2730, 435, 2069, 3264, 3496, 1091]
使用 all 使拒绝逻辑更简单一些,使用 abs
的差异让我们避免处理两种不同的情况。
问题是您只是将新号码与列表中的最后一个号码进行比较。您需要它根据列表中数字的 all 检查它以获得您想要的结果。下面是这个,使用 for 循环:
import random
def get_random_seconds_with_difference(min_tx, max_tx, number_tx):
s_times = []
i_number = 0
new_times_s = random.randint(min_tx,max_tx)
s_times.append(new_times_s)
while i_number < number_tx:
new_times_s = random.randint(min_tx,max_tx)
for i in range(len(s_times)):
if new_times_s >= s_times[i]:
difference_time_s = new_times_s - s_times[i]
else:
difference_time_s = s_times[i] - new_times_s
if difference_time_s >= 150:
s_times.append(new_times_s)
i_number += 1
break
return s_times;
print(get_random_seconds_with_difference(1, 3600, 10))
注意:可能有更快的方法来执行此操作,并且可能已经内置函数(请参阅上面的评论和 random.choice 的建议)。
试试这个:-
import random
def choice(a):
for _ in range(a):
print(random.choice(range(1,3600,150)))
choice(6) #you can pass nomber to get value
输出:-
3451
2401
1201
301
1951
3451