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

请问这两种为什么报错

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

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

请帮忙解惑



正在回答

4 回答

这个不能那样计算的,你可以单独试试看 print(isinstance(math.sqrt(4),int)),这个的结果也是错的,因为math.sqrt()出来的是flout 所以不是int

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

吴暖 提问者

明白了,非常感谢!
2018-04-26 回复 有任何疑惑可以回复我~
>>>isinstance(math.sqrt(4),int)
False

这个结果总是False,为啥呢?因为4的平方根是2.0 ,是一个浮点数,而不是整数
所以你得替换一下 把浮点数转换成整数
>>> isinstance(int(math.sqrt(4)),int)
True

# int(2.0) = 2
而2.0 == 2 是true的
所以你得判断下平方根是否是整数
import math
def is_sqrt(x):
    return math.sqrt(x) == int(math.sqrt(x))
print filter(is_sqrt, range(1,101))


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

吴暖 提问者

讲得很明白,谢谢!
2018-05-02 回复 有任何疑惑可以回复我~

除了一楼说的语法错误,return x and isinstance(math.sqrt(x),int)==Ture,这部分最后结果,根据and和or的短路运算法则,return的总是and后面的东西,并非数x,所以无法得出正确的结果,有尝试性的将x与and后的判断换过位置,得出的结果跟没换位置前一样,都是“[]”,但不清楚为什么都会是返回一个空列表,如有知晓其中缘由,请帮忙解惑


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

吴暖 提问者

我觉得不是and,or的问题,因为下面的代码是成功运行的 import math def is_sqr(x): return x and math.sqrt(x) % 1 == 0 print filter(is_sqr, range(1, 101))
2018-04-12 回复 有任何疑惑可以回复我~

最后一行少了 )

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

吴暖 提问者

加了)之后,在dos下运行,是这样报错的 Traceback (most recent call last): File "new2.py", line 6, in <module> print filter(is_sqrt, range(1, 101)) File "new2.py", line 4, in is_sqrt return x and isinstance(math.sqrt(x)) == True TypeError: isinstance expected 2 arguments, got 1 你能帮我分析一下为什么报错吗?
2018-04-11 回复 有任何疑惑可以回复我~
#2

qq_龙_18 回复 吴暖 提问者

这个是说isinstance需要俩个参数,你只给了一个!哈哈……
2018-05-03 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

请问这两种为什么报错

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