我在python3.x中创建了一个程序,它要求用户输入名字,然后输入姓氏,并将其存储在变量中,然后将变量连接到一个变量中:
1
2
3firstName = input("What's your first name?")
lastName = input("What's your first name?")
name = firstName +"" + lastName
我试过:
1
2
3
4
5
6
7
8while 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/"都将计为字符串值,因此可以接受这些值,这不是我想要的结果。
我希望有效输入只包含字母a-z/a-z(大写和小写),如果输入包含任何其他内容,则会输出一条错误消息(例如,"这是无效的,请重试"),并再次询问用户问题。我该怎么做?
似乎是这样的:stackoverflow.com/questions/5183488/…
那么,彼得·奥汉拉哈-汉拉汉被禁止注册你的网站?
@Danielroseman这是一个很好的观点……我,谁提供了一个答案,刚刚意识到我的姓氏将被拒绝从这个网站以及。哈!:)
用于思考名称验证代码的有用链接。
我承认这样的名字是不会被接受的。xd我没有提到撇号或破折号之类的字符,因为我认为它们会使解决方案更难理解和复杂,而且我是Python(或任何相关的编程语言)的初学者。
您要做的是实际检查字符串是否不是isalpha(),并输出一个错误,然后继续循环,直到得到一个有效的条目。
所以,为了给你一个想法,这里有一个简单的例子:
1
2
3
4
5
6
7while True:
name = input("input name")
if name.isalpha():
break
print("Please enter characters A-Z only")
print(name)
注意,正如本问题的注释中所述,这仅限于包含字母的名称。有几个有效的名称包含'和-,在验证名称时可能需要考虑这些名称。
或者if name.isalpha():break,那么你不需要继续,不管怎样,最好的解决方案。
@帕德拉克宁安啊!当然!谢谢你的提醒。改变。
谢谢。将破折号(-)和撇号(-)包括在内会更困难吗?
@bobzebuilder好吧,一旦你开始冒险去验证正确的名字,你会开始意识到在a-z之间有不止一个字符需要验证,你可能会想一些更优雅的东西来验证正确的名字是什么。您可以组合一个正则表达式来验证这一点。
@如果你刚开始学习,你就用这个来学习。这个溶液很好。但要记住,这个解决方案可能会变得更加复杂,因为您试图验证的是正确的名称。沿着你将要学习的道路走下去,但是把这些知识放在一边,以备日后访问。当你谈到像regex这样的事情时,你可以重新审视一下,看看你能做些什么使它更健壮。:)
您可以使用make一组有效字符,只需检查是否有奇数字符,但这也会使您对Mr -----打开。
@我非常感谢你的帮助。既然我是一个初学者,正如你所说的,我现在就要坚持这一点,但将来我会重新审视这一点,以改进它,正如你所建议的。谢谢您。:)
@你好,我刚刚注意到一些事情。你没有把print("Please enter characters A-Z only")放在else声明中。我相信我理解为什么-这是因为如果名称有效,那么它会立即退出while循环,因此下一行不会执行。因此出于好奇,使用else:而不是保持原样会降低效率吗?
@根据您对代码中发生的事情的正确理解,bobzebuilder是不必要的。
还有另一个解决方案。它不如使用re或isalpha的效率高,但允许您轻松自定义允许的字符:
1
2
3
4
5
6
7
8valid_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。
因此,要添加空白和减号-,您可以稍微更改它:
1
2valid_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ -'
# whitespace is here ------------------------------^
assert all('a'<=letter<='z' or 'A'<= letter <= 'Z' for letter in name)
如果名称中包含非字母,则会引发错误。
您可以为此使用简单的正则表达式-
1
2
3
4
5
6
7import 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')