Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
hub-courses
python_one_week_4_biologists_solutions
Commits
aae01b33
Commit
aae01b33
authored
Feb 19, 2016
by
Bertrand Néron
Browse files
add solutions for OOP
parent
da8f74f1
Changes
6
Hide whitespace changes
Inline
Side-by-side
source/Object_Oriented_Programming.rst
View file @
aae01b33
...
...
@@ -8,19 +8,145 @@
Object Oriented Programming
***************************
Exercises
=========
Exercise
--------
Modelize a sequence with few attributes and methods
.. literalinclude:: _static/code/sequence.py
:linenos:
:language: python
:download:`sequence.py <_static/code/sequence.py>` .
Exercise
--------
Instanciate 2 sequences using your Sequence class, and draw schema representing the namespaces
.. image:: _static/figs/sequence_namespace.png
:alt: sequence namespace
:align: left
:height: 400px
.. container:: clearer
.. image :: _static/figs/spacer.png
Exercise
--------
Can you explain this result (draw namespaces to explain) ?
how to modify the class variable *class_attr*
.. literalinclude:: _static/code/class_attribute.py
:linenos:
:language: python
:download:`class_attribute.py <_static/code/class_attribute.py>` .
Exercise
--------
Write the definition of a Point class. Objects from this class should have a
* a method **show** to display the coordinates of the point
* a method **move** to change these coordinates.
* a method **dist** that computes the distance between 2 points.
.. note::
the distance between 2 points A(x0, y0) and B(x1, y1) can be compute
.. math::
d(AB) = \sqrt{(x1-x0))^2 + (y1-y0)^2}
(http://www.mathwarehouse.com/algebra/distance_formula/index.php)
The following python code provides an example of the expected behaviour of objects belonging to this class: ::
>>> p1 = Point(2, 3)
>>> p2 = Point(3, 3)
>>> p1.show()
(2, 3)
>>> p2.show()
(3, 3)
>>> p1.move(10, -10)
>>> p1.show()
(12, -7)
>>> p2.show()
(3, 3)
>>> p1.dist(p2)
1.0
.. literalinclude:: _static/code/point.py
:linenos:
:language: python
:download:`point.py <_static/code/point.py>` .
Exercise
--------
\ No newline at end of file
--------
Use OOP to modelize restriction enzyme, and sequences.
the sequence must implement the following methods
* enzyme_filter which take as a list of enzymes as argument and return a **new** list containing the enzymes which have
binding site in sequence
the restriction enzyme must implements the following methods
* binds which take a sequence as argument and return True if the sequence contains a binding site, False otherwise.
solve the exercise :ref:`enzyme_exercise` using this new implementation.
.. literalinclude:: _static/code/enzyme.py
:linenos:
:language: python
:download:`enzyme.py <_static/code/enzyme.py>` .
Exercise
--------
refactor your code of :ref:`matrix_exercise` in OOP style programming. implements only
* **size**: return the number of rows, and number of columns
* **get_cell**: that take the number of rows, the number of columns as parameters,
and returns the content of cell corresponding to row number col number
* **set_cell**: that take the number of rows, the number of columns as parameters, and a value
and set the value val in cell specified by row number x column number
* **to_str**: return a string representation of the matrix
* **mult**: that take a scalar and return a new matrix which is the scalar product of matrix x val
you can change the name of the methods to be more pythonic
.. literalinclude:: _static/code/matrix_obj.py
:linenos:
:language: python
:download:`matrix_obj.py <_static/code/matrix_obj.py>` .
Exercise
--------
Use the code to read multiple sequences fasta file in procedural style and refactor it in OOP style.
use the file :download:`abcd.fasta <_static/data/abcd.fasta>` to test your code.
What is the benefit to use oop style instead of procedural style?
.. literalinclude:: _static/code/fasta_object.py
:linenos:
:language: python
:download:`fasta_object.py <_static/code/fasta_object.py>` .
\ No newline at end of file
source/_static/code/class_attribute.py
0 → 100644
View file @
aae01b33
class
MyClass
(
object
):
class_attr
=
'foo'
def
__init__
(
self
,
val
):
self
.
inst_attr
=
val
a
=
MyClass
(
1
)
b
=
MyClass
(
2
)
print
a
.
inst_attr
1
print
b
.
inst_attr
2
print
a
.
class_attr
==
b
.
class_attr
True
print
a
.
class_attr
is
b
.
class_attr
True
b
.
class_attr
=
4
print
a
.
class_attr
4
del
a
.
class_attr
MyClass
.
class_attr
=
4
\ No newline at end of file
source/_static/code/enzyme.py
View file @
aae01b33
...
...
@@ -31,12 +31,15 @@ class Sequence(object):
class
RestrictionEnzyme
(
object
):
def
__init__
(
self
,
name
,
binding
,
cut
,
end
,
comment
=
''
):
self
.
name
=
name
self
.
binding
=
binding
self
.
cut
=
cut
self
.
end
=
end
self
.
comment
=
comment
self
.
_name
=
name
self
.
_binding
=
binding
self
.
_cut
=
cut
self
.
_end
=
end
self
.
_comment
=
comment
@
property
def
name
(
self
):
return
self
.
_name
def
binds
(
self
,
seq
):
"""
...
...
source/_static/code/sequence.py
0 → 100644
View file @
aae01b33
class
Sequence
(
object
):
def
__init__
(
self
,
identifier
,
comment
,
seq
):
self
.
id
=
identifier
self
.
comment
=
comment
self
.
seq
=
self
.
_clean
(
seq
)
def
_clean
(
self
,
seq
):
"""
remove newline from the string representing the sequence
:param seq: the string to clean
:return: the string without '
\n
'
:rtype: string
"""
return
seq
.
replace
(
'
\n
'
)
def
gc_percent
(
self
):
"""
:return: the gc ratio
:rtype: float
"""
seq
=
self
.
seq
.
upper
()
return
float
(
seq
.
count
(
'G'
)
+
seq
.
count
(
'C'
))
/
len
(
seq
)
dna1
=
Sequence
(
'gi214'
,
'the first sequence'
,
'tcgcgcaacgtcgcctacatctcaagattca'
)
dna2
=
Sequence
(
'gi3421'
,
'the second sequence'
,
'gagcatgagcggaattctgcatagcgcaagaatgcggc'
)
\ No newline at end of file
source/_static/figs/sequence_namespace.png
0 → 100644
View file @
aae01b33
46 KB
source/index.rst
View file @
aae01b33
...
...
@@ -17,7 +17,7 @@ Contents:
Dive_into_Functions
Modules_and_Packages
Input_Output
Object_Oriented_Programming
Indices and tables
==================
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment