Помогите найти логическую ошибку

```
import json


def get_stored_username():
    """Получает хранимое имя пользователя, если оно существует."""
    filename = 'username.json'
    try:
        with open(filename) as f_obj:
            username = json.load(f_obj)
    except FileNotFoundError:
        return None
    else:
        return username


def check_user():
    """Проверяет имя пользователя"""
    answer = input(f"Is your name {get_stored_username().title()}? \nYes/No ")
    if answer.lower() == 'yes':
        return True
    elif answer.lower() == 'no':
        return False
    else:
        print("Enter only 'Yes' or 'No'.")
        check_user()


def get_new_username():
    """Запрашивает новое имя пользователя"""
    username = input("What is your name? ")
    filename = 'username.json'
    with open(filename, 'w') as f_obj:
        json.dump(username, f_obj)
    return username


def greet_user():
    """Приветствует пользователя по имени"""
    username = get_stored_username()
    if username and check_user():
        print(f"Welcome back, {username.title()}!")
    else:
        username = get_new_username()
        print(f"We'll remember you when you come back, {username.title()}!")


greet_user()
```

Программа при первом запуске запрашивает имя и сохраняет его в файл. При повторном запуске она переспрашивает пользователя он ли это. Если он отвечает да, то приветствует его по имени, если нет, то запрашивает его имя. Где-то допустил логическую ошибку и никак не могу ее найти. Суть в том, что если в файле уже есть имя и на вопрос "Ваше имя Х?" сначала ответить не "Да" или "Нет", а ввести любое другое невалидное значение, а когда она еще раз переспросит этот же вопрос, то со второго раза ответить на него "Да", то программа не будет приветствовать как должна, а запросит у пользователя новое имя. Помогите пожалуйста разобраться где ошибка


Ответы (1 шт):

Автор решения: CrazyElf

Поставьте return перед check_user():

print("Enter only 'Yes' or 'No'.")
return check_user()

Но лучше вообще убрать рекурсивный вызов check_user(), обернув при этом весь блок запроса имени и проверок (т.е. всё тело функции) в "вечный" цикл while True:

→ Ссылка