我正在编写一个包含名称验证的脚本,但它会保持循环

时间:2015-02-25 09:48:26

标签: python-3.x

letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
userName = input('Please enter your name: ')

def NameValidation(userName):
    nameValidation = []
    print(nameValidation)
    nameValidation += username.lower()
    print(nameValidation)
    for x in range(len(nameValidation)):
        if nameValidation[x] not in letters:
            print('I\'m sorry, I can\'t accept that')
            userName = input('Please enter your name: ')
            NameValidation(userName)
NameValidation(userName)

如果您第一次使用正确,此脚本将允许您继续,但如果您在userName中输入一个输入字符串,其中输入字符串的任何字母都不包含在letter List中,你将无法继续下一部分。当它循环返回并再次询问您的userName时,即使它符合要求,脚本也不会让您继续执行脚本的下一部分。

1 个答案:

答案 0 :(得分:1)

由于递归,您的代码会保持循环。设,输入为sakib123,然后您的代码将sakib1,然后输出I'm sorry, I can't accept that。所以你再次给出New Input,nameValidation是new_Input + 23。这就是为什么它不断循环。 :)

您可以尝试使用此代码。 :):)

letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
userName = input('Please enter your name: ')

def NameValidation(userName):
    nameValidation = ''
    print (nameValidation) 
    nameValidation += userName.lower()
    print (nameValidation)
    flag = True
    for x in range(len(nameValidation)):
        if nameValidation[x] not in letters:
            print('I\'m sorry, I can\'t accept that')
            flag = False
            break

    if not flag:
        userName = input('Please enter your name: ')
        NameValidation(userName)

NameValidation(userName)