Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅使用字母进行名称输入验证_Python_Validation_Variables_For Loop_Input - Fatal编程技术网

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。