web-dev-qa-db-ja.com

文字列に数字のみが含まれているかどうかをPythonでどのようにチェックしますか?

文字列に数字のみが含まれているかどうかをどのように確認しますか?

ここで試してみました。私はこれを達成する最も簡単な方法を見たいです。

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 __== "__main__":
    main()
    input("Press enter to exit: ")
94
Coder77

isdigitオブジェクトでstrメソッドを使用する必要があります。

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

isdigit documentation: から

str.isdigit()

文字列内のすべての文字が数字で、少なくとも1つの文字がある場合はtrueを返し、そうでない場合はfalseを返します。

8ビット文字列の場合、このメソッドはロケールに依存します。

193
mhlester

str.isdigit を使用します。

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

文字列を使用 isdigit function:

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

ここでtry catchブロックを使用できます。

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

チェックで問題が発生するたびに、strは時々Noneになることがあり、strがNoneになる可能性があるため、str.isdigit()を使用するだけではエラーが発生するため十分ではありません。

AttributeError: 'NoneType'オブジェクトには属性 'isdigit'がありません

そして、最初にstrがNoneかどうかを検証する必要があります。 multi-ifブランチを回避するための明確な方法は次のとおりです。

if str and str.isdigit():

これが私のような同じ問題を抱えている人々に役立つことを願っています。

1
zhihong

float numbersnegatives numbersなどについてはどうでしょう。前の例はすべて間違っています。

今まで私はこのようなものを得ましたが、私はそれがはるかに良いかもしれないと思います:

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

'。'が1つまたはない場合にのみtrueを返します。数字の列。

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

falseを返します

1
Joe9008

このコメントで指摘されているように pythonで文字列に数字のみが含まれているかどうかを確認するにはどうすればよいですかisdigit()メソッドは、このユースケースでは完全に正確ではありません。キャラクターのように:

>>> "\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")
1
mit

正規表現を使用することもできますが、

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つすべてを見るとわかるように、たとえば、文字列にはnoしかありません。だから、それらに与えられたそれぞれのソリューションに従うことができます。

0
Devendra Bhat