在python中,如何验证用户输入是字母还是空格?

在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循环

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-za-z\s在括号内[],它的意思是a-za-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]+$”,消息):“感谢您花时间解释它