2014-09-30 83 views
0

我是一名Python初学者。我想要求用户输入他的名字。该名称只能包含字母A-Z,如果不是,我想显示一个错误并要求用户再次输入该名称,直到名称正确。这是我正在尝试的代码。但是,字符串即使包含数字和特殊字符也不会被检查。我在哪里错了?如何将python中的字符串与条件循环匹配

def get_first_name(): 
try_again = True 
while(try_again==True): 
    first_name = raw_input("Please enter your first name.") 
    if (re.match("^[A-Za-z]+$", first_name)==False): 
     try_again = True 
    else: 
     try_again = False 
     return first_name 
+0

当比较事物与布尔值时,你不需要说'x == True',你可以做'if x'。 – Ffisegydd 2014-09-30 20:39:00

+1

您能在收到raw_input后打印'first_name'吗? – 2014-09-30 20:40:10

+0

您需要使用'is'运算符将're.match'的结果与'None'进行比较。或者简单的'first_name.isalpha()'应该这样做。 – 2014-09-30 20:40:32

回答

2

你不需要re,只需使用str.isalpha

def get_first_name(): 
    while True: 
     first_name = raw_input("Please enter your first name.") 
     if not first_name.isalpha(): # if not all letters, ask for input again 
      print "Invalid entry" 
      continue 
     else: # else all is good, return first_name 
      return first_name 
In [12]: "foo".isalpha() 
Out[12]: True 

In [13]: "foo1".isalpha() 
Out[13]: False 
+0

该死的@Padraic你必须在蟒蛇SMH – 2014-09-30 20:45:12

+0

@mungaihkamau好,我不知道我有多好,但足以知道你不需要'重新';) – 2014-09-30 20:47:12

+0

这很快,声誉可以告诉所有 – 2014-09-30 20:49:09

0
if (re.match("^[A-Za-z]+$", first_name)==False): 

re.match当没有比赛时返回无。没有不等于错误。你可以这样写:

if not re.match("^[A-Za-z]+$", first_name):