关于负数的isdigit()判断

时间:2024-06-10 12:33:20

-->the start

今天写作业的时候突然想到,一直使用isdigit()方法来处理用户的输入选择是不是数字,但是如果用户输入的是负数呢,会不会导致bug?

然后我就试了一下,居然不报错。。。然后我就纳闷了,赶紧试了一下:

关于负数的isdigit()判断

先来看看str类的.isdigit()方法的文档。

 def isdigit(self): # real signature unknown; restored from __doc__
"""
S.isdigit() -> bool Return True if all characters in S are digits
and there is at least one character in S, False otherwise.
"""
return False

很显然'-10'.isdigit()返回False是因为'-'不是一个digit。

然后我就想怎么才能让负数也正确的判断为整数呢,下面是从网上找到的答案,在这里记录下来。

 num = '-10'
if (num.startswith('-') and num[1:] or num).isdigit():
print(num是整数)
else:
print(num不是整数)

正则表达式法:

 num = '-10'
import re
if re.match(r'^-?(\.\d+|\d+(\.\d+)?)', num):
print(num是整数)
else:
print(num不是整数)

更Pythonic的方法:

 num = '-10'
if num.lstrip('-').isdigit():
print(num是整数)
else:
print(num不是整数)

当我看到第三个方法的时候,真是感触颇多,受益匪浅。

<--the end