我想创建一个带正整数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循环以及何时使用它们?
答案 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
长度的列表
让我们一次解决这个问题:
取正整数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))
sum
和len
可以使用任何可迭代的内容,例如list
或set
,或任何您喜欢的内容,并为您提供总和,长度等等否则你要求。这些都是很好的学习工具。这样做吧。在其他地方,最好坦率地说。
现在,如果你真的很专注,你会发现到目前为止我们已经有了这个:
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)