鱼C论坛

 找回密码
 立即注册
查看: 2294|回复: 9

[已解决]python3.7.2中int()的使用疑问!

[复制链接]
发表于 2019-2-20 23:51:38 | 显示全部楼层 |阅读模式

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

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

x
刚开始学小甲鱼零基础入门的第二节课,有一个
a=input('请输入0到100的数字:\n')
print(a)
print('a type is',type(a))
#b=float(a)

#print(b,'b type is',type(b))
#temp=int(b)
temp=int(a) #当程序运行到这里的时候会报错
print(temp)
if temp in range(0,100):
    print('你妹的真棒,^_^')
else:
    print('你大爷的,真丑!T_T')



================================================
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>>
================ RESTART: D:/Program Files/Python37/1st-3.py ================
请输入0到100的数字:
3.14
3.14
a type is <class 'str'>
Traceback (most recent call last):
  File "D:/Program Files/Python37/1st-3.py", line 8, in <module>
    temp=int(a)
ValueError: invalid literal for int() with base 10: '3.14'

=================================================


所以我的问题是为什么输入小数的时候,int(a)取整会报错??
最佳答案
2019-2-21 11:15:40
这是python 强类型语言的特性。对于python2 来说 input 语句输入的就是数字,所以就是数值类型的转换。(好久不用python2记不特别清楚了,是不是直接就是整数,反正是数字),你要输入字符串必须用raw_input
对于python3 的引擎取消了原来的raw_input ,而input 输入进来就是个字符串(class_str)。要实现字符串的数字->整数,估计是内部先进行遍历看看是不是都是digit 字符,这时候出现的"."就是非法字符,所以直接抛出错误了。
所以解决的方案是 int(float(input())) 即先将小数字符串->float类型的数字->取整。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-2-21 01:05:05 | 显示全部楼层
本帖最后由 jackz007 于 2019-2-21 01:17 编辑

        用 int(v) 做测试,当 v 为数值型变量时,整型、浮点都可以接受,但是,当 v 为字符串型变量时, 只能接受整型数的字符串。

        根据楼主提供的信息,a 的类型是字符串,显然,'3.14' 并非整数串,此即出错的原因。

        在 Python 2.7 下,同样输入 3.14,显示 a 的类型是浮点数,代码能正常执行,恐怕这是 Python 2.x 和 Python 3.x 下 input() 函数存在的显著区别。

        以下是测试运行实况:

F:\[2019]\00.00.Exercise\Python\int>python x.py
请输入0到100的数字:
3.14
3.14
('a type is', <type 'float'>)
3
你妹的真棒,^_^

F:\[2019]\00.00.Exercise\Python\int>

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

使用道具 举报

发表于 2019-2-21 08:44:46 | 显示全部楼层
直接转换字符串为int,字符串中不能有小数点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-2-21 10:09:28 | 显示全部楼层
用float()把字符串转换成浮点数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-2-21 11:15:40 | 显示全部楼层    本楼为最佳答案   
这是python 强类型语言的特性。对于python2 来说 input 语句输入的就是数字,所以就是数值类型的转换。(好久不用python2记不特别清楚了,是不是直接就是整数,反正是数字),你要输入字符串必须用raw_input
对于python3 的引擎取消了原来的raw_input ,而input 输入进来就是个字符串(class_str)。要实现字符串的数字->整数,估计是内部先进行遍历看看是不是都是digit 字符,这时候出现的"."就是非法字符,所以直接抛出错误了。
所以解决的方案是 int(float(input())) 即先将小数字符串->float类型的数字->取整。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-21 12:59:31 | 显示全部楼层
本帖最后由 13572044595 于 2019-2-21 13:03 编辑

修改第一行代码:

方法1:
  1. a = eval(input('请输入0到100的数字:\n'))   # eval()-- 把元素当代码来处理,或者理解为 去掉两边的 引号
复制代码
方法2:
  1. a = float(input('请输入0到100的数字:\n'))   # float() -- 把元素 转化 为 浮点型
复制代码

示例:
  1. >>>
  2. >>>
  3. >>> a = '3.14'
  4. >>>
  5. >>> float(a)
  6. 3.14
  7. >>>
  8. >>> eval(a)
  9. 3.14
  10. >>>
  11. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-2-21 17:48:24 | 显示全部楼层
13572044595 发表于 2019-2-21 12:59
修改第一行代码:

方法1:

非常感谢,学到了 eval()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-21 17:49:22 | 显示全部楼层
yanyongyu 发表于 2019-2-21 10:09
用float()把字符串转换成浮点数

嗯嗯,这个我也试验出来了,只是不懂的原理啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-21 17:50:04 | 显示全部楼层
jackz007 发表于 2019-2-21 01:05
用 int(v) 做测试,当 v 为数值型变量时,整型、浮点都可以接受,但是,当 v 为字符串型变量时,  ...

分析的很有道理哦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-2-21 17:50:36 | 显示全部楼层
BngThea 发表于 2019-2-21 08:44
直接转换字符串为int,字符串中不能有小数点

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-16 14:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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