基本程序生成随机数Python

时间:2013-09-11 00:43:10

标签: python

我想创建一个带正整数n的程序,然后创建一个由0到9之间的n个随机数组成的列表。一旦找到,我想返回这些数字的平均值。我是在正确的轨道上吗?

import random
def randomNumbers(n):
    n > 0
    myList = random.randrange(0,9)

我知道我还没有进入第二部分..但这是我开始的方式吗?

这是我的最终代码:

import random
def randomNumbers(n):
    myList = []
    for i in range(n):
        myList.append(random.randrange(0, 9))
    return sum(myList)/len(myList)

有人可以将我引导到一个页面,其中讨论了for和while循环以及何时使用它们?

5 个答案:

答案 0 :(得分:2)

等号(=)仅用于设置“整个变量”的值(如myList)。你想要一个列表,然后将添加值,所以从这开始:

myList = []

将其设为空列表。

现在你对n > 0时重复某些事情有正确的想法 - 但理想的方法是使用for循环:

for i in range(n): # repeats the following line(s) of code n times
    myList.append(random.randrange(0,9))

要查找平均值,请取总和除以项目数(n)。

如果您使用的是Python 2.x,那么请注意,除以另一个整数的整数将舍入为整数,因此您应该在除法之前转换为float(十进制):

average = sum(myList)*1.0/n

对于Python 3.x,int / int给出了一个你想象的浮点数:

average = sum(myList)/n

要返回值,请使用return语句:

return average

答案 1 :(得分:1)

如果在一个解释中过于复杂,那么它有助于打破你想要做的事情。

  • 取一个正整数n
  • 创建n长度的列表
    • 每个元素应为0-9
  • 返回该列表的平均值。

让我们一次解决这个问题:

取正整数n

def randomNumbers(n):
    if type(n)==int and n>0:

当你说def randomNumbers(n):时,你说

Hey, computer, this is a function called "randomNumbers",
and it's going to be called with a single thing in parentheses
and we're going to call that `n` from now on.
Here's what that function does:

但是你还没有确保n是一个大于0的整数。它只是thing。所以我们需要确保它是。 if type(n)==int and n>0:通过检查n类型int并且n的值是正数(大于0)来做到这一点。< / p>

这是完成的第一个要点。接下来是创建n长度列表,每个元素是一个编号为0-9的整数。这些应该是随机的[1]。

result=list()
for i in range(n):
    result.append(random.randint(0,9))

这比看上去简单。首先创建一个list,您将调用result(或任何您想要的,我不在乎)。 for循环只是说:

Hey, computer, you're gonna do the same thing a number of times,
and that number is "until you've counted from 0 to n times".
And when you do that, "i" is going to represent where you are
in that "0 to n" range. Here's what you're gonna do all those times:

那么你要做什么n次?您将append在0到9之间的随机整数转到我们刚刚调用result的列表中。这就是result.append(random.randint(0,9))所做的。

接下来你想要返回该列表的平均值。好吧,列表的平均值是列表中数字的sum除以len gth。

return sum(result)/float(len(result))

sumlen可以使用任何可迭代的内容,例如listset,或任何您喜欢的内容,并为您提供总和,长度等等否则你要求。这些都是很好的学习工具。这样做吧。在其他地方,最好坦率地说。

现在,如果你真的很专注,你会发现到目前为止我们已经有了这个:

import random # I added this secretly, sorry!
def randomNumbers(n):
    if type(n)==int and n>0:
        result=list()
        for i in range(n):
            result.append(random.randint(0,9))
        return sum(result)/float(len(result))

哪个好极了!这就是你需要的;尝试print(randomNumbers(5)),你会得到你正在寻找的东西:一堆随机数的平均值。

但是如果你试试print(randomNumbers('foo'))怎么办?你可能得到None,对吗?那是因为它不适合我们写的if语句,所以它永远不会走那条路!你需要写一个else语句,这样不是正整数的东西仍然会得到一些爱。

else:
    return "That's no good. Try a positive integer instead"

愚蠢,但它确实有效。有一天你会学习如何提高异常和所有流畅的爵士乐,但在那之前,只需说出来就可以了

Hey, computer, if n wasn't up to my stratospheric expectations,
then just spit back this message. I'll understand.

所以当天结束时你已经

import random

def randomNumbers(n):
    if type(n)==int and n>0:
        result=list()
        for i in range(n):
            result.append(random.randint(0,9))
        return sum(result)/float(len(result))
    else:
        return "That's no good. Try a positive integer instead"

您可以使用此代码执行一些操作,以提高效率。为了让你好奇,我举一个例子:

from random import randint

def randy(n:int):
    return sum({randint(0,9) for i in range(n)})/n if n>0 else "Try again."

进入列表理解,集合,函数注释以及其他您不必担心的内容。坦率地说,对于好的“Pythonic”代码来说,这行代码可能过于复杂,但这很可能,这很酷。

坚持下去,不要气馁。 Python努力解释你做错了什么,如果你做了尽职调查,社区通常都很好 。只是不要在没有自己寻求答案的情况下寻求帮助而滥用他们(/我们)。

[1]从技术上讲,它们是伪随机的,但很难产生真正的随机性。

答案 2 :(得分:0)

你没有走上正轨。有关曲目,请参阅this variate

import random

def randomNumbers(n):
    l = random.sample(xrange(10),  n)
    return sum(l)/len(l)

答案 3 :(得分:0)

可以通过列表理解更简洁地完成:

myList = [randrange(0, 9) for x in xrange(n)]
average = sum(myList) / len(myList)

答案 4 :(得分:0)

你应该考虑使用Numpy。这将使您的任务变得简单。

import numpy as np

def myfunc(n):
    x = np.random.randint(low=0, high=10, size=n)
    return np.mean(x)