269

私が見つけた質問のほとんどは、数字の文字を探しているという事実に偏っていますが、数字のない文字列にしたいものの数字を探しています。文字列を入力して、数字が含まれているかどうか、拒否されているかどうかを確認する必要があります。

この関数は、すべての文字が数字である場合にisdigit()のみ戻ります。Trueユーザーが数字を入力したかどうかを確認したいので、文のような"I own 1 dog"ものです。

何か案は?

4

18 に答える 18

406

このようanyに、関数で関数を使用できますstr.isdigit

>>> def has_numbers(inputString):
...     return any(char.isdigit() for char in inputString)
... 
>>> has_numbers("I own 1 dog")
True
>>> has_numbers("I own no dog")
False

または、このように正規表現を使用することもできます

>>> import re
>>> def has_numbers(inputString):
...     return bool(re.search(r'\d', inputString))
... 
>>> has_numbers("I own 1 dog")
True
>>> has_numbers("I own no dog")
False
于 2013-11-08T12:38:23.390 に答える
70

anyとの組み合わせを使用できますstr.isdigit

def num_there(s):
    return any(i.isdigit() for i in s)

この関数はTrue、文字列に数字が存在する場合は を返し、そうでない場合は を返しますFalse

デモ:

>>> king = 'I shall have 3 cakes'
>>> num_there(king)
True
>>> servant = 'I do not have any cakes'
>>> num_there(servant)
False
于 2013-11-08T12:39:57.547 に答える
38

使用する

str.isalpha()

参照: https://docs.python.org/2/library/stdtypes.html#str.isalpha

文字列内のすべての文字がアルファベットで、少なくとも 1 文字ある場合は true、そうでない場合は false を返します。

于 2015-06-28T02:20:05.130 に答える
3

anyとのこの組み合わせについて誰も言及していないことに驚いていmapます。

def contains_digit(s):
    isdigit = str.isdigit
    return any(map(isdigit,s))

Python 3では、おそらく最も高速です(おそらく正規表現を除く)のは、ループが含まれていないためです(また、関数のエイリアスにより、での検索が回避されstrます)。

Python 2 でmapa を返すので使用しないでくださいlist。これにより、any短絡が解消されます。

于 2018-09-20T21:32:02.137 に答える
2

これはどうですか?

import string

def containsNumber(line):
    res = False
    try:
        for val in line.split():
            if (float(val.strip(string.punctuation))):
                res = True
                break
    except ValueError:
        pass
    return res

containsNumber('234.12 a22') # returns True
containsNumber('234.12L a22') # returns False
containsNumber('234.12, a22') # returns True
于 2013-11-08T12:52:35.820 に答える
2

これはおそらく Python での最良のアプローチではありませんが、Haskeller として、このラムダ/マップ アプローチは私にとって完全に理にかなっており、非常に短いものです。

anydigit = lambda x: any(map(str.isdigit, x))

もちろん名前を出す必要はありません。のように使用できるという名前でanydigit("abc123")、これは私が探していたもののように感じます!

于 2020-05-21T09:22:03.087 に答える
2
import string
import random
n = 10

p = ''

while (string.ascii_uppercase not in p) and (string.ascii_lowercase not in p) and (string.digits not in p):
    for _ in range(n):
        state = random.randint(0, 2)
        if state == 0:
            p = p + chr(random.randint(97, 122))
        elif state == 1:
            p = p + chr(random.randint(65, 90))
        else:
            p = p + str(random.randint(0, 9))
    break
print(p)

このコードは、少なくとも大文字、小文字、および数字を含むサイズ n のシーケンスを生成します。while ループを使用することで、このイベントを保証しています。

于 2018-10-05T12:46:56.327 に答える
1

これもうまくいきます。

if any(i.isdigit() for i in s):
    print("True")
于 2020-12-18T14:33:09.060 に答える