Почему я получаю сообщение об ошибке: 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, почти так же часто, как использование ==
вместо =
или наоборот:)