Python 我的代码中的函数不起作用

Python 我的代码中的函数不起作用,python,index-error,Python,Index Error,我正在做一个程序,其中包括一些验证 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(Ne

我正在做一个程序,其中包括一些验证

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
number=[“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”]
def UsernameValidation():
新的\用户名\字符=(“”)
有效=0
如果len(新用户名)
New\u Username[len(新用户名)-1]
不是New\u Username中的最后一个字符,您可以通过说
New\u Username[len(新用户名)]
来尝试访问该字符以外的一个字符

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

String: 'H', 'e', 'l', 'l', 'o'
Index:   0 ,  1 ,  2 ,  3 ,  4 
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
len(string)
返回字符串中的字符数,在以下示例中,字符数为5,5超出范围,例如:

String: 'H', 'e', 'l', 'l', 'o'
Index:   0 ,  1 ,  2 ,  3 ,  4 
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

这是函数的更新版本。正如你在下面的评论中所看到的,它有一些问题

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
def用户名验证(新用户名):
新用户名=str(新用户名)

如果len(新用户名)Well
new\u username[len(新用户名)]
len(x)
对于列表/字符串
x
无效,因为索引范围从
0
len(x)-1
(包括两者)。字符串、列表等中的最高索引比其长度小一个,因此
new\u username[len(新用户名)]
正在尝试索引字符串结尾以外的内容。还有什么是
数字
?顺便说一句,
用户名验证
函数应该接受它正在验证的用户名作为参数。它不应该从全局上下文中阅读,那只是混乱。当然
如果不是len(新的_用户名),请在必要时添加注释来解释为什么要进行这些更改。