-3

我正在制作一个包含一些验证的程序

number = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]

def UsernameValidation():
    New_Username_char = ("")
    Valid = 0
    if not len(New_Username) <= 4:
        print("Username too short")
    for i in range(0, len(New_Username) - 2):
        New_Username_char[i] = str(New_Username[i])
    if New_Username_char.islower():
        print("Username should be in uppercase")
        Valid += 1
    if New_Username[len(New_Username)] not in number or New_Username[len(New_Username)-1] not in number:
        print("The Username should be followed by two number")
        Valid += 1

这些错误出现了

回溯(最后一次调用):文件“C:\Users\Thomas\Desktop\FIle Handling\Mini Project.py”,第 71 行,在 CreateAccount() 文件“C:\Users\Thomas\Desktop\FIle Handling\Mini Project.py”,第 60 行,在 CreateAccount GetUsername() 文件中“C:\Users\Thomas\Desktop\FIle Handling\Mini Project.py”,第 41 行,在 GetUsername UsernameValidation() 文件中“C:\Users\Thomas\ Desktop\FIle Handling\Mini Project.py",第 33 行,如果 New_Username[len(New_Username)] 不在数字中或 New_Username[len(New_Username)-1] 不在数字中:IndexError: string index out of range

当我打印出New_Username它显示的长度时0(New_Username 中应该有一些东西)

4

2 回答 2

1

这是您的函数的更新版本。正如您在下面的评论中看到的那样,它存在一些问题。

def UsernameValidation(new_username):
    new_username = str(new_username)
    if len(new_username) <= 4:
        print("Username too short")
        return False
    if any(x.islower() for x in new_username):
        print("Username should be in uppercase")
        return False
    if not new_username[-2:].isnumeric():
        print("The Username should be followed by two numbers")
        return False
    print('Password accepted!')
    return True

print(UsernameValidation('and'))       # too short          - REJECTED
print(UsernameValidation('ANDrEW'))    # contains lowercase - REJECTED
print(UsernameValidation('ANDREW'))    # no numbers         - REJECTED
print(UsernameValidation('ANDREW12'))  #          ACCEPTED

建议:

  • 花一些时间阅读索引
  • 对变量使用小写字母
  • 您不必对所有内容都使用循环。有一些功能可以为您做到这一点(str()any()这个例子中)
  • 函数应该返回一些东西。一个被调用的函数UsernameValidation应该会返回一个基于 is name 的布尔值
  • 如果没有必要,不要在函数中使用全局命名空间。而是传递参数。
  • 如果不需要变量,请不要声明它们 ( number = [...])
于 2017-03-06T12:29:54.987 回答
-1

New_Username[len(New_Username) - 1]是 New_Username 中的最后一个字符,您尝试通过说New_Username[len(New_Username)]

字符串中第一个字符的索引是 0,接下来是 1,然后是 2,然后是 3,依此类推,例如:

String: 'H', 'e', 'l', 'l', 'o'
Index:   0 ,  1 ,  2 ,  3 ,  4 

len(string)返回字符串中的字符数,在下面的例子中字符数是5,5是越界,例如:

String: 'H', 'e', 'l', 'l', 'o'
Index:   0 ,  1 ,  2 ,  3 ,  4 ,  5
                                  ^
    There is no character at index 5, so an IndexError is thrown
于 2017-03-06T12:28:40.700 回答