如果在单个解释中过于复杂,它有助于分解您正在尝试做的事情。
- 取一个正整数,
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:
通过检查is的类型和 that的值是否为正(大于 0)来做到这一点。n
int
n
这是完成的第一个要点。接下来是创建一个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
的数字除以len
gth。
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] 从技术上讲,它们是伪随机的,但真正的随机性很难产生。