Build a Medical Data Validator - Step 44

// running tests
1. You should have a for loop that iterates over invalid_records.
2. You should print Unexpected format '<key>: <val>' at position <index>. (where <key>, <val>, and <index> should be replaced by the current key, value and index) inside your for loop.
3. You should set is_invalid to True inside your new for loop.
// tests completed
// console output
Valid format.

I get the right output, but still don’t pass Step 44.
What should I do?

This is my code:

import re




medical_records = \[

    {

        'patient_id': 'P1001',

        'age': 34,

        'gender': 'Female',

        'diagnosis': 'Hypertension',

        'medications': \['Lisinopril'\],

        'last_visit_id': 'V2301',

    },

    {

        'patient_id': 'p1002',

        'age': 47,

        'gender': 'male',

        'diagnosis': 'Type 2 Diabetes',

        'medications': \['Metformin', 'Insulin'\],

        'last_visit_id': 'v2302',

    },

    {

        'patient_id': 'P1003',

        'age': 29,

        'gender': 'female',

        'diagnosis': 'Asthma',

        'medications': \['Albuterol'\],

        'last_visit_id': 'v2303',

    },

    {

        'patient_id': 'p1004',

        'age': 56,

        'gender': 'Male',

        'diagnosis': 'Chronic Back Pain',

        'medications': \['Ibuprofen', 'Physical Therapy'\],

        'last_visit_id': 'V2304',

    }

\]




def find_invalid_records(

    patient_id, age, gender, diagnosis, medications, last_visit_id

):



    constraints = {

        'patient_id': isinstance(patient_id, str)

        and re.fullmatch('p\\d+', patient_id, re.IGNORECASE),

        'age': isinstance(age, int) and age >= 18,

        'gender': isinstance(gender, str) and gender.lower() in ('male', 'female'),

        'diagnosis': isinstance(diagnosis, str) or diagnosis is None,

        'medications': isinstance(medications, list)

        and all(\[isinstance(i, str) for i in medications\]),

        'last_visit_id': isinstance(last_visit_id, str)

        and re.fullmatch('v\\d+', last_visit_id, re.IGNORECASE)

    }



    return \[key for key, value in constraints.items() if not value\]




def validate(data):

    is_sequence = isinstance(data, (list, tuple))



    if not is_sequence:

        print('Invalid format: expected a list or tuple.')

        return False

        

    is_invalid = False

    key_set = set(

        \['patient_id', 'age', 'gender', 'diagnosis', 'medications', 'last_visit_id'\]

    )



    for index, dictionary in enumerate(data):

        if not isinstance(dictionary, dict):

            print(f'Invalid format: expected a dictionary at position {index}.')

            is_invalid = True

            continue



        if set(dictionary.keys()) != key_set:

            print(

                f'Invalid format: {dictionary} at position {index} has missing and/or invalid keys.'

            )

            is_invalid = True

            continue

        invalid_records = find_invalid_records(\*\*dictionary)

// THE PROBLEM STARTS HERE

    for index, key in enumerate(invalid_records):

        val = dictionary\[key\]

        print(f"Unexpected format '{key}: {val}' at position {index}.")

        is_invalid = True

// AND FINISHES HERE

    if is_invalid:

        return False

    print('Valid format.')

    return True

validate(medical_records)

Please provide a link to the problem you are working on

It looks to me like invalid_records is assigned/defined inside a for loop, but it is not used in that for loop. So, perhaps it keeps getting reassigned without using it? At least, that is what I see. Are you sure your second for loop, the one that is right underneath “THE PROBLEM STARTS HERE”, is indented properly? Might it rather be a part of the other for loop?