2016-04-05 120 views
1

我在Python 3.x中创建一个程序,它询问用户的名字和姓氏,然后将这些名称存储在变量中,然后将这些变量连接成一个变量:Python - 验证以确保输入只包含字符AZ

firstName = input("What's your first name? ") 
lastName = input("What's your first name? ") 
name = firstName + " " + lastName 

我尝试:

while True: 
    try: 
     firstName = input("What's your first name? ") 
     lastName = input("What's your first name? ") 
     name = firstName + " " + lastName 
     break 
    except ValueError: 
     print("That's invalid, please try again.") 

其确保的字符串被输入,但输入 'bob38', '74' 或 '] [p /' 所有计数为字符串值,所以这些会被接受,这不是我想要发生的事情。

我想要有效的输入只包含字母AZ/az(大写和小写),并且如果输入包含其他内容,则会输出错误消息(例如'That's invalid,try again')和用户再次被问到这个问题。我将如何做到这一点?

+0

这似乎是这样:http://stackoverflow.com/questions/5183488/python-string-replace-based -on-chars-not-in-regex –

+3

因此,Peter O'Hanraha-Hanrahan被禁止注册您的网站? –

+1

@DanielRoseman这是一个*非常*好点....我提供了一个答案,只是意识到我的姓氏也将被拒绝从这个网站。哈! :) – idjaw

回答

4

你想要做的是实际检查你的字符串是不是isalpha()并输出一个错误并继续你的循环,直到你得到一个有效的条目。

所以,给你一个想法,这里是一个简单的例子:

while True: 
    name = input("input name") 
    if name.isalpha(): 
     break 
    print("Please enter characters A-Z only") 

print(name) 

注意,作为在评论这个问题提到的,这是仅限于包含字母的名字。有几个有效名称将包含'-,这些名称在验证名称时可能应该考虑。

+2

或'如果name.isalpha():break',那么你不需要继续,最好的解决方案。 –

+1

@PadraicCunningham啊!当然!感谢您的高举。改变。 – idjaw

+0

谢谢。包含破折号( - )和撇号(')会更困难吗? – BobZeBuilder

2

assert all('a'<=letter<='z' or 'A'<= letter <= 'Z' for letter in name)

如果名称中包含非字母开头这将抛出一个错误。

1

您可以使用一个简单的正则表达式这一点 -

import re 
is_valid_name = r'[a-zA-Z]+' 

if bool(re.match(firstName, is_valid_name)) and bool(re.match(lastName, is_valid_name)): 
    name = firstName + lastName 
else: 
    print('thats invalid') 
1

还有另一种解决方案。它并不像使用reisalpha一样高效,但可以让你轻松定制您允许的字符:

valid_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 
# Just insert other characters into that string if you want to accept anything else. 

while True: 
    firstName = input("What's your first name? ") 
    if all(char in valid_characters for char in firstName): 
     break 
    print("That's invalid, please try again.") 

all检查是否从firstName所有字符都包含在valid_characters字符串并返回False如果其中任何不在其中。

所以要加空格和负-你可以稍微改变它:

valid_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ -' 
#      whitespace is here ------------------------------^ 
相关问题