Почему я получаю сообщение об ошибке: AttributeError: объект builtin_function_or_method не имеет атрибута isdigit

Я создаю систему входа в систему, которая запрашивает у пользователя имя пользователя и пароль при регистрации. Я использовал функцию для проверки правильности имени пользователя, а затем для проверки того, был ли пароль действительным в соответствии с требованиями (имя пользователя уже не может использоваться и должно содержать буквы)(пароль должен содержать заглавные буквы, строчные буквы и номера). функция имени пользователя работает отлично, но по какой-то причине в функции пароля я получаю сообщение об ошибке: AttributeError: 'builtin_function_or_method' объект не имеет атрибута 'isdigit' Кто-нибудь знает, что я делаю по-разному между двумя функциями, которые делают одну функцию и другую не. Благодарю.

    def Username(user_name):
    user_names = open('Username list.txt', 'r+')
    uname_list = user_names.readlines()
    char_user = [user_name]
    for i in range(len(uname_list)):
        uname_list[i] = uname_list[i].strip('\n')
    for i in range(len(uname_list)):
        if uname_list[i] == user_name:
            return 'username already taken'
    for i in range(len(char_user)):
        if char_user[i].isspace() == True:
            return 'username cannot contain spaces' 
    if user_name.isdigit() == True:
        return 'username must contain letters'
    elif len(user_name) < 4 or len(user_name) > 12:
        return 'username must be between 4 and 12 characters'
    else:
        user_names.write(str(user_name + '\n'))
        file.close(user_names)
        return True

def Password(password, p2):
    passwords = open('Password list.txt', 'r+')
    if password != p2:
        return 'you did not enter the same password twice'
    elif password.isdigit() == True:
        return 'username must contain letters'
    elif password.islower() == True:
        return 'username must contain a capital letter'
    elif password.isupper() == True:
        return 'username must contain a lower case letter' 
    elif password.isalpha() == True:
        return 'username must contain a number'
    elif len(user_name) < 4 or len(user_name) > 12:
        return 'username must be between 4 and 12 characters'
    else:
        passwords.write(str(password + '\n'))
        return True 


print 'What would you like your username to be?'        
print  'Your username must be between 4 and 12 characters, contain letters and not contain any spaces'
user_name = raw_input()
valid = Username(user_name)
while valid != True:
    print valid
    user_name = raw_input()
    valid = Username(user_name)

print 'enter your password twice below for validication'
password = raw_input()
password2 = raw_input()
valid = Password(password,password2)
while valid != True:
    print valid
    print 'enter your password twice below'
    password = raw_input
    password2 = raw_input
    valid = Password(password,password2)

Что происходит при запуске программы.

    '''What would you like your username to be?
    Your username must be between 4 and 12 characters, contain letters and not contain any spaces
    Test
    enter your password twice below for validication
    Your password must include capital letters, lowercase letters, numbers and be betweeen 4 and 12 characters
    testing
    testing
    username must contain a capital letter
    enter your password twice below
    AttributeError: 'builtin_function_or_method' object has no attribute 'isdigit'''

2 ответа

Вы только почтение raw_input но не называйте это в последних двух строках.

Ваша проверка пароля глючит. Все нижние + цифры или все верхние + цифры являются действительными паролями.

Когда вы вызываете функцию, вам нужны скобки () вокруг него:

>>> password = raw_input
>>> password.isdigit() 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'builtin_function_or_method' object has no attribute 'isdigit'
>>> password = raw_input()
67
>>> password.isdigit()
True
>>> 

Вот ваш обновленный код:

def Username(user_name):
    user_names = open('Username list.txt', 'r+')
    uname_list = user_names.readlines()
    char_user = [user_name]
    for i in range(len(uname_list)):
        uname_list[i] = uname_list[i].strip('\n')
    for i in range(len(uname_list)):
        if uname_list[i] == user_name:
            return 'username already taken'
    for i in range(len(char_user)):
        if char_user[i].isspace() == True:
            return 'username cannot contain spaces' 
    if user_name.isdigit() == True:
        return 'username must contain letters'
    elif len(user_name) < 4 or len(user_name) > 12:
        return 'username must be between 4 and 12 characters'
    else:
        user_names.write(str(user_name + '\n'))
        file.close(user_names)
        return True

def Password(password, p2):
    passwords = open('Password list.txt', 'r+')
    if password != p2:
        return 'you did not enter the same password twice'
    elif password.isdigit() == True:
        return 'username must contain letters'
    elif password.islower() == True:
        return 'username must contain a capital letter'
    elif password.isupper() == True:
        return 'username must contain a lower case letter' 
    elif password.isalpha() == True:
        return 'username must contain a number'
    elif len(user_name) < 4 or len(user_name) > 12:
        return 'username must be between 4 and 12 characters'
    else:
        passwords.write(str(password + '\n'))
        return True 


print 'What would you like your username to be?'        
print  'Your username must be between 4 and 12 characters, contain letters and not contain any spaces'
user_name = raw_input()
valid = Username(user_name)
while valid != True:
    print valid
    user_name = raw_input()
    valid = Username(user_name)

print 'enter your password twice below for validication'
password = raw_input()
password2 = raw_input()
valid = Password(password,password2)
while valid != True:
    print valid
    print 'enter your password twice below'
    password = raw_input()
    password2 = raw_input()
    valid = Password(password,password2)

В середине вашего файла вы правильно называете raw_input(), но вы забыли в конце. Простая ошибка Python, почти так же часто, как использование == вместо = или наоборот:)

Другие вопросы по тегам