-2

我想创建一个采用正整数 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 循环以及何时使用它们?

4

5 回答 5

2

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

myList = []

使其成为一个空列表。

现在您对 while 重复某些内容有了正确的想法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,请注意一个整数除以另一个整数将舍入为整数,因此您应该在除法之前转换为浮点数(十进制):

average = sum(myList)*1.0/n

对于 Python 3.x,int/int 给出了一个你可能期望的浮点数:

average = sum(myList)/n

要返回一个值,请使用以下return语句:

return average

于 2013-09-11T00:52:59.980 回答
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:通过检查is的类型和 that的值是否为正(大于 0)来做到这一点。nintn

这是完成的第一个要点。接下来是创建一个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什么呢?您将在我们刚刚调用的列表中找到 0 到 9 之间append随机整数result。就是result.append(random.randint(0,9))这样。

因此,接下来您要返回该列表的平均值。好吧,列表的平均值是列表中sum的数字除以length。

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

sum并且len可以采用任何可迭代的对象,例如 alist或 aset或任何你喜欢的东西,并给你总和、长度或你要求的任何其他东西。这些都是很好的学习工具。就这样做吧。在其他地方,最好坦率地说。

现在,如果你真的很专心,你会看到到目前为止我们有这个:

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] 从技术上讲,它们是伪随机的,但真正的随机性很难产生。

于 2013-09-11T01:57:54.070 回答
0

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

myList = [randrange(0, 9) for x in xrange(n)]
average = sum(myList) / len(myList)
于 2013-09-11T01:23:45.600 回答
0

你没有走在正确的轨道上。请参阅此变量以了解曲目。

import random

def randomNumbers(n):
    l = random.sample(xrange(10),  n)
    return sum(l)/len(l)
于 2013-09-11T00:56:41.050 回答
0

您应该考虑使用 Numpy。这将使您的任务变得容易。

import numpy as np

def myfunc(n):
    x = np.random.randint(low=0, high=10, size=n)
    return np.mean(x)
于 2013-09-11T13:06:50.733 回答