<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _replace_numeric_markers(operation, string_parameters):
 """ Replaces qname, format, and numeric markers in the given operation, from the string_parameters list. Raises ProgrammingError on wrong number of parameters or bindings when using qmark. There is no error checking on numeric parameters. """

    def replace_markers(marker, op, parameters):
        param_count = len(parameters)
        marker_index = 0
        start_offset = 0
        while True:
            found_offset = op.find(marker, start_offset)
            if not found_offset > -1:
                break
            if marker_index < param_count:
                op = op[:found_offset]+op[found_offset:].replace(marker, parameters[marker_index], 1)
                start_offset = found_offset + len(parameters[marker_index])
                marker_index += 1
            else:
                raise ProgrammingError("Incorrect number of bindings "
                                       "supplied. The current statement uses "
                                       "%d or more, and there are %d "
                                       "supplied." % (marker_index + 1,
                                                      param_count))
        if marker_index != 0 and marker_index != param_count:
            raise ProgrammingError("Incorrect number of bindings "
                                   "supplied. The current statement uses "
                                   "%d or more, and there are %d supplied." %
                                   (marker_index + 1, param_count))
        return op

    # replace qmark parameters and format parameters
    operation = replace_markers('?', operation, string_parameters)
    operation = replace_markers(r'%s', operation, string_parameters)

    # replace numbered parameters
    # Go through them backwards so smaller numbers don't replace
    # parts of larger ones
    for index in range(len(string_parameters), 0, -1):
        operation = operation.replace(':' + str(index),
                                      string_parameters[index - 1])
    return operation