isdigit()不能判断负数

isdigit()不能判断负数

>>> '-1'.isdigit()
False
>>> '1'.isdigit()
True


请问怎么判断输入的是数字,包括输入的是负数时,谢谢
可以使用:
try:
    int(a)
except:
    pass
除了这个还有没有其它的方法,为什么isdigit()不能判断负数为数字呢?
isdigit的docstring:
Return True if all characters in S are digits
and there is at least one character in S, False otherwise.'
可见,isdigit逐个判断字符串中的每个字符,是否所有的都是数字(也就是说'0'到'9')?

'-1'.isdigit()返回False是因为'-'不是一个digit。

如果楼主想判断输入的in_str是否整数,可以这样:
if (in_str[0] == '-' and in_str[1:] or in_str).isdigit():
    ...

当然也可以这样:
import re
if re.match(r'^-?\d+$', in_str):
    ...

如果输入的可能是小数,可以这样:
import re
if re.match(r'^-?(\.\d+|\d+(\.\d+)?)', in_str)
    ...


QUOTE:
原帖由 limodou 于 2008-10-6 11:57 发表
可以使用:
try:
    int(a)
except:
    pass

感觉这个是最简单的,但还是觉得不优雅。
>>> a=10;
>>> isinstance(a,int)
True
>>> a=-10;
>>> isinstance(a,int)
True
>>> a='asdf'
>>> isinstance(a,int)
False
>>>
楼上的不行,lz要判断的不是对象的类型,而是字符串是否是数值表示。
那看来只能正则匹配了.


QUOTE:
原帖由 leefurong 于 2008-10-6 14:36 发表
isdigit的docstring:
Return True if all characters in S are digits
and there is at least one character in S, False otherwise.'
可见,isdigit逐个判断字符串中的每个字符,是否所有的都是数字(也就是 ...

想起来了,string[0] == 'a' 可以这样:string.startswith('a')
更优雅