私が見つけた質問のほとんどは、数字の文字を探しているという事実に偏っていますが、数字のない文字列にしたいものの数字を探しています。文字列を入力して、数字が含まれているかどうか、拒否されているかどうかを確認する必要があります。
この関数は、すべての文字が数字である場合にisdigit()
のみ戻ります。True
ユーザーが数字を入力したかどうかを確認したいので、文のような"I own 1 dog"
ものです。
何か案は?
このよう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
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
使用する
str.isalpha()
参照: https://docs.python.org/2/library/stdtypes.html#str.isalpha
文字列内のすべての文字がアルファベットで、少なくとも 1 文字ある場合は true、そうでない場合は false を返します。
any
とのこの組み合わせについて誰も言及していないことに驚いていmap
ます。
def contains_digit(s):
isdigit = str.isdigit
return any(map(isdigit,s))
Python 3では、おそらく最も高速です(おそらく正規表現を除く)のは、ループが含まれていないためです(また、関数のエイリアスにより、での検索が回避されstr
ます)。
Python 2 でmap
a を返すので使用しないでくださいlist
。これにより、any
短絡が解消されます。
これはどうですか?
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
これはおそらく Python での最良のアプローチではありませんが、Haskeller として、このラムダ/マップ アプローチは私にとって完全に理にかなっており、非常に短いものです。
anydigit = lambda x: any(map(str.isdigit, x))
もちろん名前を出す必要はありません。のように使用できるという名前でanydigit("abc123")
、これは私が探していたもののように感じます!
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 ループを使用することで、このイベントを保証しています。
これもうまくいきます。
if any(i.isdigit() for i in s):
print("True")