Build a Medical Data Validator - Step 44

Tell us what’s happening:

error call in console is:
Traceback (most recent call last):
File “main.py”, line 98
SyntaxError: ‘return’ outside function
I recognize return is inside the function but the code does not pass. Please 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

        invalid_records = find_invalid_records(**dictionary)

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

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


        
      

# User Editable Region

    

validate(medical_records)

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 44

First of all you have a duplicated line here. Is there some reason for that?

Next, if return was inside the function, you would not get this error message.

What makes you say that?

Retuen is lined up further right to the previous call.

Doesn’t work like that. Once the indentation is finished, the function is finished.

Reset the step. Here is the original indentation of the code

def validate(data):
    is_sequence = isinstance(data, (list, tuple))
    ...
    ...
        invalid_records = find_invalid_records(**dictionary)
        
    if is_invalid:
        return False
    print('Valid format.')
    return True

It should all be indented to be part of the function.

If you change the indentation, and move it back to the left margin, then the function code block is finished.

def function():
    code
    code

code # not in function
    return #not in function

Thanks Code passed. now

1 Like

Ok great! As always, please ask if you have a question about something

Sorry when I submit , it went back to errors.

for index, key in enumerate(invalid_records):

val = dictionary[key]

print(f"Unexpected format ‘{key}: {val}’ at position {index} ")

is_invalid = True

if is_invalid:

Pass

return True

print(‘Valid format.’)

return True

indentation error after return. error after return

validate(mediccal_records)

if that is for a new step, please create a new topic

If you have a question about a specific challenge as it relates to your written code for that challenge and need some help, click the Help button located on the challenge.

The Help button will create a new topic with all code you have written and include a link to the challenge also. You will still be able to ask any questions in the post before submitting it to the forum.

Thank you.