Build a Medical Data Validator - Step 35

Tell us what’s happening:

I am so lost and the prompt is not helpful at all. I’m following the instructions exactly and it keeps giving me the " ‘i’ is not defined error." I have tried writing it out similiar to the example code, but the terminal keeps sending back SyntaxErrors with no further explanations. I AM DESPERATE FOR 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,
# User Editable Region
        'medications': isinstance(medications, list) and isinstance(i, str)
        }
# User Editable Region
    return constraints

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 (X11; Linux x86_64; rv:153.0) Gecko/20100101 Firefox/153.0

Challenge Information:

Build a Medical Data Validator - Step 35

GitHub Link: freeCodeCamp/curriculum/challenges/english/blocks/workshop-medical-data-validator/68511bdce9282edbef75ca48.md at main · freeCodeCamp/freeCodeCamp · GitHub

Welcome to the forum @ccmilbrot,

Here you are being asked to create a new list using a list comprehension, which is structured like this:

[ <the value to put in the new list> <the for loop iteration> <an optional condition> ]

There is no optional condition in this step though.

Can you try now to put the pieces together based on what the instructions say?

create a list made by evaluating isinstance(i, str) for each i in medications

Start with just creating an empty list, then write the for loop inside that just like you would for a regular for loop, then add the value to put in the list in front of the for loop.

Happy coding

I had to ChatGPT a lot of this, but I eventually got the right answer and understand how it works.