2

这里非常简单的程序。我试图取一个正整数 n,生成一个 100 到 500 之间的 n 个随机数的列表,并返回列表中出现的最小值

import random
def randomNumber2(n):
    mylist2 = []
    needMoreNumbers2 = True
    while (needMoreNumbers2):
        randomNumber2 = int(random.random() * 500)
        myList2.append(randomNumber2)
        n >= n - 100
        if (n <= 500):
            needMoreNumbers2 = false
    return myList2

有人可以帮我指引我需要去的方向吗?

4

3 回答 3

6
import random

def randomNumber2(n):
    return min(random.randint(100, 500) for _ in range(n))
于 2013-09-10T20:23:46.770 回答
4

如果你想要更接近你的程序的东西,你需要首先在你的程序中修复一些东西——它根本不运行。Python 区分大小写,因此mylist2myList2不同。始终使用相同的拼写。同样,falseis not a Python builtin - Falseis。

修复这些,我们得到:

import random

def randomNumber2(n):
    myList2 = []
    needMoreNumbers2 = True
    while (needMoreNumbers2):
        randomNumber2 = int(random.random() * 500)
        myList2.append(randomNumber2)
        n >= n - 100
        if (n <= 500):
            needMoreNumbers2 = False
    return myList2

现在不管传递了什么n,只要n<= 500 返回一个包含单个随机整数的列表,范围为 0 到 499(含)。如果n大于 500,它将永远运行(无限循环)。你能看出为什么吗? if (n <= 500)如果原始n值 <= 500,则始终为真,否则始终为假。你n >= n - 100没有做任何可见的事情(它只是比较nn - 100并且总是返回 true,它被忽略)。

所以听从建议转向更合理的 Python 习惯用法。这是一种应该更容易理解的方法:

import random

def randomNumber2(n):
    myList2 = []
    while len(myList2) < n:
        randomNumber2 = int(random.random() * 500)
        myList2.append(randomNumber2)
    return myList2

进展 ;-) 现在我们至少得到一个包含n随机整数的列表。但是,它们不在您想要的范围内: int(random.random() * 500)返回 0 到 499(含)范围内的 int。如果您希望它们介于 100 和 500 之间,最好的方法是这样做random.randint(100, 500),正如其他人已经向您展示的那样。 100 + int(random.random() * 400)是一种更接近原始代码的等效方式,所以让我们尝试一下:

import random

def randomNumber2(n):
    myList2 = []
    while len(myList2) < n:
        randomNumber2 = 100 + int(random.random() * 400)
        myList2.append(randomNumber2)
    return myList2

为了获得最低限度,最好只min(myList2)在最后做。这不仅是正确的,而且比您自己编写的任何代码都快。如果你想自己做,这里有一种方法:

import random

def randomNumber2(n):
    myList2 = []
    smallest = None
    while len(myList2) < n:
        randomNumber2 = 100 + int(random.random() * 400)
        myList2.append(randomNumber2)
        if smallest is None or randomNumber2 < smallest:
            smallest = randomNumber2
    assert smallest == min(myList2)
    return myList2

不过,FJ 的答案是大多数有经验的 Pythonistas 会如何编写它。

于 2013-09-10T20:55:22.747 回答
1

我试图取一个正整数 n,生成一个 100 到 500 之间的 n 个随机数的列表,并返回列表中出现的最小值

然后,您不需要列表,您只需要返回n“抛出”中生成的最小随机数

import random

def smallrand(n,rangemin=100,rangemax=500):
    smallest = float('+inf')
    for _ in xrange(n):
       new = random.randint(rangemin, rangemax)
       if new < smallest: smallest = new
    return smallest
于 2013-09-10T20:32:30.620 回答