【问题标题】:Create a list of random even numbers in a specified range using only randint仅使用 randint 创建指定范围内的随机偶数列表
【发布时间】:2020-07-12 05:03:56
【问题描述】:

我正在尝试创建一个数字从 0 到 10,000(含)的随机列表。我需要得到一个只有偶数的列表。

这是我的代码:

from random import randint

def test(mini, maxx, quantity):
    myl = [randint(mini, maxx) * 2 for i in range(quantity)]
    return myl

print(test(0, 10000, 4))

如果我尝试这样做,我会超出 10000 的范围(因为 * 2)。

另外,我只能使用randint 函数。

如何达到预期的效果?

【问题讨论】:

    标签: python python-3.x list random


    【解决方案1】:

    生成从 0 到 5000 的随机数并乘以 2。如果要确保正确的结果,您必须在正确的范围内进行操作,并包括您的边界都包含在内的事实:

    def test(start, stop, n):
        start, stop = min(start, stop), max(start, stop)
        realmax = (stop - start + 2) // 2 - 1   # Range from zero, inclusive
        realstart = start + (start % 2)         # Offset to ensure even result
        return [randint(0, realmax) * 2 + realstart for _ in range(n)]
    

    如果您想知道(stop - start + 2) // 2 - 1 的来源。

    • stop - start + 1 是包含范围的大小。
    • 另一个+ 1 是必要的,以使// 2 充当ceil-divide 而不是floor-divide。以范围 12-14 为例,您可能希望生成两个选项,而不是一个。
    • // 2 只是将范围减半,但保持整数。
    • 最后的- 1 将范围大小转换为范围边界,因为randint 包含在内,我们从零开始。

    【讨论】:

    • 很遗憾randint 是一个约束,因为return random.choices(range(start, stop+1, 2), k=n) 既漂亮又优雅。
    • @JonClements。同意。
    【解决方案2】:

    使用以下代码-

    import random
    >>> lst = []
    >>> def evenrandom(lst):
        for i in range(10):       #assuming we need 10 random numbers
            num = random.randint(1,10000)       #note: I have started from 1 
                                                #with intention
            if num % 2 == 0:
                lst.append(num)
            else:
                lst.append(num -1)
        return lst
    
    >>> print(evenrandom(lst))
    [6932, 1690, 5526, 1282, 8332, 2024, 8600, 9500, 1264, 4350]
    

    【讨论】:

    • if 可以改写为lst.append(num - num%2)。话虽如此,你应该从零开始,否则得到零的概率将小于你范围内的所有其他数字。
    【解决方案3】:
    def test(mini,maxx,quantity):
        myl = [randint(mini,int(maxx/2)) * 2 for i in range(quantity)]
        return myl
    

    【讨论】:

    • 如果你输入mini=12, maxx=14会怎样?
    • 显然,不要那样做:) 你应该在别处检查输入的有效性。
    • 12, 14 是完全有效的输入。我的观点是,您的函数假设 mini 将为零,通常不是,或者它不会是输入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2016-07-24
    • 2021-06-20
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多