如何按一定步骤生成随机数?

How to generate random numbers by a certain step?

对于学校,我们必须在 python 中创建一个程序,在该程序中我们生成给定数量的随机数,您可以选择乘法。我试过这段代码(它会显示我的列表是空的)但我想知道 python 中是否有针对此的特定功能,因为我似乎无法找到如何去做。

此外,除了 randint()

,我们不能使用任何其他函数
from random import randint

list = []
aantal = int(input("Hoeveel random getallen wilt u? "))
veelvoud = int(input("Welke veelvoud? "))

for i in range(aantal):
    getal = randint(1, 100)
    if getal % veelvoud == 0:
        list.append(getal)
    else:
        i -= 1

print(list)

我做了一些研究,我认为这是最简单也是最 used/known 的方法。 当你将两个随机数相乘时,你可以给它带来更多的随机性,但 idk,对我来说似乎很奇怪。

您可以使用 random.randrange。例如

random.randrange(5, 101, 5)

将在 {5, …, 95, 100} 中给出一个随机数。

如果你想要其中的几个,最好的方法是列表理解。所以

[random.randrange(multiple, 101, multiple) for _ in range(count)]

会给你一个 count 数字的列表,包括 1-100,要求它们是 multiple 的倍数。

所以你的代码可以是

from random import randrange

aantal = int(input("Hoeveel random getallen wilt u? "))
veelvoud = int(input("Welke veelvoud? "))

print([randrange(veelvoud, 101, veelvoud) for _ in range(aantal)])

请注意,您的原始代码不会给出 aantal 数字,因为您的 i -= 1 在此上下文中不执行任何操作 – for 循环会在每次迭代时覆盖 i 的值.

这是解决问题的另一种方法:

  • 请求用户输入随机数的个数,以及步骤

  • 创建一个空列表

  • 当列表包含的元素少于请求的数量时,生成 1 到 100 之间的随机数

  • 检查随机数是否为step的倍数,如果是则加入列表

from random import randint

number = int(input("How many random numbers to generate?: "))
step = int(input("Multiple of which number? : "))

nums_list = []

while len(nums_list) < number:
  rand = randint(1, 100)
  if rand % step != 0:
    continue
  else:
    nums.append(rand)

print(nums_list)

一种更有效的方法是生成随机数,使该数字始终是步长的倍数:

from random import randint

number = int(input("How many random numbers to generate?: "))
step = int(input("Multiple of which number? : "))

# The highest number that can be multiplied with the step to
# produce a multiple of the step less than 100
max_rand = floor(100/step)

nums_list = []

for _ in range(number):
  rand = randint(1, max_rand) * step
  nums_list.append(rand)

print(nums_list)