刚开始学习python,遇到一个问题,请指点,谢谢

刚开始学习python,遇到一个问题,请指点,谢谢

在交互方式下
>>>int(12.34)
>>>12
没有问题,但是如果写在一个py文件里面比如
str=raw_input('input number:')
print 'number is %d' % (int(str))
执行的时候输入12.34就会报错“ValueError invalid literal for int() with base 10 :'12.34'”,请问这个是什么原因呢?


[Copy to clipboard] [ - ]
CODE:
>>> int("12")
12
>>> int("12.32")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '12.32'
>>>

你用 raw_input 读进来的是字符串。
应该是字符串如果带小数不能直接被转换为整型,交互模式下的12.34是不是字符串。
交互模式下把12.34给字符串,再用Int转换也是同样的问题。
哦,原来是这个意思,那请问有什么办法可以解决这个问题么?就是说可以让用户输入一个带小数的数值,然后转换成整数输出出来
有没有类似强制类型转换之类的函数呢?
int() 工厂函数是把数字和字符串转换为整型类,其中字符串只能包含数字
可以先把float()转换成浮点型,再转换

a=(raw_input('input number:'))
print 'number is %d' % int(float(a))
用 try, except 包装一下,输入不合法就让用户重新输入。那本 '热书' 的第十章有一个关于 float 的类似例子。
有两种办法,不过意思都是先转为float型,然后int,6楼的方法是对的。
1.
>>> a = '12.34'
>>> b = int(float(a))
>>> b

2.
>>> import string
>>> b = int(string.atof(a))
>>> b


QUOTE:
原帖由 retuor 于 2008-8-13 18:59 发表
用 try, except 包装一下,输入不合法就让用户重新输入。那本 '热书' 的第十章有一个关于 float 的类似例子。

en, 这里看错需求了,不好意思。

除了上面几位朋友的方法外,我再提供一些方法。

如果只想要小数点之前的部分,可以这样

[Copy to clipboard] [ - ]
CODE:
a=raw_input()
a=a.split('.')[0]
a=int (a)

即使输入没有小数点也可以得到正确结果。

如果你希望更精确地控制从 float 到 int 的转换,可以采用 math 模块里的 ceil 和 floor.
多谢楼上各位的指点,我先试验一下