为了账号安全,请及时绑定邮箱和手机立即绑定

假如把标准答案中第一个return改成print 0 就会运行出0 None 1.5 2.4 这样的结果,为什么会出现多出来的None?

def average(*args):

    sum=0.0

    if len(args)==0:

        print 0

    for x in args:

        sum=sum+x

        return sum/len(args)

print average()

print average(1, 2)

print average(1, 2, 2, 3, 4)


结果:

0

None

0.5

0.2

自己检查出最后一个return缩进有问题,但真的好神奇,为什么会有None??为什么会是平均数得到结果会是首位数除以位数呢

正在回答

2 回答

为什么会是平均数得到结果会是首位数除以位数

for x in args:

        sum=sum+x

        return sum/len(args)

这个return缩进了,表示return是在这个for语句下的,当遍历第一个x时,执行完sum=sum+x后,直接就执行return语句了,这个for语句实际上只进行了一次遍历,所以你得到的平均数只是第一位数除以位数。


1 回复 有任何疑惑可以回复我~
#1

慕粉4231960 提问者

非常感谢!!
2017-03-20 回复 有任何疑惑可以回复我~
#2

慕粉4231960 提问者

非常感谢!
2017-03-20 回复 有任何疑惑可以回复我~

args等于0的时候执行到print 0结束,会有一个返回值,因为没写return的值所以默认返回None

0 回复 有任何疑惑可以回复我~
#1

慕粉4231960 提问者

谢谢,我再把问题补充一下,我第二个return缩进有问题,但为什么会是平均数得到结果会是首位数除以位数呢
2017-03-19 回复 有任何疑惑可以回复我~
#2

慕粉2311432765 回复 慕粉4231960 提问者

求和在for循环内完成,用总和值除以可变参数的长度就是平均数
2017-03-19 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
初识Python
  • 参与学习       758623    人
  • 解答问题       8667    个

学python入门视频教程,让你快速入门并能编写简单的Python程序

进入课程

假如把标准答案中第一个return改成print 0 就会运行出0 None 1.5 2.4 这样的结果,为什么会出现多出来的None?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信