python输入小数报错_python学习之路之int()奇怪的报错

今天闲来无事看了下python基础知识,当学到数据类型转换的int()方法时候。发现了这么一个有意思的事情,算是IDE或是解释器的一个小BUG。(具体原因暂不明,留待以后查找问题)

先讲下环境

操作系统:    windows10

python版本:3.6.5

IDE环境:     pycharm edu 2018.1 x64

解释器:       CPython

然后 int()方法的作用

函数

说明

int(x[,base])

j将x转换为一个整数

闲话少说上代码:

情况1:

#-*- coding:utf-8 -*-

>>>age=input()>>>print(int(age))15

输出正常

情况2:

#-*- coding:utf-8 -*-

>>>print(int(15.6))15 #使用int()转换的时候,会强制省略小数点后面的数字

输出正常

情况3:

#-*- coding:utf-8 -*-

age = input("请输入年龄:")if int(age)>=18:print("恭喜你已经成年了")else:print("你还需要在成长")

如果用户输入的是正常的不带小数点的整数字符串,那么转换输出没有问题。

当用户输入浮点型字符串后,开始数据类型转换时,出现了这么奇怪的报错:

#-*- coding:utf-8 -*-

age = input("请输入年龄:")if int(age)>=18: #这里的age是字符串类型,但是在条件表达式中是作为数字对待的print("恭喜你已经成年了")else:print("你还需要在成长")#执行以上参数后,输入值15.6,出现以下报错(不光是输入带小数点的数字字符串,只要是非整数以外的字符,均会报错)

Traceback (most recent call last):

File "C:/pythonstudy/startpython/day1.py", line 6, in

if int(age)>=18:

ValueError: invalid literalfor int() with base 10: ‘15.6‘ #值错误:int()以10为底的无效文字:‘15.6‘

可是情况1输入小数点的数字转换的时候是没有问题的。问题出在哪呢?

通过百度找到了解决方法

## -*- coding:utf-8 -*-import re #引入正则模块

age = input("请输入年龄:")

totalCount= re.sub("\D", "", age) #使用正则的sub方法过滤掉输入的字符串中age带的非数字字符和空的值。if int(totalCount)>=18:print("恭喜你已经成年了")else:print("你还需要在成长")

当输入带有小数点的字符串的时候,不会再出现值错误的报错。(但是乱输入非数字符号还是会报错)。但是打印totalConunt,你会发现这种方式不光去掉了字符串age中带的非数字字符和空值,连小数点就去掉了。

但是通过如下代码:

#-*- coding:utf-8 -*-

age = int(float(input("请输入年龄:")))if int(age)>=18:print("恭喜你已经成年了")else:print("你还需要在成长")

你会发现输入小数点又可以了。又不会报错了。

初步推测,int()函数能转换纯整数数字的字符串,不带小数点的(带小数点就会报错。int(方法应该是认为小数点不属于纯整数范畴))。float()能转换纯整数数字字符串或带小数点的纯浮点数字符串。

原文:https://www.cnblogs.com/yinxianglong/p/9240022.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值