鱼C论坛

 找回密码
 立即注册
查看: 3774|回复: 16

[已解决]为什么int函数,不能输入在小数点的数字?

[复制链接]
发表于 2022-3-27 09:26:24 | 显示全部楼层 |阅读模式

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

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

x
我的代码:
temp = input ('请输入一个数字:')
num = int(temp)

执行时,输入整数是没问题,比如1,3,5;但是输入带小数的数字就报错,比如1.1,4.5
请输入一个数字:8.1
Traceback (most recent call last):
  File "D:/个人学习/python/作业/homework009.py", line 2, in <module>
    num = int(temp)
ValueError: invalid literal for int() with base 10: '8.1'
最佳答案
2022-3-27 10:13:05
虫行天下 发表于 2022-3-27 10:09
这样确实可以跑通。但是我搞不明白,为什么直接是IDEL直接执行是可以的(输入8.1,得到8),通过input函 ...

你直接输 8.1 是 float 型,input() 获取到的是 str 型,

用 shell 的话,你可以这样看到它们的区别:
>>> 8.1
8.1                      # 不带引号
>>> temp = input()
8.1
>>> temp
'8.1'                      # 带引号
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-27 09:32:13 | 显示全部楼层
int 不能把小数字符串转成小数,你可以用 float 或 eval
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-27 09:33:04 | 显示全部楼层
        int() 的输入参数如果是字符串,那么,其内容只能是整数,如果是数字,那么,可以是浮点数,本例属于输入是字符串的情况。
        试试下面的代码,无论输入是浮点数还是整型数都是可以的。
temp = input ('请输入一个数字:')
num = eval(temp)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-27 09:34:11 | 显示全部楼层
isdkz 发表于 2022-3-27 09:32
int 不能把小数字符串转成小数,你可以用 float 或 eval

不是,int函数可以直接取整,把小数点后面是数字舍掉吗 。我直接执行int(8.1),直接返回8吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-27 09:35:41 | 显示全部楼层
虫行天下 发表于 2022-3-27 09:34
不是,int函数可以直接取整,把小数点后面是数字舍掉吗 。我直接执行int(8.1),直接返回8吗?


我说的是小数字符串不能用 int,int('8.1') 是不可以的,input获取到的是字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-27 09:37:39 | 显示全部楼层
isdkz 发表于 2022-3-27 09:35
我说的是小数字符串不能用 int,int('8.1') 是不可以的,input获取到的是字符串

我执行的int(8.1),不是int(‘8.1’)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-27 09:38:35 | 显示全部楼层
虫行天下 发表于 2022-3-27 09:37
我执行的int(8.1),不是int(‘8.1’)

你的代码不是这样吗?

temp = input ('请输入一个数字:')           # input得到的就是字符串
num = int(temp)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-27 09:39:50 | 显示全部楼层
jackz007 发表于 2022-3-27 09:33
int() 的输入参数如果是字符串,那么,其内容只能是整数,如果是数字,那么,可以是浮点数,本例属 ...

为什么,在IDLE,直接执行int(8.1),返回8;我这样的代码,就不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-27 09:42:26 | 显示全部楼层
isdkz 发表于 2022-3-27 09:38
你的代码不是这样吗?

temp = input ('请输入一个数字:')           # input得到的就是字符串

“请输入一个数字,”是提示符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-27 09:46:17 | 显示全部楼层
isdkz 发表于 2022-3-27 09:38
你的代码不是这样吗?

temp = input ('请输入一个数字:')           # input得到的就是字符串

temp 得到是一个字符串  8.1

为什么不能通过int函数,把这个字符串转成整数8?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-27 09:47:11 | 显示全部楼层
虫行天下 发表于 2022-3-27 09:42
“请输入一个数字,”是提示符

我说的不是 “请输入一个数字,”

你可以看一下 temp 的类型
temp = input ('请输入一个数字:')
print(type(temp))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-27 09:49:18 | 显示全部楼层
虫行天下 发表于 2022-3-27 09:46
temp 得到是一个字符串  8.1

为什么不能通过int函数,把这个字符串转成整数8?

因为 int() 只能把 float 型转为整数,不能把小数字符串转成整数,

你非要将字符串字符串转成整数的话可以这样:
temp = input ('请输入一个数字:')
num = int(eval(temp))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-27 09:57:59 | 显示全部楼层
可以这么写:
num = int(input ('请输入一个数字:'))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-27 10:09:34 | 显示全部楼层
isdkz 发表于 2022-3-27 09:49
因为 int() 只能把 float 型转为整数,不能把小数字符串转成整数,

你非要将字符串字符串转成整数的话 ...

这样确实可以跑通。但是我搞不明白,为什么直接是IDEL直接执行是可以的(输入8.1,得到8),通过input函数传递一下就不行;input传递8,是可以的,8.1就不行?8.1就不是字符串了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-27 10:12:09 | 显示全部楼层
虫行天下 发表于 2022-3-27 10:09
这样确实可以跑通。但是我搞不明白,为什么直接是IDEL直接执行是可以的(输入8.1,得到8),通过input函 ...

int (8.1)、int(8.0)执行都没问题;我那个代码,执行8.0也不行,为啥我那个代码排斥浮点数的输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-27 10:13:05 | 显示全部楼层    本楼为最佳答案   
虫行天下 发表于 2022-3-27 10:09
这样确实可以跑通。但是我搞不明白,为什么直接是IDEL直接执行是可以的(输入8.1,得到8),通过input函 ...

你直接输 8.1 是 float 型,input() 获取到的是 str 型,

用 shell 的话,你可以这样看到它们的区别:
>>> 8.1
8.1                      # 不带引号
>>> temp = input()
8.1
>>> temp
'8.1'                      # 带引号
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-27 10:22:30 | 显示全部楼层
虫行天下 发表于 2022-3-27 10:12
int (8.1)、int(8.0)执行都没问题;我那个代码,执行8.0也不行,为啥我那个代码排斥浮点数的输入

我大概明白你的问题了,以你的代码为例,因为从输入值变到整数需要经过:字符串 -> 浮点数 -> 整数(3个类型)不能直接用 int(字符串但是是浮点数形态),只能是字符串或浮点数其中一种。
如果是直接从代码中转换,如:浮点数 -> 整数(2个类型)就能直接用 int(浮点数)或int(字符串但是是整数形态)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 23:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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