【问题标题】:How to produce a set of random numbers based on another randomly selected range in python如何根据python中另一个随机选择的范围生成一组随机数
【发布时间】:2015-10-15 20:06:21
【问题描述】:

我需要编写一个程序,生成一个名为 file_size 的 4 到 7(含)随机整数,然后打印它们,但每个随机整数都必须介于 5 和 19(含)之间并且是奇数。重复是可以的。总而言之,如果 file_size 为 6,则必须打印 6 个从 5 到 19 的奇数。顺便说一句,我正在使用 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

这显然不是我想要的。请帮忙。

【问题讨论】:

    标签: python loops random


    【解决方案1】:

    您的循环运行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() 确实是您想要的功能,但一般来说,辅助功能模式是一个很好的模式 - 将您的代码的职责分成多个部分,以便每个部分在概念上更简单并且可以验证独立。

    【讨论】:

    • 现在,我没有打印数字,而是将它们写入一个名为“numbers.txt”的文件中。我将如何在另一个文件中读取 numbers.txt 的内容,然后在自己的行上打印每个数字,然后打印总和?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      相关资源
      最近更新 更多