Build a Medical Data Validator - Step 40

Tell us what’s happening:

Console says Valid Format
None
Code is no pass. Message as example.

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)
    }

# User Editable Region

    def find_invalid_records(constraints): return [key for key, value in constraints.items() if not value]

# User Editable Region

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

        if set(dictionary.keys()) != key_set:
            print(
                f'Invalid format: {dictionary} at position {index} has missing and/or invalid keys.'
            )
            is_invalid = True

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

validate(medical_records)
print(find_invalid_records(**medical_records[0]))

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0

Challenge Information:

Build a Medical Data Validator - Step 40

why have you added this again? reset the step, add only the if inside the comprehension

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

I have this now it's still not passing.

Slow down a bit. Can you please answer these questions?

Why did you remove return ?

You’ve shown that you’re able to make the requested change, but then you are making other changes that aren’t requested.

I think it’s important take take a moment and try to understand why you are doing these things. Is there something unclear about the instructions or did you have another reason?

I get confused about the language sometimes it talks about function but def is not required and return & print seem to be the same operations.

It passed now. I cannot know the reason.

It doesn’t seem like “function” is mentioned in the instructions. Any idea where you got that from?

return is used at the end of a function. If you removed the indentation so that it’s outside the function like this:

# indented:
    return [key for key, value in constraints.items() if not value] 

# not indented:
return [key for key, value in constraints.items() if not value]

Then you would get an error:

Traceback (most recent call last):
  File "main.py", line 55
SyntaxError: 'return' outside function

Is it possible that’s what happened? Then maybe you removed return to get rid of the error?

I guess that could also be why you added def: ?

You should pause here until you understand what was happening.

Passing the step without knowing why means you are not learning and you are going to have more and more difficulty in the future.

Try to be clear as well where you are reading things. Is it in the instructions? Is it an error message?

If you don’t understand an error, share the full text of the error here.

1 Like