我正在Python 3.x中创建一个程序,它要求用户输入他们的名字和姓氏,然后将这些存储在变量中,然后将这些变量连接成一个变量:
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 /'都计为字符串值,因此这些将被接受,这不是我想要发生的。< / p>
我希望有效输入只包含字母AZ / az(大写和小写),如果输入包含其他内容,则输出错误消息(例如'那是无效的,再试一次'。)用户是再次问了这个问题。我该怎么做?
答案 0 :(得分:4)
您要做的是实际检查您的字符串是否不是isalpha()
并输出错误并继续循环直到您获得有效的条目。
所以,为了给你一个想法,这是一个简单的例子:
while True:
name = input("input name")
if name.isalpha():
break
print("Please enter characters A-Z only")
print(name)
请注意,正如此问题的评论中所述,这仅限于包含字母的名称。有几个有效的名称将包含'
和-
,在想要验证名称时应该考虑这些名称。
答案 1 :(得分:2)
assert all('a'<=letter<='z' or 'A'<= letter <= 'Z' for letter in name)
如果name包含非字母字母,则会抛出错误。
答案 2 :(得分:2)
还有另一种解决方案。它不如使用re
或isalpha
有效,但允许您轻松自定义您允许的字符:
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 ------------------------------^
答案 3 :(得分: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')