我发现的大多数问题都偏向于这样一个事实,即他们在数字中寻找字母,而我在我想要的无数字符串中寻找数字。 我需要输入一个字符串并检查它是否包含任何数字,以及它是否拒绝它。
函数isdigit()仅当所有字符都是数字时才返回True。我只是想看看用户是否输入了一个数字,比如“我有一只狗”之类的句子。
什么好主意吗?
我发现的大多数问题都偏向于这样一个事实,即他们在数字中寻找字母,而我在我想要的无数字符串中寻找数字。 我需要输入一个字符串并检查它是否包含任何数字,以及它是否拒绝它。
函数isdigit()仅当所有字符都是数字时才返回True。我只是想看看用户是否输入了一个数字,比如“我有一只狗”之类的句子。
什么好主意吗?
当前回答
迭代器方法。它消耗所有字符,除非满足一个数字。next的第二个参数修复当迭代器为“空”时返回的默认值。在这种情况下,它被设置为False,但也“工作,因为它被强制转换为if中的布尔值。
def has_digit(string):
str_iter = iter(string)
while True:
char = next(str_iter, False)
# check if iterator is empty
if char:
if char.isdigit():
return True
else:
return False
或者只看生成器理解的第一项
def has_digit(string):
return next((True for char in string if char.isdigit()), False)
其他回答
你可以这样完成:
如果a_string.isdigit (): do_this () 其他: do_that ()
https://docs.python.org/2/library/stdtypes.html#str.isdigit
使用.isdigit()还意味着在需要使用列表推导式的情况下不必求助于异常处理(try/except) (try/except在列表推导式中是不可能的)。
您可以使用NLTK方法。
这将在文本中找到'1'和'One':
import nltk
def existence_of_numeric_data(text):
text=nltk.word_tokenize(text)
pos = nltk.pos_tag(text)
count = 0
for i in range(len(pos)):
word , pos_tag = pos[i]
if pos_tag == 'CD':
return True
return False
existence_of_numeric_data('We are going out. Just five you and me.')
我很惊讶没有人使用python操作符。使用它的工作原理如下:
foo = '1dfss3sw235fsf7s'
bar = 'lorem ipsum sit dolor amet'
def contains_number(string):
for i in range(10):
if str(i) in list(string):
return True
return False
print(contains_number(foo)) #True
print(contains_number(bar)) #False
或者我们可以使用函数isdigit():
foo = '1dfss3sw235fsf7s'
bar = 'lorem ipsum sit dolor amet'
def contains_number(string):
for i in list(string):
if i.isdigit():
return True
return False
print(contains_number(foo)) #True
print(contains_number(bar)) #False
这些函数基本上只是将s转换为一个列表,并检查列表中是否包含数字。如果是,则返回True,如果不是,则返回False。
任何和单词都可以组合起来达到如下所示的目的。
>>> def hasDigits(s):
... return any( 48 <= ord(char) <= 57 for char in s)
...
>>> hasDigits('as1')
True
>>> hasDigits('as')
False
>>> hasDigits('as9')
True
>>> hasDigits('as_')
False
>>> hasDigits('1as')
True
>>>
关于这个实现有几点。
any更好,因为它像C语言中的短路表达式一样工作,并且会在确定后立即返回结果,即在字符串'a1bbbbbbc'的情况下,'b'和' C '甚至不会进行比较。 Ord更好,因为它提供了更大的灵活性,比如只在“0”和“5”之间或任何其他范围内检查数字。例如,如果你要为数字的十六进制表示写一个验证器,你会希望字符串的字母只在' a '到'F'的范围内。
你可以使用range和count来检查一个数字在字符串中出现了多少次:
def count_digit(a):
sum = 0
for i in range(10):
sum += a.count(str(i))
return sum
ans = count_digit("apple3rh5")
print(ans)
#This print 2