from random import randint, choice
x = randint(100, 999)
# y = randint(2, 9) # заменим за следующие команды
divisors = [el for el in range(2, 9+1) if x % el == 0]
y = choice(divisors)
import random
def random_pair(x_first, x_last, y_first, y_last):
y_first = 2
y_last = 9
x_first = 100
x_last = 999
pairs = []
for y in range(y_first, y_last + 1):
# x_start = x_first округлённый вверх до числа кратного y
x_start = y * ((x_first + y - 1) // y)
for x in range(x_start, x_last + 1, y):
pairs.append((x, y))
return lambda: random.choice(pairs)
rp = random_pair(2, 9, 100, 999)
for _ in range(10):
x, y = rp()
print(f'{x}/{y}', end=' ')
print()
要除以无余数,您可以扩展问题 - 生成随机因子
z
和y
,并获得它们的乘积x=z*y
,丢弃给出超出所需范围的结果的对。解释:
生成第一个数字后,我们需要生成第二个数字,但不是从 2 到 9 的整个整数范围,而是仅从第一个生成数字的约数。
为此,首先
divisors
我们创建一个包含 2 到 9 范围内所有元素的列表el
,数字x
可以被无余数整除(即有余数0
):x % el == 0
,然后申请
randint()
从全范围中选择的功能,而是choice()
中选择随机元素的函数。如果分布要求严格(均匀分布)并且对的总数不大(在我们的例子中为1645),那么最简单的方法是创建所有可能对的列表并从中选择: