
I don't think code like this is exactly what's meant by bioinformatics, which is more statistical in nature. However as a way of reinforcing both knowledge domain content and learning Python concepts, I think it has utility. If you're already familiar with some cell biology, this would be a useful way to hammer home Python. I tossed up a simple 7 minute Youtube on the code below, talking mostly about Inheritance & Composition in the OO sense. https://youtu.be/UoHJdQeYa8k (sound not so great, just using laptap microphone). I encourage others to do something more produced. Example usage: In [3]: the_cell = Eukaryote(0, 'GATACA') In [4]: the_cell.nucleus.dna Out[4]: ('GATACA', '') In [5]: the_cell.nucleus.dna[0] Out[5]: 'GATACA' In [6]: the_cell.S_phase() # this is when DNA replicates In [7]: the_cell.nucleus.dna # cell is now "mature" (ready to divide) Out[7]: ('GATACA', 'CTATGT') In [8]: new_cell = the_cell.divide() In [9]: new_cell.nucleus.dna Out[9]: ('GATACA', '') Related: https://mail.python.org/pipermail/edu-sig/2012-December/010709.html Kirby # -*- coding: utf-8 -*- """ Created on Sat Oct 10 12:02:55 2015 @author: Kirby Urner, MIT License """ class Mitochondrion: """Cell Battery""" pass class Golgi: """Router""" pass class Nucleus: """DNA Hut""" def __init__(self, dna_A): """Get half the DNA""" self.dna = dna_A, '' def mitosis(self): """Split DNA in two""" return self.dna[0], self.dna[1] class Cell: def __init__(self, gen=0): """Age""" self.gen = gen + 1 class Prokaryote(Cell): pass # won't have a nucleus class Eukaryote(Cell): def __init__(self, gen, dna): super().__init__(gen) # get older self.nucleus = Nucleus(dna) # store DNA self.organelles = [Golgi(), Mitochondrion()] self.mature = False def S_phase(self): """Make other half of DNA""" dna_B = [] dna_A = self.nucleus.dna[0] for base in dna_A: if base=='A': dna_B.append('T') elif base=='T': dna_B.append('A') elif base=='G': dna_B.append('C') elif base=='C': dna_B.append('G') dna_B = "".join(dna_B) self.nucleus.dna = (dna_A, dna_B) self.mature = True # I'm ready for sex! def divide(self): if not self.mature: # don't try it! raise ValueError dna_A, dna_B = self.nucleus.mitosis() new_cell = Eukaryote(self.gen, dna_A) # next generation of me self.gen += 1 # should be an upper limit self.nucleus.dna = '', dna_B self.mature = False return new_cell # spawn of me

I tossed up a simple 7 minute Youtube on the code below, talking mostly about Inheritance & Composition in the OO sense.
https://youtu.be/UoHJdQeYa8k (sound not so great, just using laptap microphone).
I encourage others to do something more produced.
Here's the same video clip with a different voice over. https://youtu.be/tqNe3ZeDz90 I imported the clip made from QuickTimePlayer, record screencast, microphone on, into iMovie, squelched the sound track, and over-recorded a new one. Kirby
participants (1)
-
kirby urner