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

请问出错原因?

源代码如下:

def fun( m ):
    for i in range(1, 10):
      if i * i == m:
        return m
        
x = list( range(1, 100) )
filter(fun, x)

运行结果:运行后没有过滤掉其他的数字,还是 0 一直到 100https://img1.sycdn.imooc.com//5b6318a300017bf609660215.jpg

所以想请教一下哪里出了问题?



正在回答

5 回答

import math


def is_sqr(x):

    return math.sqrt(x) % 1 == 0 #切记,这里返回的是一个布尔值,真/假


print filter(is_sqr, range(1, 101))


2 回复 有任何疑惑可以回复我~

返回值是布尔值。。。划重点了,这是要考的,哈哈

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

对的,他好像也是放回的一个对象,然后想请问下你是用的哪个编译器?我写 print() 函数时要加上括号才能正确运行,我用的是官方最简单的那个 python3.7 

https://img1.sycdn.imooc.com//5b63d05800019c2610680542.jpg


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

Duaire

我用JB的pycharm而已
2018-08-03 回复 有任何疑惑可以回复我~

https://img1.sycdn.imooc.com//5b63ca810001d1d413260210.jpg 你是打印filter也没有过滤么

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

Huffie 提问者

你好,可以看下我下面的回复吗,这里回复发不了图片。
2018-08-03 回复 有任何疑惑可以回复我~
#2

慕数据7329446 回复 Huffie 提问者

你的代码缺了print以及range里面无法取到最后一个数,所以需要改成11和101 def fun( m ): for i in range(1, 11): if i * i == m: return m x = list( range(1, 101) ) print filter(fun, x)
2018-08-26 回复 有任何疑惑可以回复我~

range(1,101)

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

Duaire

前面的课程有说过 Python的数组第一个数即是0位也是1位 所以数字1他占了数组0位和1位
2018-08-03 回复 有任何疑惑可以回复我~
#2

Huffie 提问者

这个应该不是主要的问题,我指的是最终还是没有过滤掉多余的数
2018-08-03 回复 有任何疑惑可以回复我~
#3

Huffie 提问者 回复 Duaire

这个改过来之后也没有过滤掉,只是变成了0-100。
2018-08-03 回复 有任何疑惑可以回复我~
#4

Duaire 回复 Huffie 提问者

emmmmm 但是你是输出x喔 你的x负责了list给他 而你的list却只是单纯遍历1-100的数而已 如果你要好像课程里面一样你应该是打印filter才行
2018-08-03 回复 有任何疑惑可以回复我~
#5

Duaire 回复 Huffie 提问者

print filter(fun,x) ?
2018-08-03 回复 有任何疑惑可以回复我~
查看2条回复

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

请问出错原因?

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