鱼C论坛

 找回密码
 立即注册
查看: 1660|回复: 8

[已解决]python小白对isinstance的提问

[复制链接]
发表于 2018-1-31 03:34:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
times=3
while times:
    X=input("输入一个小数")
    if (isinstance(X,float))<1:
        print("敲里吗,重新输入")
        times=times-1
    else:
        times=0
        print("是小数")

各位大佬,我看了视频想试验一下isinstance的用法…然后就写了这段bug,请问是用法不对吗?还是说其他地方出错了= =运行出来永远显示“敲里吗重新输入”,即使我输入的是小数。
最佳答案
2018-1-31 07:50:25
input返回的是字符串类型,你用isinstance将它和float比较结果肯定为False,也就是0,当然小于1了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-31 04:59:51 | 显示全部楼层

回帖奖励 +1 鱼币

我运行没问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 07:50:25 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
input返回的是字符串类型,你用isinstance将它和float比较结果肯定为False,也就是0,当然小于1了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 08:19:11 | 显示全部楼层
你这个程序这一句  if (isinstance(X,float))<1:好怪异,这个条件是说,如果x这个数值类型是float型,不管大于1还是小于1都是小数,因为isinstance返回要么是1,要么是0,同理如果不是float类型,不管大于1还是小于1都是执行循环内的"敲里吗,重新输入"3次,而如楼上所述,input函数接受的数据都是字符串型,所以最后导致无论输入什么都是执行3边"敲里吗,重新输入"。所以我闹不清楚你加上<1的条件是为了干什么?其实本身isinstance本身的返回0,1就可以支持if判断语句了。闹不清楚你的具体需求程序也没法具体修改。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 08:51:57 | 显示全部楼层
>>> isinstance(str, float) < 1
True
>>>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 08:55:38 | 显示全部楼层
原因在于你的 if 条件永远不会为 False
分析:
1、X = input(“请输入一个小数”)        #这里不论你输入的是小数,还是整数,X 的值都是字符串类型;
2、if (isinstance(X, float) < 1):      #字符串类型的X的值显然不是float类型,所以 False < 1 为True,于是输出“敲里吗,重新输入”

按照这个判断依据,永远不会执行else语句。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 09:15:03 | 显示全部楼层
冰封雪舞 发表于 2018-1-31 08:19
你这个程序这一句  if (isinstance(X,float))

我的想法跟你一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 09:51:34 | 显示全部楼层
判断是否为小数用判断是否字符串里有小数点更好
你这里非要用的话可以用eval 把字符串X的字面量转换为相应的数值
问题就是不安全

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-1 03:09:21 | 显示全部楼层
谢谢各位大佬!懂了懂了 其实就是对input后面默认str不了解 现在知道了 马上去改,至于为什么写if (isinstance(X,float))<1 其实就是想判断X输入是否为float 如果不是则isinstance返回False 0<1 然后执行下面的语句。OKOK谢谢各位大佬 本小白还没有接触太多的bif 在慢慢摸索中 谢谢每一位回复的大佬@冰封雪舞 @raimond @铁棍阿童木 @cats_miao @sky
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-6 14:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表