Python 仅使用字母进行名称输入验证
有人能帮我吗Python 仅使用字母进行名称输入验证,python,validation,variables,for-loop,input,Python,Validation,Variables,For Loop,Input,有人能帮我吗 name=input("What is your name?").lower() for char in name: if not char.isalpha(): print ("invalid name") name=input("What is your name?").lower() 不幸的是,当我运行它时,如果我把数字1作为名称,那么无论怎样,第二次尝试都会得到正确的结果。例如,如果我输入123,同样的过程会重复3次 What
name=input("What is your name?").lower()
for char in name:
if not char.isalpha():
print ("invalid name")
name=input("What is your name?").lower()
不幸的是,当我运行它时,如果我把数字1作为名称,那么无论怎样,第二次尝试都会得到正确的结果。例如,如果我输入123,同样的过程会重复3次
What is your name?123
What is your name?123
invalid name
What is your name?bob
invalid name
What is your name?bob
invalid name
What is your name?bob
What is 9 - 8 ?
如果我输入1
What is your name?1
invalid name
What is your name?bob
What is 7 - 4 ?
问题是,即使您发现名称无效,循环仍会继续。此外,这只会询问两次,不会第二次验证名称 您应该使用
while
循环,而不仅仅是if
,而且实际上不需要分别检查每个字符的str.isalpha()
,您可以检查整个字符串是否返回False
,如果字符串中的任何字符不是字母表。范例-
while True:
name=input("What is your name?").lower()
if name.isalpha():
break
print ("invalid name")
#Rest of your logic.
str.isalpha()
在整个字符串上的行为示例-
>>> 'asd'.isalpha()
True
>>> 'a1sd'.isalpha()
False
>>> 'a_sd'.isalpha()
False
>>> 'aAdsd'.isalpha()
True
首先,如果希望返回字符串(而不是让Python将输入解释为表达式),请将
input()
更改为raw\u input()
(提供了方便的解释)。这只适用于Python2.X而不是3.X
其次,isalpha()
来自:
如果字符串中的所有字符都是字母,并且至少有一个字符,则返回true,否则返回false
因此,您可以传入整个字符串,而不是检查每个字符
它将循环三次,因为您正在循环初始字符串(例如“123”),如果输入“1bc”,则第一次尝试无效,但第一次和第二次尝试有效
取而代之的是,为什么不检查名称是否只包含整个字母
name = raw_input('What is your name?').lower()
valid = False
while not valid:
if name.isalpha():
is_valid = True
# Do whatever you need to do
else:
name = raw_input("Name is invalid, please try again.").lower()
或者,如果您希望在使用
时使用,而块Anand S Kumar会写出是否最适合您(我只是希望它更明确一点)。主要问题是,当您使用作为char in name:
时,它会循环使用所有以前错误的输入(在您的例子中:123)。因此,它会要求您再输入3次您的姓名
为了不与您所做的有太多的偏离,我提出了这个供您参考。请注意,isalpha()
可以在name
本身上使用,因此您无需遍历所有字符
name = input("What is your name?").lower()
while not name.isalpha():
print("invalid name")
name = input("What is your name?").lower()
print('Your name is ' + name)
使用raw\u input
代替input
<代码>输入
评估您的输入:输入与eval(原始输入(提示))@kmad1729等效,这仅适用于Python 2.x。我猜OP是Python3.x,因为他从输入中得到了一个字符串(否则他将无法循环或检查isalpha()
)。耶,你是对的。OP似乎在使用Python3。