關於負數的isdigit()判斷

-->the startgit

今天寫做業的時候忽然想到,一直使用isdigit()方法來處理用戶的輸入選擇是否是數字,可是若是用戶輸入的是負數呢,會不會致使bug?正則表達式

而後我就試了一下,竟然不報錯。。。而後我就納悶了,趕忙試了一下:spa

先來看看str類的.isdigit()方法的文檔。rest

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

 很顯然'-10'.isdigit()返回False是由於'-'不是一個digit。code

而後我就想怎麼才能讓負數也正確的判斷爲整數呢,下面是從網上找到的答案,在這裏記錄下來。blog

1 num = '-10'
2 if (num.startswith('-') and num[1:] or num).isdigit():
3     print(num是整數)
4 else:
5     print(num不是整數)

正則表達式法:ip

1 num = '-10'
2 import re
3 if re.match(r'^-?(\.\d+|\d+(\.\d+)?)', num):
4     print(num是整數)
5 else:
6     print(num不是整數)

更Pythonic的方法:文檔

1 num = '-10'
2 if num.lstrip('-').isdigit():
3     print(num是整數)
4 else:
5     print(num不是整數)

當我看到第三個方法的時候,真是感觸頗多,受益不淺。it

<--the endast

相關文章
相關標籤/搜索