#python
#python
Вопрос:
У меня есть два файла, и я хочу сохранить в Username.txt , но моя функция просто возвращает мне «None».
def username_input(user):
user_len = int(len(user))
while user_len > 12 or not (user.isalnum()):
print("Error: the username must be an alphanumeric value nand have as maximum 12 characters")
user = input("Type a valid username: ")
user_len = int(len(user))
if user_len <= 12 and user.isalnum():
return user
with open("Username.txt", "a") as usr_txt:
usr = username_input(user = input("Type a username: "))
usr_txt.write(usr)
Комментарии:
1. Если
while
условие не выполняется в первую очередь, весь код в нем пропускается, и функция возвращает сNone
.
Ответ №1:
В python no return
или return
означает return None
. Если никогда не вводить while user_len > 12 or not (user.isalnum()):
, оно достигнет конца и не вернется сюда, поэтому оно будет получено None
извне, когда вы вызываете username_input
.
Надеюсь, это поможет вам, и прокомментируйте, если у вас возникнут дополнительные вопросы. : )
Ответ №2:
Как сказал @Michael Butscher, если имя пользователя, которое вы передаете в первый раз, не соответствует while
условию, которое вы возвращаете None
. Чтобы исправить это, вы можете удалить внутреннюю if
проверку и вернуть имя пользователя перед выходом из вашей функции:
def username_input(user):
while len(user) > 12 or not (user.isalnum()):
print("Error: the username must be an alphanumeric value nand have as maximum 12 characters")
user = input("Type a valid username: ")
return user
Ответ №3:
Если я правильно понимаю, вы хотите запросить у пользователя имя пользователя, а затем сохранить его ввод в файле с именем Username.txt
, если он соответствует определенным критериям.
Причина, по которой ваш код возвращает None
в данный момент, заключается в том, что условия цикла while не выполняются. Поскольку после цикла while нет инструкции return по умолчанию, если условия цикла while не выполнены, функция завершит работу и вернется None
.
Я предлагаю слегка рефакторинговать ваш код:
def username_input():
while True:
user = input("Type a valid username: ")
if len(user) <= 12 and user.isalnum():
return user
else:
print("Error: the username must be an alphanumeric value nand have as maximum 12 characters")
with open("Username.txt", "a") as usr_txt:
usr = username_input()
usr_txt.write(usr)
В качестве дополнительного примечания, эта программная конструкция называется «цикл с половиной». Это эквивалент цикла «do-while» в Python. Смотрите здесь для получения дополнительной информации.