检查字符串是否只有字母和空格 - Python
Checking if string is only letters and spaces - Python
尝试将 python 变为 return 字符串仅包含字母和空格
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 到 return 字母和空格都只包含在字符串中,我在这里缺少什么?
一个字符不能同时是字母 和 和 space。它可以是 alpha 或 a space.
要求字符串只包含字母和spaces:
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")
要求字符串至少包含一个字母和至少一个space:
if any(x.isalpha() for x in string) and any(x.isspace() for x in string):
要求字符串至少包含一个alpha,至少一个space,并且只包含alpha和space:
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
正确的解决方案是使用 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 不能是字母字符和 space,但它只需要是两者之一即可满足您的约束。
编辑: 我在另一个答案中看到了您的评论。 alphabet = string.isalpha()
return True
当且仅当字符串中的 所有 个字符都是字母。这不是您想要的,因为您声明您希望代码在使用字符串 please
执行时打印 yes
,其中有一个 space。您需要单独检查每个字母,而不是整个字符串。
只是为了让你相信代码确实是正确的(好吧,好吧,你需要自己执行才能被说服,但无论如何):
>>> 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
如果您希望字符串中至少有一个,则需要 any:
if any(x.isalpha() for x in string) and any(x.isspace() for x in string):
如果你想要每个字符中的至少一个,但没有其他字符,你可以组合 all
、any
和 str.translate ,以下只会 return True
如果我们有至少一个 space,一个字母并且只包含这些字符。
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
然后翻译字符串,如果字符串为空则只有字母字符和 spaces。这将适用于大写和小写。
您可以将代码压缩为单个 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")
如果翻译后的字符串长度<原始字符串,剩下的是spaces,我们就满足了要求。
或者反转逻辑并翻译 spaces 并检查我们是否只剩下 alpha:
s_t = s.translate({ord(" "):"" })
if len(s_t) < len(s) and s_t.isalpha():
print("all good")
假设字符串的 alpha 总是多于 spaces,最后一个解决方案应该是迄今为止最有效的。
其实就是模式匹配练习,为什么不使用模式匹配呢?
import re
r = re.compile("^[a-zA-Z ]*$")
def test(s):
return not r.match(s) is None
或者在解决方案中是否有使用any()
的要求?
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")
// 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")
使用这样的模式匹配
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")
isalpha()
的用法不如使用正则表达式具体。
isalpha return 不仅对 [a-zA-Z] 如此,对其他字母 unicode 也是如此。
使用bool(re.match('^[a-zA-Z\s]+$', name)
您可以使用正则表达式来执行该操作
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)
尝试将 python 变为 return 字符串仅包含字母和空格
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 到 return 字母和空格都只包含在字符串中,我在这里缺少什么?
一个字符不能同时是字母 和 和 space。它可以是 alpha 或 a space.
要求字符串只包含字母和spaces:
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")
要求字符串至少包含一个字母和至少一个space:
if any(x.isalpha() for x in string) and any(x.isspace() for x in string):
要求字符串至少包含一个alpha,至少一个space,并且只包含alpha和space:
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
正确的解决方案是使用 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 不能是字母字符和 space,但它只需要是两者之一即可满足您的约束。
编辑: 我在另一个答案中看到了您的评论。 alphabet = string.isalpha()
return True
当且仅当字符串中的 所有 个字符都是字母。这不是您想要的,因为您声明您希望代码在使用字符串 please
执行时打印 yes
,其中有一个 space。您需要单独检查每个字母,而不是整个字符串。
只是为了让你相信代码确实是正确的(好吧,好吧,你需要自己执行才能被说服,但无论如何):
>>> 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
如果您希望字符串中至少有一个,则需要 any:
if any(x.isalpha() for x in string) and any(x.isspace() for x in string):
如果你想要每个字符中的至少一个,但没有其他字符,你可以组合 all
、any
和 str.translate ,以下只会 return True
如果我们有至少一个 space,一个字母并且只包含这些字符。
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
然后翻译字符串,如果字符串为空则只有字母字符和 spaces。这将适用于大写和小写。
您可以将代码压缩为单个 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")
如果翻译后的字符串长度<原始字符串,剩下的是spaces,我们就满足了要求。
或者反转逻辑并翻译 spaces 并检查我们是否只剩下 alpha:
s_t = s.translate({ord(" "):"" })
if len(s_t) < len(s) and s_t.isalpha():
print("all good")
假设字符串的 alpha 总是多于 spaces,最后一个解决方案应该是迄今为止最有效的。
其实就是模式匹配练习,为什么不使用模式匹配呢?
import re
r = re.compile("^[a-zA-Z ]*$")
def test(s):
return not r.match(s) is None
或者在解决方案中是否有使用any()
的要求?
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")
// 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")
使用这样的模式匹配
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")
isalpha()
的用法不如使用正则表达式具体。
isalpha return 不仅对 [a-zA-Z] 如此,对其他字母 unicode 也是如此。
使用bool(re.match('^[a-zA-Z\s]+$', name)
您可以使用正则表达式来执行该操作
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)