Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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 执行第三个循环时,输入未检查第一个循环?py3_Python_Python 3.x_Input_While Loop_Alphanumeric - Fatal编程技术网

Python 执行第三个循环时,输入未检查第一个循环?py3

Python 执行第三个循环时,输入未检查第一个循环?py3,python,python-3.x,input,while-loop,alphanumeric,Python,Python 3.x,Input,While Loop,Alphanumeric,我正在python3中输入用户名。我只对字符串使用了3个while循环,最多12个字符,少于3个字符。所以名字必须是字母表和真名。当我运行程序并输入错误的名称时,它会不断要求更正名称,但当我直接正确输入第三个循环时,它不会检查前两个循环。我的意思是,当我输入超过12个字符时,突然输入带有数字的随机名称,它只接受输入,但不执行第一个循环,程序只在终端窗口结束。 这是我的代码: print('lets see what it does') f_name=input('Enter your firs

我正在python3中输入用户名。我只对字符串使用了3个while循环,最多12个字符,少于3个字符。所以名字必须是字母表和真名。当我运行程序并输入错误的名称时,它会不断要求更正名称,但当我直接正确输入第三个循环时,它不会检查前两个循环。我的意思是,当我输入超过12个字符时,突然输入带有数字的随机名称,它只接受输入,但不执行第一个循环,程序只在终端窗口结束。 这是我的代码:

print('lets see what it does')

f_name=input('Enter your first name:')
while f_name.isalpha()==False:
    print('Please Enter Alphabets only')
    f_name=input('Please reenter name:')
while len(f_name)>12:
    print('Name exceeds character limit.')
    f_name=input('Please reenter name:')
while len(f_name)<3:
    print('Name must be atlest three characters long')
    f_name=input('Please ReEnter Name:')

lets see what it does
Enter your first name:ppp000
Please Enter Alphabets only
Please reenter name:pppppppppppppppp8
Please Enter Alphabets only
Please reenter name:ppppppppppppppp8
Please Enter Alphabets only
Please reenter name:pp9
Please Enter Alphabets only
Please reenter name:pp00
Please Enter Alphabets only
Please reenter name:pppppppppp8
Please Enter Alphabets only
Please reenter name:jijija8
Please Enter Alphabets only
Please reenter name:ijajsidaosdasdasdasd
Name exceeds character limit.
Please reenter name:ppp0```

我建议使用函数来验证名称。然后可以使用
:=
运算符定义
f\u名称

def is_name_valid(name):
    return (
            name.isalpha() and
            12 >= len(name) >= 3
    )


def main():
    while not is_name_valid(f_name := input('Enter your first name: ')):
        print("Name is invalid")
    print(f_name)


如果需要提示名称无效的原因,可以使用不同的返回值:
0
用于
valid
1
用于
。isalpha()
等。。。为了更好地处理错误,您可能需要使用
enums
consts

三个while循环是顺序的和独立的。一旦您通过第一个或第二个,它们将不会被重新访问。您的意图可能不同,即如果同时满足所有三个条件,您希望接受输入。要做到这一点,请使用“and”将条件组合成一个while循环,只使用一个while循环。因此,要使用and我可以编写[[[while f_name.isalpha()==False,len(f_name)>12和len(f_name),感谢它的帮助