def ask(question, *validators):
    """
    Asks a single question and validates it against a list of validators.
    When an answer fails validation, the complaint is printed and the question
    is asked again.

    :param question: The question to ask.
    :param validators: The list of validators that the answer must pass.
    :return: The answer, converted to its final form by the validators.
    """
    answer = None
    while answer is None:
        answer = input(question)
        for validator in validators:
            answer, complaint = validator(answer)
            if answer is None:
                print(complaint)
                break
    return answer