Build a Medical Data Validator - Step 44

Tell us what’s happening:

hi everyone. There is one last step left, i don’t understand what the mistake is. Thank you all in advance for your help

Your code so far

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)

# User Editable Region

    for index, key  in enumerate(invalid_records):
       print(f'Unexpected format {key}: {invalid_records[key]} at position {index}.')
       is_invalid = True


# User Editable Region

    if is_invalid:
        return False
    print('Valid format.')
    return True

validate(medical_records)

Your browser information:

User Agent is: Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36

Challenge Information:

Build a Medical Data Validator - Step 44
https://www.freecodecamp.org/learn/python-v9/workshop-medical-data-validator/step-44**strong text**

Welcome back to the forum @19Ahmed83

Can you describe what the problem is in your own words?

Happy coding

Yes, of course. The problem is in the the last for loop.
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.

for index, key in enumerate(invalid_records):
print(f’Unexpected format {key}: {invalid_records[key]} at position {index}.')
is_invalid = True

What’s in the invalid_records variable?

Or, What is the relationship between the index you are enumerating there, and the “position” of a record?

If you test your app by making some records invalid, does the printed “position” make sense?

for index, record in enumerate(invalid_records):
for key, value in dictionary.items():
print(f"Unexpected format ‘{key}: {value}’ at position {index}.")
is_invalid = True
I don’t quite understand

Look at the bigger context of your code

See the for loop at the beginning?

If you reset the step, and click in the editor, your cursor will be indented 2 levels, so it is inside that first for loop, not after it. It should be indented to be aligned with the if statements.

Right after the invalid_records variable, create a for loop

This means it should be indented aligned with the invalid_records variable. Examine the variables in the top for loop

for index, dictionary in enumerate(data):
1 Like