Transitions between A <-> G and C <-> T
Transversions between A <-> C and G <-> TAssignment:
- Write a function transition that takes two nucleotides. The function must return a Boolean value that indicates whether or not replacing the first nucleotide by the second nucleotide leads to a transition.
Problem: I don't think the function recognizes the statement behind the or.
The code doesn't work in some cases for example: transition('A', 'G') is True and with my code he gives False
- Write a function ratio that takes two DNA sequences s1 and s2
The function may assume that both sequences have the same length (the function does not need to check this explicitly). The function must return the transition/transversion ratio R(s 1 ,s 2 )∈R of the two given sequences as a floating point number. In case there are no transversions between the two sequences, R(s 1 ,s 2 )=0 by definition.
Problem: the code is not working
def transition(letter1, letter2):
"""
>>> transition('G', 'A')
True
>>> transition('t', 'g')
False
>>> transition('C', 'c')
False
"""
return True if letter1.lower() == 'gt' and letter2.lower() == 'ac' or letter1.lower() == 'ac' and letter2.lower() == 'gt' else False
def transversion(letter1, letter2):
"""
>>> transversion('G', 'A')
False
>>> transversion('t', 'g')
True
>>> transversion('C', 'c')
False
"""
return True if letter1.lower() == 'ct' and letter2.lower() == 'ag' or letter1.lower() == 'ag' and letter2.lower() == 'ct' else False
def ratio(seq1, seq2):
"""
>>> ratio('ATTAGCATTATCATC', 'AAATAGGATATATGG')
0.2222222222222222
>>> seq1 = 'GCAACGCACAACGAAAACCCTTAGGGACTGGATTATTTCGTGATCGTTGTAGTTATTGGAAGTACGGGCATCAACCCAGTT'
>>> seq2 = 'ttatctgacaaagaaagccgtcaacggctggataatttcgcgatcgtgctggttactggcggtacgagtgttcctttgggt'
>>> ratio(seq1, seq2)
1.2142857142857142
"""
count = 0
tel = 0
for i in range(len(seq1)):
if transition(seq1[i], seq2[i]):
count += 1
for i in range(len(seq1)):
if transversion(seq1[i], seq2[i]):
tel += 1
if tel != 0:
return float(count / tel)
else:
return 0
if __name__ == '__main__':
import doctest
doctest.testmod()
True if expression else False.expressionitself is already producingTrueorFalsein most cases. If not, usebool(expression), but only if you must have a boolean.ifdoesn't need a boolean, for example.'g' != 'gt'.==is "is this thing equal to this other thing", not "is this thing equal to part of this other thing".letter1.lower() == "gt"should beletter1.lower() in "gt"