检查字符串是否只是字母和空格 - Python

时间:2015-04-05 17:55:27

标签: python contain

尝试让python返回一个字符串只包含字母和空格

string = input("Enter a string: ")

if all(x.isalpha() and x.isspace() for x in string):
    print("Only alphabetical letters and spaces: yes")
else:
    print("Only alphabetical letters and spaces: no")

我一直在尝试please,它出现为Only alphabetical letters and spaces: no我使用了or代替and,但只满足一个条件。我需要满足两个条件。那句话必须包含只有字母只有空格但必须至少有一种。它必须包含任何数字。

我在这里缺少什么让python返回字母和空格只包含在字符串中?

10 个答案:

答案 0 :(得分:14)

字符不能同时是alpha 空格。它可以是alpha 空格。

要求字符串仅包含字母和空格:

string = input("Enter a string: ")

if all(x.isalpha() or x.isspace() for x in string):
    print("Only alphabetical letters and spaces: yes")
else:
    print("Only alphabetical letters and spaces: no")

要求字符串包含至少一个alpha和至少一个空格:

if any(x.isalpha() for x in string) and any(x.isspace() for x in string):

要求字符串包含至少一个alpha,至少一个空格,以及仅包含alpha和空格:

if (any(x.isalpha() for x in string)
    and any(x.isspace() for x in string)
    and all(x.isalpha() or x.isspace() for x in string)):

测试:

>>> string = "PLEASE"
>>> if (any(x.isalpha() for x in string)
...     and any(x.isspace() for x in string)
...     and all(x.isalpha() or x.isspace() for x in string)):
...     print "match"
... else:
...     print "no match"
... 
no match
>>> string = "PLEASE "
>>> if (any(x.isalpha() for x in string)
...     and any(x.isspace() for x in string)
...     and all(x.isalpha() or x.isspace() for x in string)):
...     print "match"
... else:
...     print "no match"
... 
match

答案 1 :(得分:3)

正确的解决方案是使用or

string = input("Enter a string: ")

if all(x.isalpha() or x.isspace() for x in string):
    print("Only alphabetical letters and spaces: yes")
else:
    print("Only alphabetical letters and spaces: no")

虽然你有一个字符串,但你正在迭代该字符串的字母,所以你一次只能有一个字母。因此,单独的char不能是字母字符和当时的空格,但它只需要是满足约束条件的两个中的一个。

编辑:我在另一个答案中看到了您的评论。 alphabet = string.isalpha()返回True,当且仅当字符串中的所有字符都是字母字母时。这不是您想要的,因为您声明在使用具有空格的字符串yes执行时,您希望代码打印please。你需要自己检查每个字母,而不是整个字符串。

只是为了让你相信代码确实是正确的(好吧,你需要自己执行才能确信,但无论如何):

>>> string = "please "
>>> if all(x.isalpha() or x.isspace() for x in string):
    print("Only alphabetical letters and spaces: yes")
else:
    print("Only alphabetical letters and spaces: no")


Only alphabetical letters and spaces: yes

编辑2:从您的新评论来看,您需要这样的内容:

def hasSpaceAndAlpha(string):
    return any(char.isalpha() for char in string) and any(char.isspace() for char in string) and all(char.isalpha() or char.isspace() for char in string)

>>> hasSpaceAndAlpha("text# ")
False
>>> hasSpaceAndAlpha("text")
False
>>> hasSpaceAndAlpha("text ")
True

def hasSpaceAndAlpha(string):
    if any(char.isalpha() for char in string) and any(char.isspace() for char in string) and all(char.isalpha() or char.isspace() for char in string):
        print("Only alphabetical letters and spaces: yes")
    else:
        print("Only alphabetical letters and spaces: no")

>>> hasSpaceAndAlpha("text# ")
Only alphabetical letters and spaces: no
>>> hasSpaceAndAlpha("text")
Only alphabetical letters and spaces: no
>>> hasSpaceAndAlpha("text ")
Only alphabetical letters and spaces: yes

答案 2 :(得分:2)

如果您想要字符串中的至少一个,则需要any

if any(x.isalpha() for x in string) and any(x.isspace() for x in string):

如果您想要至少有一个但没有其他字符可以合并allanystr.translate,则以下内容只会返回True至少一个空格,一个alpha并且只包含那些字符。

 from string import ascii_letters

 s = input("Enter a string: ")

 tbl = {ord(x):"" for x in ascii_letters + " "}

if all((any(x.isalpha() for x in s),
   any(x.isspace() for x in s),
   not s.translate(tbl))):
    print("all good")

检查每个中是否至少有一个any然后翻译字符串,如果字符串为空,则只有字母字符和空格。这适用于大写和小写。

您可以将代码压缩为单个if/and

from string import ascii_letters

s = input("Enter a string: ")
s_t = s.translate({ord(x):"" for x in ascii_letters})

if len(s_t) < len(s) and s_t.isspace():
    print("all good")

如果翻译的字符串的长度是&lt;原始的和剩下的就是我们满足要求的空间。

或者反转逻辑并翻译空格并检查我们是否只剩下alpha:

s_t = s.translate({ord(" "):"" })
if len(s_t) < len(s) and s_t.isalpha():
    print("all good")

假设字符串总是具有比空格更多的alpha,最后的解决方案应该是效率最高的。

答案 3 :(得分:2)

实际上,这是一种模式匹配练习,为什么不使用模式匹配呢?

import re
r = re.compile("^[a-zA-Z ]*$")
def test(s):
    return not r.match(s) is None  

或者是否有任何要求在解决方案中使用any()

答案 4 :(得分:1)

您可以使用正则表达式来执行该操作

import re


name = input('What is your name ?')

if not re.match("^[a-z A-Z]*$", name):
    print("Only Alphabet and Space are allowed")
else:
    print("Hello" ,name)

答案 5 :(得分:0)

    string = input("Enter a string: ")
    st1=string.replace(" ","").isalpha()
    if (st1):
        print("Only alphabetical letters and spaces: yes")
    else:
        print("Only alphabetical letters and spaces: no")

答案 6 :(得分:0)

// remove spaces and question is only alphanumeric
def isAlNumAndSpaces(string):
    return string.replace(" ","").isalnum()
strTest = input("Test a string: ")
if isAlNumAndSpaces(strTest):
    print("Only alphabetical letters and spaces: yes")
else:
    print("Only alphabetical letters and spaces: no")

答案 7 :(得分:0)

使用这样的模式匹配

import re
alpha_regex = "^[a-z A-Z]+$"
if re.match(alpha_regex, string):
   print("Only alphabetical letters and spaces: yes")
else:
   print("Only alphabetical letters and spaces: no")

答案 8 :(得分:0)

isalpha() 的用法没有使用正则表达式那么具体。

isalpha 不仅会为 [a-zA-Z] 返回 true,还会为其他字母 unicode 返回 true。

使用bool(re.match('^[a-zA-Z\s]+$', name)

答案 9 :(得分:-1)

如果字符串中的每个字符都是字母,则Python的isalpha()方法返回布尔值True。否则,它返回布尔值False。在Python中,空格不是字母字符,因此,如果字符串包含空格,则该方法将返回False。 访问我的网站:-https://webgeeks.uk.com/