在python中,如何验证用户输入是字母还是空格?
如何验证用户输入以限制他们只输入字母字符? 我目前已经建立了这个while循环在python中,如何验证用户输入是字母还是空格?,python,Python,如何验证用户输入以限制他们只输入字母字符? 我目前已经建立了这个while循环 while True: if message.isalpha(): print ("You have chosen to " + decision.lower() + " " + message.lower() + ".") break else: message = input("Please enter the message you wish to " + decision.lower(
while True:
if message.isalpha():
print ("You have chosen to " + decision.lower() + " " + message.lower() + ".")
break
else:
message = input("Please enter the message you wish to " + decision.lower() + " in alphabetical characters only.")
但是,我要验证的消息可以包含空格,如果消息是只包含字母字符的句子,则结果将返回false。您可以使用
设置
:
import string
if set(message).issubset(string.ascii_lowercase + " "):
print "Good one"
两种情况下都可以使用
string.ascii_字母。使用正则表达式
import re
if re.search("^[a-zA-Z\s]+$", message):
print ("You have chosen to " + decision.lower() + " " + message.lower() + ".")
else:
message = input("Please enter the message you wish to " + decision.lower() + " in alphabetical characters only.")
说明:
函数re.search尝试在变量消息中查找模式。如果找到,代码将输入If子句。模式由正则表达式“^[a-zA-Z\s]+$”定义。为了理解,让我们将表达式分开:
- ^表示字符串的开头
- a-z表示从a到z的任何字符(小写)
- A-Z表示从A到Z的任何字符(大写)
- \s表示空白
- +表示一次或多次
- $表示字符串的结尾
因为,a-z、a-z和\s在括号内[],它的意思是a-z或a-z或\s。使用+,我定义括号内的所有内容都可以出现一次或多次。因此,代码试图搜索出现一次或多次的任何小写、大写或空格。在测试之后,我最有效的方法(从时间角度)似乎是删除空格并使用str.isalpha
:
if 'my text'.replace(' ', '').isalpha():
print 'Good one'
时间安排:
>>> # My answer:
>>> def test()
'my text'.replace(' ', '').isalpha()
>>> %timeit test()
1000000 loops, best of 3: 336 ns per loop
>>> # Stuart's answer:
>>> def test()
set(message).issubset(string.ascii_lowercase + " ")
>>> %timeit test()
100000 loops, best of 3: 2.17 us per loop
>>> # Yuri's answer:
>>> reg = re.compile("^[a-zA-Z\s]+$")
>>> def test()
reg.search('my text')
>>> %timeit test()
1000000 loops, best of 3: 504 ns per loop
与其写str.isalpha
,不如写一个自己的函数,它接受一个字符串并返回True
,如果可以,则返回False
,否则,就使用它。我厌倦了它,它工作得很好,但是我不完全理解您发布的内容。请您解释一下“如果重新搜索(^[a-zA-Z\s]+$”,消息):“感谢您花时间解释它