Python随机函数似乎总是生成与max numb长度相同的数字

2024-04-24 07:00:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python还不熟悉。尝试生成一个随机数的随机数并将其写入文件。我希望默认的顺序是升序,所以在我的循环中,每次我都会添加上一次迭代中随机选择的“数字”,作为下一个随机数的最小值(希望有意义):

    # Create random number of random integers and write to file 1:
number = 0  # used later
records = random.randrange(1,100)  # randomly decide how many integers to create (up to 100).
for index in range(1,records):
    # randomly create integer between last number created (to ensure correct sort) and 1 million.
    number = random.randrange(number,100000)
    # write it to file:
    f1.write(str(number) + "\n")
    print(number)

奇怪的是,我的输出几乎总是随机数,但除了前2或3个数字外,它可能会立即跳到5位数字,然后在4或5次迭代中命中,然后只重复最大值(99999)-下面是一个常见的输出:

50518号 84384 87787 91203 91286 92638 93266 97371 99986 99993 99998 99998 99998 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999 99999个

为什么最大值在随机范围内如此容易被击中


Tags: and文件tointegersnumber顺序create数字
1条回答
网友
1楼 · 发布于 2024-04-24 07:00:46

您的问题是,当您将最小值设置为最后生成的数字时,您会减少每次生成的数字量,这会增加生成更高数字的可能性,因为最小值不断提高

与其他人一样,您应该使用random modulessample方法,该方法声明:

Return a k length list of unique elements chosen from the population sequence or set. Used for random sampling without replacement.

import random
number = 0  # used later
records = random.randrange(1,100)  # randomly decide how many integers to create (up to 100).
numbers = []
for index in range(1,records):
    print(f'generating numbers between {number} and 100000' )
    number = random.randrange(number,100000)
    numbers.append(number)
    #print(number)
print(numbers)
print(sorted(random.sample(range(100000), records)))

输出

generating numbers between 0 and 100000
generating numbers between 11137 and 100000
generating numbers between 54933 and 100000
generating numbers between 77429 and 100000
generating numbers between 98305 and 100000
generating numbers between 99167 and 100000
generating numbers between 99825 and 100000
generating numbers between 99842 and 100000
generating numbers between 99949 and 100000
generating numbers between 99957 and 100000
generating numbers between 99962 and 100000
generating numbers between 99969 and 100000
[11137, 54933, 77429, 98305, 99167, 99825, 99842, 99949, 99957, 99962, 99969, 99989]
[831, 7001, 18454, 21526, 25156, 29657, 45299, 46796, 61326, 67692, 86185, 90140, 93899]

相关问题 更多 >