def score_transcripts(user_transcript: list, other_transcript: list) ->float:
    """Score transcripts based on exons values

    The score moves between 0 and 1
    The score is 1 when they match perfectly, and 0 when they do not match at all.


    :param user_transcript:
    :type user_transcript: list
    :param other_transcript:
    :type other_transcript: list
    :return: float
    """
    matches = 0
    for user_exon in user_transcript:
        for db_exon in other_transcript:
            if user_exon['real_start'] == db_exon['real_start'] and user_exon[
                'real_end'] == db_exon['real_end']:
                matches += 1
    score = matches / len(user_transcript)
    return score
