你如何在python中检查一个字符串是否只包含数字?

时间:2014-01-27 18:19:35

标签: python string numbers

如何检查字符串是否只包含数字?

我已经在这里试了一下。我希望看到实现这一目标的最简单方法。

import string

def main():
    isbn = input("Enter your 10 digit ISBN number: ")
    if len(isbn) == 10 and string.digits == True:
        print ("Works")
    else:
        print("Error, 10 digit number was not inputted and/or letters were inputted.")
        main()

if __name__ == "__main__":
    main()
    input("Press enter to exit: ")

10 个答案:

答案 0 :(得分:188)

您希望在isdigit对象上使用str方法:

if len(isbn) == 10 and isbn.isdigit():

来自isdigit documentation:

str.isdigit()
     

如果字符串中的所有字符都是数字,则返回true   并且至少有一个角色,否则为假。

     

对于8位字符串,此方法取决于语言环境。

答案 1 :(得分:30)

使用str.isdigit

>>> "12345".isdigit()
True
>>> "12345a".isdigit()
False
>>>

答案 2 :(得分:8)

使用字符串isdigit功能:

>>> s = '12345'
>>> s.isdigit()
True
>>> s = '1abc'
>>> s.isdigit()
False

答案 3 :(得分:2)

您可以在此处使用try catch block:

s="1234"
try:
    num=int(s)
    print "S contains only digits"
except:
    print "S doesn't contain digits ONLY"

答案 4 :(得分:1)

每次遇到检查问题都是因为str有时可能是None,如果str可以是None,只使用str.isdigit()是不够的,因为你会收到错误

  

AttributeError:' NoneType'对象没有属性' isdigit'

然后你需要先验证str是否为None。为了避免使用multi-if分支,一个明确的方法是:

if str and str.isdigit():

希望这有助于人们像我一样有同样的问题。

答案 5 :(得分:1)

我可以想到2种方法来检查字符串是否全部不是数字

方法1(在python中使用内置的isdigit()函数):-

>>>st = '12345'
>>>st.isdigit()
True
>>>st = '1abcd'
>>>st.isdigit()
False

方法2(在字符串顶部执行异常处理):-

st="1abcd"
try:
    number=int(st)
    print("String has all digits in it")
except:
    print("String does not have all digits in it")

以上代码的输出为:

String does not have all digits in it

答案 6 :(得分:0)

浮点数底片数字等等。之前的所有示例都是错误的。

到现在为止,我得到了类似的东西,但我认为它可能会好很多:

'95.95'.replace('.','',1).isdigit()
只有当有一个'或'时,

才会返回true。在数字串中。

'9.5.9.5'.replace('.','',1).isdigit()

将返回false

答案 7 :(得分:0)

您还可以使用正则表达式

import re

例如:-1)word =“ 3487954”

re.match('^[0-9]*$',word)

例如:-2)word =“ 3487.954”

re.match('^[0-9\.]*$',word)

例如:-3)word =“ 3487.954 328”

re.match('^[0-9\.\ ]*$',word)

您可以看到所有3个例子,例如,您的字符串中没有任何内容。因此,您可以按照他们提供的相应解决方案进行操作。

答案 8 :(得分:0)

正如此评论How do you check in python whether a string contains only numbers?中所指出的,isdigit()方法在此用例中并不完全准确,因为对于某些数字字符,它返回True:

>>> "\u2070".isdigit() # unicode escaped 'superscript zero' 
True

如果需要避免这种情况,则以下简单函数检查字符串中的所有字符是否为“ 0”和“ 9”之间的数字:

import string

def contains_only_digits(s):
    # True for "", "0", "123"
    # False for "1.2", "1,2", "-1", "a", "a1"
    for ch in s:
        if not ch in string.digits:
            return False
    return True

在问题示例中使用:

if len(isbn) == 10 and contains_only_digits(isbn):
    print ("Works")

答案 9 :(得分:0)

您可以使用str.isdigit()方法或str.isnumeric()方法