这里非常简单的程序。我正在尝试取一个正整数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
有人可以指导我朝着我需要的方向前进吗?
答案 0 :(得分:6)
import random
def randomNumber2(n):
return min(random.randint(100, 500) for _ in range(n))
答案 1 :(得分:4)
如果你想要更接近你的程序,你需要先在你的程序中修复一些东西 - 它根本不运行。 Python区分大小写,因此mylist2
和myList2
不同。在整个过程中使用相同的拼写。同样,false
不是Python内置的 - False
是。
解决这些问题,我们得到:
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
是&lt; = 500就返回一个包含单个随机整数的列表,在0到499(含)之内。如果n
是&gt; 500,它永远运行(无限循环)。你能明白为什么吗?如果原始if (n <= 500)
是&lt; = 500,则n
始终为true,否则始终为false。您的n >= n - 100
没有做任何可见的事情(它只是将n
与n - 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(包括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
F J的答案是最有经验的Pythonistas会如何编码它。
答案 2 :(得分: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