Моя функция отбрасывает меня при возврате «none», когда я думал, что поместил строку?

#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. Смотрите здесь для получения дополнительной информации.