def ask(question, default=None, validation=None):
    """
    Asks a question, expecting string input.
    :param question: Question to ask. Note, that ":" and default will be automatically appended to the question
    string.
    :param default: Default value if input is empty. If not set, will ask for to non-empty input.
    :param validation: Validation function: def valid_func(answer: str) -> bool.
    :return: bool
    """
    if default:
        while True:
            print(question, f' [{default}]: ', sep='', end='')
            answer = input().strip()
            if validation and not validation(answer):
                continue
            if answer:
                return answer
            return default
    if not default:
        while True:
            print(question, ': ', sep='', end='')
            answer = input().strip()
            if validation and not validation(answer):
                continue
            if answer:
                return answer
            print('Empty string is not accepted!')