3

我得到以下结果:

>>> x = '-15'
>>> print x.isdigit()
False

当我期望它是True。似乎没有返回True负数字符串的内置函数。检测它的建议是什么?

4

4 回答 4

7

推荐的方法是try

try:
    x = int(x)
except ValueError:
    print "{} is not an integer".format(x)

如果您还期望十进制数字,请使用float()而不是int().

于 2013-07-05T21:09:26.683 回答
3

可能有一种更优雅的 Python 方法,但一般方法是检查第一个字符是否为'-',如果是,则调用isdigit第二个字符。

于 2013-07-05T21:09:53.680 回答
3

也许正则表达式在这里是一个开销,但这可以在一个数字之前捕获+and ,也可以捕获and :-floatint

(基于@Mark 的评论)

代码:

import re

def isdigit(string):
    return bool(re.match(r'[-+]?(?:\d+(?:\.\d*)?|\.\d+)', string))

演示:

print isdigit('12')       # True
print isdigit('-12')      # True
print isdigit('aa')       # False
print isdigit('1a2a')     # False
print isdigit('-12-12')   # False
print isdigit('-12.001')  # True
print isdigit('+12.001')  # True
print isdigit('.001')     # True
print isdigit('+.001')    # True
print isdigit('-.001')    # True
print isdigit('-.')       # False
于 2013-07-05T21:21:53.170 回答
1

Use lstrip:

>>> negative_number = "-1"
>>> negative_number.lstrip('-').isnumeric()
True

>>> positive_number = "2"
>>> positive_number.lstrip('-').isnumeric()
True
于 2021-07-07T21:57:03.597 回答