为了账号安全,请及时绑定邮箱和手机立即绑定

如何生成一个不是2的幂的随机数?输出需要是 8 个随机数的列表

如何生成一个不是2的幂的随机数?输出需要是 8 个随机数的列表

绝地无双 2022-07-05 16:55:22
在python中,如何生成一个不是2的幂的随机数?输出需要是 8 个随机数的列表。这应该在 python 中的单个语句(理解风格)中完成。
查看完整描述

2 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

试试下面的代码,


def is_power_of_two (x): 

    return (x and (not(x & (x - 1))) )


def get_random(start, stop):

    while True:

        value = random.randint(start, stop)

        if not is_power_of_two(value):

            return value


    return [i for i in range(limit) if not is_power_of_two(i)]


result = [get_random(0, 10000000000) for _ in range(8)]


查看完整回答
反对 回复 2022-07-05
?
慕仙森

TA贡献1827条经验 获得超8个赞

在这种情况下,生成器会派上用场。编写一个带有无限循环的函数,该函数返回满足您条件的随机数,然后yield在调用该函数时使用语句一次返回一个这些值。


这是一个例子。我添加了一些代码来检查输入参数,以确保在给定范围内有有效的结果。


def random_not_power_of_2(rmin, rmax):

    # Returns a random number r such that rmin <= r < rmax,

    # and r is not a power of 2

    from random import randint

    # Sanity check

    if rmin < 0:

        raise ValueError("rmin must be non-negative")

    if rmax <= rmin:

        raise ValueError("rmax must be greater than rmin")

    # Abort if the given range contains no valid numbers

    r = rmin

    isValid = False

    while r < rmax:

        if r == 0 or (r & (r-1) > 0):

            isValid = True

            break

        r += 1

    if not isValid:

        raise ValueError("no valid numbers in this range")

    while True:

        r = randint(rmin, rmax)

        if r == 0 or (r & (r-1) > 0):

            yield r


def get_random_list(rmin, rmax, n):

    # Returns a list of n random numbers in the given range

    gen = random_not_power_of_2(rmin, rmax)

    return [next(gen) for i in range(n)]


get_random_list(0,17,10)


查看完整回答
反对 回复 2022-07-05
  • 2 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号