基本程序生成随机数Python

问题描述:

我想创建一个程序,它将采用一个正整数n,然后创建一个由0到9之间的n个随机数组成的列表。一旦我找到那个,我想返回那些的平均值数字。我在正确的轨道上吗?基本程序生成随机数Python

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) 

有人能告诉我到一个网页,它讲述了一个和while循环,以及何时使用它们?

+0

您认为第三行('n> 0')发生了什么?您可能需要一个['if'](http://docs.python.org/2/tutorial/controlflow.html#if-statements)语句。此外,你没有从函数randomNumbers()中返回任何东西。如果您打算将“myList”列表返回给此函数的调用方,您可能需要使用['return'](http://docs.python.org/2/reference/simple_stmts.html#return)语句。 – crayzeewulf

+0

最后你会得到'返回总数(random.randint(0,9)为_范围(n))/ n' ... – Matthias

等号(=)仅用于设置“整个变量”的值(如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的,那么请注意,由另一个整数除以整数将分割前四舍五入到整数,所以你应该转换为浮动(十进制):

average = sum(myList)*1.0/n

对于Python 3.x中,INT/INT给你这样的浮动可能期望:

average = sum(myList)/n

返回一个值,使用return声明:

return average

+0

“我想返回这些数字的平均值” - 你的答案是一点点。 – user2357112

+0

哦,我的坏。我忘了最后一部分。固定。 – SimonT

您不在正确的轨道上。请参阅this variate了解赛道。

import random 

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

第四行混淆为什么你把变量“n”放入? – user2744489

+1

'n'是函数参数。伙计,这是你的任务还是什么?我们不应该提供分配答案。 – Brian

+0

我从来没有要求我的问题的答案。我想弄明白。我是编程初学者。 – user2744489

可以更简明列表理解来完成:

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

它有助于打破你想要做什么,如果它在一个单一的解释太复杂了。

  • 取正整数,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:通过检查类型nint并且n的值是正值(大于0)来做到这一点。

这是第一个要点。接下来是创建一个长度为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 a 随机整数 0到9之间的那个列表我们只叫result。这就是result.append(random.randint(0,9))所做的。

所以接下来你想返回该列表的平均值。那么,列表的平均值是列表中数字的sum除以lenthth。

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

sumlen可以采取任何可迭代的,像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]在技术上他们是伪随机的,但真正的随机性很难产生。

你应该考虑使用Numpy。这会让你的任务变得轻松。

import numpy as np 

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