如何生成一个介于最小和最大位数之间的随机数?(Python)

vzgqcmou  于 2022-12-10  发布在  Python
关注(0)|答案(4)|浏览(228)

例如,用户可以指定最小值为2(两位数),最大值为4(四位数),数字必须介于10和9999之间。输入始终为整数。
我设法做到了这一点,使数字总是有最大的数字,但我不知道如何包括最小的数字。

gt0wga4j

gt0wga4j1#

想到的第一种方法是将所需的位数转换为整数;例如,如果您希望最少有9位数,则该数字的最大值为999,999,999,因为这是最大的9位数;如果您希望最少有2位数,则该数字的最小值为10,因为这是最小的2位数。
计算出这个值后,您可以使用10的幂来计算所需的范围:

mindigits = 2
maxdigits = 9

num = random.randrange(10**(mindigits-1), 10**maxdigits)

并得到该范围内的数值。
但是,你的数字中有很多是9位数,很少是2位数。事实上,你可能会认为随机测试总是产生长数字。为什么?因为9位数是8位数的10倍,8位数是7位数的10倍,以此类推。在这个范围内,2位数是非常罕见的!
如果你想让数字的个数均匀分布,那么就单独生成数字。唯一的诀窍是,你生成的第一个数字不能是零,所以你需要从1-9的范围内生成它。所以我们把它和其他数字分开生成。我们可以使用一个生成器表达式来生成其他数字,把所有的数字组合成一个字符串,然后把它转换成一个整数。

mindigits = 2
maxdigits = 9

num = int(str(random.randint(1, 9)) + "".join(str(random.randint(0, 9)) 
        for _ in range(random.randrange(mindigits-1, maxdigits))))
wlp8pajw

wlp8pajw2#

使用random.randint()

import random

min_digits = # enter here
max_digits = # enter here

# This is how you can turn the minimum and maximum number of digits into the range for the final number
min_value = 10**(min_digits - 1)
max_value = (10**max_digits) - 1

# Input these values into the randint function
print(random.randint(min_value, max_value))
nhjlsmyf

nhjlsmyf3#

使用随机范围(启动、停止)。
另外,您可能需要start = 10 ** 2stop = 10 ** 4之类的表达式来描述具有特定位数的数字。

fnx2tebb

fnx2tebb4#

确保导入math、random和randint模块/库:

random.randint(10,9999)

相关问题