def test5():
    """
    Tests is_palindrome function.
    :return: None
    """

    print("Test5: testing is_palindrome")

    dna_seq = None
    print(dna.is_palindrome(dna_seq) == True, end=" ")

    dna_seq = linked_code.insert_at(0, "A", dna_seq)
    print(dna.is_palindrome(dna_seq) == True, end=" ")

    dna_seq = linked_code.insert_at(0, "T", dna_seq)
    print(dna.is_palindrome(dna_seq) == False, end=" ")

    dna_seq = linked_code.remove_at(0, dna_seq)
    dna_seq = linked_code.insert_at(0, "A", dna_seq)
    print(dna.is_palindrome(dna_seq) == True, end=" ")

    dna_seq = linked_code.insert_at(1, "G", dna_seq)
    print(dna.is_palindrome(dna_seq) == True, end=" ")

    dna_seq = linked_code.insert_at(2, "T", dna_seq)
    print(dna.is_palindrome(dna_seq) == False)
示例#2
0
def substitution(dna_seq, index, base):
    """
This function takes the input of the DNA sequence, index at which the base has to be replaced and the base by which the original sequence will be replaced
"""
    if linked_code.length_rec(dna_seq) < index:
        raise IndexError("Invalid Insertion Index")
    else:
        return linked_code.insert_at(index, base,
                                     linked_code.remove_at(index, dna_seq))
def test4():
    """
    Tests is_pairing function.
    :return: None
    """

    print("Test4: testing is_pairing")

    dna_seq1 = None
    dna_seq2 = None

    print(dna.is_pairing(dna_seq1, dna_seq2) == True, end=" ")

    dna_seq2 = linked_code.insert_at(0, "A", dna_seq2)
    print(dna.is_pairing(dna_seq1, dna_seq2) == False, end=" ")
    print(dna.is_pairing(dna_seq2, dna_seq1) == False, end=" ")

    dna_seq1 = linked_code.insert_at(0, "T", dna_seq1)
    print(dna.is_pairing(dna_seq1, dna_seq2) == True, end=" ")

    dna_seq1 = linked_code.insert_at(1, "T", dna_seq1)
    dna_seq1 = linked_code.insert_at(2, "G", dna_seq1)
    dna_seq1 = linked_code.insert_at(3, "C", dna_seq1)
    dna_seq2 = linked_code.insert_at(1, "A", dna_seq2)
    dna_seq2 = linked_code.insert_at(2, "C", dna_seq2)
    print(dna.is_pairing(dna_seq1, dna_seq2) == False, end=" ")
    dna_seq2 = linked_code.insert_at(3, "G", dna_seq2)
    print(dna.is_pairing(dna_seq1, dna_seq2) == True, end=" ")

    dna_seq1 = linked_code.insert_at(2, "A", dna_seq1)
    dna_seq2 = linked_code.insert_at(2, "A", dna_seq2)
    print(dna.is_pairing(dna_seq1, dna_seq2) == False, end=" ")

    test_str1 = "AATTTGC"
    test_str2 = "GCGCTGC"

    for idx in range(len(test_str1)):
        dna_seq1 = linked_code.remove_at(2, dna_seq1)
        dna_seq2 = linked_code.remove_at(2, dna_seq2)
        dna_seq1 = linked_code.insert_at(2, test_str1[idx], dna_seq1)
        dna_seq2 = linked_code.insert_at(2, test_str2[idx], dna_seq2)
        print(dna.is_pairing(dna_seq1, dna_seq2) == False, end=" ")

    print()
示例#4
0
def deletion(dna_seq, idx, segment_size):
    """
This function takes the DNA sequence , index at which the element has to deleted and the segment size that has to be deleted
"""
    if (segment_size == 0):
        return dna_seq
    elif (segment_size + idx > linked_code.length_rec(dna_seq)):
        raise IndexError("Sequence out of range")
    else:
        return deletion(linked_code.remove_at(idx, dna_seq), idx,
                        segment_size - 1)
示例#5
0
def is_palindrome(dna_seq):
    """
This function takes the DNA sequence in the form of Node data structure and checks whether it is palindrome or not
"""
    if (dna_seq == None):
        return True
    elif (linked_code.length_rec(dna_seq) == 1):
        return True
    elif (dna_seq.value == linked_code.value_at(
            dna_seq, (linked_code.length_tail_rec(dna_seq) - 1))):
        return is_palindrome(
            linked_code.remove_at(
                linked_code.length_rec(dna_seq.rest) - 1, dna_seq.rest))
    else:
        return False
示例#6
0
def substitution(dna_seq1, idx, base):
    """
    This function substitutes a value in a linked list with another value.
    Pre: dna_seq must be a linked list, idx must be an integer.
    Post: a new linked list is returned with the substituted value.
    :param dna_seq1: a linked list
    :param idx: index at which substitution occurs
    :param base: value that will replace the one already at the chosen index.
    :return: a linked list with correctly substituted value
    """
    if dna_seq1.value == None:
        return False
    else:
        if idx < 0:
            raise IndexError('Index out of range')
        elif idx == 0:
            dna_seq1 = linked_code.remove_at(idx, dna_seq1)
            dna_seq1 = linked_code.insert_at(idx, base, dna_seq1)
            return dna_seq1
        else:
            return LinkNode(dna_seq1.value,
                            substitution(dna_seq1.rest, idx - 1, base))
示例#7
0
def deletion(dna_seq, idx, segment_size):
    """
    This function deletes a segment of chosen size, beginning at a chosen
    index, in a linked list.
    Pre: dna_seq must be a linked list, idx must be an integer, and
         segment_size should be an integer.
    Post: a linked list with deleted values is returned
    :param dna_seq: a linked list
    :param idx: index at which deletion occurs
    :param segment_size: size of segment being deleted
    :return: a linked list with a correctly deleted segment
    """
    if segment_size == 0:
        return dna_seq
    elif linked_code.length_rec(dna_seq) < idx + segment_size:
        raise IndexError('Index out of range')
    else:
        if idx == 0:
            dna_seq = linked_code.remove_at(0, dna_seq)
            return deletion(dna_seq, idx, segment_size - 1)
        else:
            return LinkNode(dna_seq.value,
                            deletion(dna_seq.rest, idx - 1, segment_size))