课程
/后端开发
/Python
/python进阶
import math
def is_sqr(x): return isinstance(math.sqrt(x),int)
print filter(is_sqr, range(1, 101))
2018-01-24
源自:python进阶 2-6
正在回答
例子:math.sqrt(100) : 10.0 如上可知,x无论能否开方成一个整数,最终都会返回一个浮点数类型的数。 因此:isinstance(math.sqrt(x),int)永远为false,只能打印出一个空的list
qq_蜕变_33 提问者
因为math.sqrt(x)返回的是float,所以return isinstance(math.sqrt(x),int)返回的都是False;filter只把返回True的值加入列表返回.
因为math.sqrt(x)的运算结果中,即使是整数也保留了一位小数,比如math.sqrt(4)的结果是2.0,它并不是Int类型,故而isinstance(math.sqrt(x),int)的返回结果都是false,那么print filter(is_sqr, range(1, 101))的结果就过滤掉了列表中所有的元素,返回一个空的list。
解决办法是
def is_sqr(x):
return math.sqrt(x)%1 == 0
math.sqrt()这个的结果时浮点型的
举报
学习函数式、模块和面向对象编程,掌握Python高级程序设计