-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdna-tools.py
More file actions
71 lines (66 loc) · 2.34 KB
/
dna-tools.py
File metadata and controls
71 lines (66 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
def complement(dna: str) -> str:
"""Converts DNA to the complementary strand."""
translated = dna.maketrans("ATGC", "TACG")
return dna.translate(translated)
def transcription(dna: str) -> str:
"""Converts DNA to mRNA."""
translated = dna.maketrans("ATGC", "UACG")
return dna.translate(translated)
def codons(mrna: str) -> list:
"""Break up mRNA into codons"""
return [mrna[i:i+3] for i in range(0, len(mrna), 3)]
# TODO: decorator that prints return statements when debug on...
def amino_acids(codon: list) -> list:
"""Convert mRNA codons to amino acids."""
match codon:
case "AUG":
return "Methionine"
case "AUA" | "AUC" | "AUU":
return "Isoleucine"
case "ACG" | "ACA" | "ACC" | "ACU":
return "Threonine"
case "AGG" | "AGA" | "CGG" | "CGA" | "CGC" | "CGU":
return "Arginine"
case "AGC" | "AGU" | "UCG" | "UCA" | "UCC" | "UCU":
return "Serine"
case "AAG" | "AAA":
return "Lysine"
case "AAC" | "AAU":
return "Asparagine"
case "CUG" | "CUA" | "CUC" | "CUU" | "UUG" | "UUA":
return "Leucine"
case "CCG" | "CCA" | "CCC" | "CCU":
return "Proline"
case "CAG" | "CAA":
return "Glutamine"
case "CAC" | "CAU":
return "Histidine"
case "UUC" | "UUU":
return "Phenylalanine"
case "UGG":
return "Tryptophan"
case "UGC" | "UGU":
return "Cysteine"
case "UAC" | "UAU":
return "Tyrosine"
case "GUG" | "GUA" | "GUC" | "GUU":
return "Valine"
case "GCG" | "GCA" | "GCC" | "GCU":
return "Alanine"
case "GGG" | "GGA" | "GGC" | "GGU":
return "Glycine"
case "GAG" | "GAA":
return "Glutamic Acid"
case "GAC" | "GAU":
return "Aspartic Acid"
case "UGA" | "UAG" | "UAA":
return "Stop" # Return stop, or "pass"?
case _:
pass
def translation(mrna):
"""Return the Amino Acid for each codon in a mRNA sequence."""
return [amino_acids(i) for i in mrna]
def dna_to_amino(dna: str) -> list:
"""Directly translate a sequence to it's corresponding amino acids."""
dna = dna.upper()
return translation(codons(transcription(dna)))