如何识别字符串中的单个字符

时间:2015-03-02 04:36:15

标签: python

我试图创建一个返回' true'如果输入的字符串中没有数字并且“假”'如果它中有任何数字

前:

  

'俄亥俄州' = true,' agent 007' = false

到目前为止,我已经尝试了

numbers = '0123456789'
Lowercase = 'abcdefghijklmnopqrstuvwxyz'
Uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def alphabet_only(a_string):
    if a_string[:] not in numbers:
        print('true')
    else:
        print('false')

问题是我无法弄清楚如何在字符串中单独识别单个数字字符以将其标记为false。

到目前为止它将返回

  

6 =假(好)

     

54 =真(坏)

     

pie = true(好)

     

pie18 = true(不好)

6 个答案:

答案 0 :(得分:8)

使用标准库中的isalpha()

>>> test='test1'
>>> test.isalpha()
>>> False

答案 1 :(得分:3)

您是否考虑过使用正则表达式?

import re

def has_no_numbers(string):
    return re.search('[0-9]', string) is None

答案 2 :(得分:3)

为了测试字符串是否包含数字,您有各种选项

  1. 使用正则表达式
  2. 使用set intersection set(string.digits).intersection(st)) < 9
  3. 使用str.translatelen(st.translate(None, string.digits)) < len(st)
  4. 但是上述所有内容都是一种矫枉过正,因为你只需要确保其中一个字符是一个数字。哪个数字或出现次数无关紧要。在这种情况下使用str.isdigit检查并使用any短路布尔评估应该是正确的方法。

    >>> def has_numbers(st):
        return any(e.isdigit() for e in st)
    
    >>> has_numbers('agent 007')
    True
    >>> has_numbers('agent')
    False
    

答案 3 :(得分:1)

使用set-intersection:

digits = set("0123456789")

def alphabet_only(a_string):
   if set(a_string) & digits:
       print ("false")
   else:
       print ("true")

答案 4 :(得分:0)

我认为你可以这样做:

import string

def alphabet_only(a_string):
    if all(v not in string.digits for v in a_string):
        print('true')
    else:
        print('false')


alphabet_only("6") # false        
alphabet_only("54") # false  
alphabet_only("pie") # true       
alphabet_only("pie18") #  false 
alphabet_only("Ohio")  # true       
alphabet_only("agent 007") # false  

答案 5 :(得分:0)

实际上比以前提出的方法更简单:

如果你这样做:

list(string123)

你会得到这样的东西

['s','t','r','i','n','g','1','2','3']

现在您需要做的就是设置一个简单的for循环来检查每个条目(未测试):

some_list = list(string123)
for i in range(len(some_list)):
    if some_list[i] == 1 or some_list[i] == 2 or ..... or some_list[i] == 9:
        print 'False'
    else:
        print 'True'

或另一个用户指出,if条件可以更改为以下内容:

0 <= some_list[i] <= 9:

从而使代码更紧凑。

以下是代码的漂亮版本:

for c in 'string123':
    0 <= c <= 9:
        print 'False'
    else:
        print 'True'