<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def determine_drift(self):
 """ Determine the drift of the stack. Args: None Returns: Good or Bad; True or False """

        try:
            response = self._cloud_formation.detect_stack_drift(StackName=self._stack_name)
            drift_request_id = response.get('StackDriftDetectionId', None)
            if drift_request_id:
                logging.info('drift_request_id: %s - polling', drift_request_id)
                drift_calc_done = False
                while not drift_calc_done:
                    time.sleep(self.nap_time)
                    response = self._cloud_formation.describe_stack_drift_detection_status(
                        StackDriftDetectionId=drift_request_id
                    )
                    current_state = response.get('DetectionStatus', None)
                    logging.info(
                        'describe_stack_drift_detection_status(): {}'.format(current_state)
                    )
                    drift_calc_done = current_state in CALC_DONE_STATES
                    drift_answer = response.get('StackDriftStatus', 'UNKNOWN')

                logging.info('drift of {}: {}'.format(
                    self._stack_name,
                    drift_answer
                ))

                if drift_answer == 'DRIFTED':
                    if self._verbose:
                        self._print_drift_report()
                    return False
                else:
                    return True
            else:
                logging.warning('drift_request_id is None')

            return False
        except Exception as wtf:
            logging.error(wtf, exc_info=True)
            return False