python输入姓名_关于Python:Python – 确保输入仅包含字符A-Z的验证

我在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')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值