如何在python中基于另一个随机选择的范围生成一组随机数



我需要编写一个程序,生成一个名为file_size的随机整数,介于4和7之间,然后打印它们,但每个随机整数必须介于5和19之间,并且是奇数。副本是可以的。总而言之,如果file_size为6,则必须打印从5到19的6个奇数。顺便说一下,我用的是Python 3。这是我目前所看到的:

import random
file_size = random.randint(4, 7)
print("file_size = ", file_size)
for _ in range(file_size):
   random_num = random.randint(5, 19)
   if random_num % 2 ==1:
       print(random_num)

示例运行的输出如下:

file_size =  5
19
11
15
7

这显然不是我要找的。请帮助。

您的循环运行file_size次,但只在随机生成的数字为奇数时打印,这意味着您通常会得到比期望的更少的结果。要得到一个随机奇数,你需要不断生成随机值,直到得到一个奇数,例如:

def random_odd(low, high):
  while True:
    ret = random.randint(low, high)
    if ret % 2 == 1:
      return ret

您可以根据需要进行调整,并编写单元测试来验证您期望的随机生成行为。然后,在您的file_size代码中使用这个帮助器:

for _ in range(file_size):
  print(random_odd(5, 19))

正如horns所建议的那样,random.randrange()确实是你想要的函数,但一般来说,辅助函数模式是一个很好的选择——将你的代码的职责分成几个部分,这样每个部分在概念上更简单,可以独立验证。

您当前的代码非常接近。只需使用randrange,步骤为2而不是randint。这不会产生任何偶数,所以你会得到正确数量的奇数。但是,您需要将上界增加1,因为randint包含上界,而randrange不包含上界,就像内置的range函数一样。

random_num = random.randrange(5, 20, 2)

最新更新