如果你想要更接近你的程序的东西,你需要首先在你的程序中修复一些东西——它根本不运行。Python 区分大小写,因此mylist2
和myList2
不同。始终使用相同的拼写。同样,false
is not a Python builtin - False
is。
修复这些,我们得到:
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
没有做任何可见的事情(它只是比较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(含)范围内的 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 会如何编写它。