def validate(self, a_string): list_ = Validator.clean_input(a_string) id_, gender, age, sales, bmi, income = self.__unpack_list(list_) while not Validator.has_valid_id(id_): id_ = Validator.clean_id(self.request_new_value(id_, "A123", "id")) while not Validator.has_valid_gender(gender): gender = Validator.clean_gender(self.request_new_value(gender, "M", "gender")) while not Validator.has_valid_age(age): age = Validator.clean_age(self.request_new_value(age, "01", "age")) while not Validator.has_valid_sales(sales): sales = Validator.clean_sales(self.request_new_value(sales, "001", "sales")) while not Validator.has_valid_bmi(bmi): bmi = Validator.clean_bmi(self.request_new_value(bmi, "Normal, Overweight, Obesity, Underweight", "bmi")) while not Validator.has_valid_income(income): income = Validator.clean_income(self.request_new_value(income, "00-100", "income")) p = Person(Validator.clean_id(id_), Validator.clean_gender(gender), Validator.clean_age(age), Validator.clean_sales(sales), Validator.clean_bmi(bmi), Validator.clean_income(income)) self._good_data.update({p.get_id(): p}) self._raw_data.remove(a_string) return p