#!/usr/bin/env python # coding: utf-8 # # Introducing Python # ## 09/05/2023 # # <a href="?print-pdf">print view</a><br> # <a href="pythonintro.ipynb">notebook</a> # In[1]: get_ipython().run_cell_magic('html', '', '<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>\n<script src="https://requirejs.org/docs/release/2.3.6/minified/require.js"></script>\n<script src="https://bits.csb.pitt.edu/asker.js/lib/asker.js"></script>\n<style>\n.reveal pre { font-size: 100%; overflow-x: auto; overflow-y: auto;}\n.reveal h1 { font-size: 2em}\n.reveal ol {display: block;}\n.reveal ul {display: block;}\n.reveal .slides>section>section.present { max-height: 100%; overflow-y: auto;}\n\n.jp-OutputArea-output { padding: 0; }\n</style>\n\n\n<script>\n$3Dmolpromise = new Promise((resolve, reject) => { \n require([\'https://3Dmol.org/build/3Dmol.js\'], function(){ \n resolve();});\n});\nrequire([\'https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.2.2/Chart.js\'], function(Ch){\n Chart = Ch;\n});\n\n$(\'head\').append(\'<link rel="stylesheet" href="https://bits.csb.pitt.edu/asker.js/themes/asker.default.css" />\');\n\n\n//the callback is provided a canvas object and data \nvar chartmaker = function(canvas, labels, data) {\n var ctx = $(canvas).get(0).getContext("2d");\n var dataset = {labels: labels, \n datasets:[{\n data: data,\n backgroundColor: "rgba(150,64,150,0.5)",\n fillColor: "rgba(150,64,150,0.8)", \n }]};\n var myBarChart = new Chart(ctx,{type:\'bar\',data:dataset,options:{legend: {display:false},\n scales: {\n yAxes: [{\n ticks: {\n min: 0,\n }\n }]}}});\n};\n\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n\n</script>\n') # # Types and Variables # # *value* - your data # # *type* - what kind of data it is # # *variable* - name of your data, how you access it # # Types # # Built In: # * Numerical: integers, floating point, complex # * Boolean (True, False) # * None # * Sequences: strings, tuples, lists, sets, dictionaries # * Callable (functions) # # <tt>type</tt> # # In[2]: type(3) # In[3]: type(3.0) # In[4]: type("Hello") # In[5]: type(min) # # Numbers # # ints vs floats # In[6]: get_ipython().run_cell_magic('html', '', '\n<div id="types" style="width: 500px"></div>\n<script>\n\n\tjQuery(\'#types\').asker({\n\t id: "types",\n\t question: "If <tt>a</tt> and <tt>b</tt> are of type <tt>int</tt> and <tt>x</tt> and <tt>y</tt> are of type <tt>float</tt> which of the following are true?",\n\t\tanswers: ["Speed","Associativity","Both of the above","Neither of the above"],\n extra: ["<tt>a + b</tt> is faster than <tt>x + y</tt>",\n "<tt>(a+b)-b</tt> will always equal <tt>a</tt> but <tt>(x+y)-y</tt> may not equal <tt>x</tt>"\n ],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n</script>\n') # # Arithmetic Operators # # `+`, `-`, `*`, `/` Hopefully self-explanatory # # `%` modulus (remainder after division) # # `**` exponentiation $x^y$ = `x**y` # # `//` integer (floor) division **division is different in Python2 vs 3** # In[ ]: 5+1 * 3/2 # In[7]: get_ipython().run_cell_magic('html', '', '<div id="aops" style="width: 500px"></div>\n<script>\n\n\tjQuery(\'#aops\').asker({\n\t id: "aops",\n\t question: "What prints out?",\n\t\tanswers: ["6","6.5","7","7.5","9"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n</script>\n') # In[ ]: 5+1 * 3//2 # In[8]: get_ipython().run_cell_magic('html', '', '<div id="aops2" style="width: 500px"></div>\n<script>\n\n\tjQuery(\'#aops2\').asker({\n\t id: "aops2",\n\t question: "What prints out?",\n\t\tanswers: ["6","6.5","7","7.5","9"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n</script>\n') # # Assignment Operators # # Can perform an operation while assigning # # a *op*= b # # is # # a = a *op* b # In[9]: x = 10 x += 1 x # # Strings # # strings are a sequence of characters # # ### String literals # * "you can use double quotes" # * 'you can using single quotes (more common python style)' # * "the difference is how easy it is to include a ' character" 'or a " character' # * special characters are _escaped_ with a backslash # * so must always escape backslash itself # * '\n' newline # * '\\\\' backslash # * '\t' tab # * '\'' single quote # # # Multiline string literals # In[10]: "you can end a line with a slash\ and it will continue on the next line" # Adjacent string literals are automatically concatenated # In[11]: 'hi ' 'bye' # Triple quoted strings - for large blocks of text with newlines, commonly used as documentation: # In[12]: '''There are three quotes at the start and end''' # In[ ]: print('"\\t'"'") # In[13]: get_ipython().run_cell_magic('html', '', '<div id="strq" style="width: 500px"></div>\n<script>\n\n var divid = \'#strq\';\n\tjQuery(divid).asker({\n\t id: divid,\n\t question: "What prints out?",\n\t\tanswers: ["\\ \'\\"",\'"\\ t"\',\n "\\"\\\\t\'\\"\'",\'"\\\\t\\\'\',"Error"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n</script>\n') # # Variables # # Data values are accessed through _references_ to the value. # # A reference is a name for the memory location of the value. # Every value exists somewhere in memory and has an address. # # A variable is created when it is _bound_ to a value. It is impossible to have an uninitialized variable in python (but can be None). # # The type of a variable is the type of the value it is bound to # In[ ]: x = 3 y = x y = y + 1 print(x,y) # In[14]: get_ipython().run_cell_magic('html', '', '<div id="varsq" style="width: 500px"></div>\n<script>\n$(\'head\').append(\'<link rel="stylesheet" href="https://bits.csb.pitt.edu/asker.js/themes/asker.default.css" />\');\n\n var divid = \'#varsq\';\n\tjQuery(divid).asker({\n\t id: divid,\n\t question: "What prints out?",\n\t\tanswers: ["3 3","3 4","4 3","4 4"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n</script>\n') # # Objects # # Everything is an object! # # An object is a value with set of _attributes_ # # Attributes that are callable are called _methods_ and can work on the object data # # Attributes are accessed with the '.' operator # # The attributes of an object can be listed with <tt>dir</tt> # # Strings are Objects # # A string is an object that has several methods for manipulating the string data. # # In[15]: s = 'Hello World' print(s.upper()) print(s.split()) # <a href="https://docs.python.org/3/library/stdtypes.html#string-methods">String Methods Documentation</a> # In[16]: print(dir(s)) # # Numbers are Objects # # Since everything is an object... # In[17]: x = 3.0 # In[18]: x.is_integer() # In[19]: print(dir(x)) # # Container Objects # # A container object has _items_ that are accessed with the <tt>[]</tt> operator # # They hold an arbitrary number of item objects # # The <tt>len</tt> method returns the number of items # # Strings are an example of a container object # In[20]: s = "Hello" len(s) # In[ ]: s = "Hello" # In[21]: get_ipython().run_cell_magic('html', '', '<div id="sindex" style="width: 500px"></div>\n<script>\n$(\'head\').append(\'<link rel="stylesheet" href="https://bits.csb.pitt.edu/asker.js/themes/asker.default.css" />\');\n\n var divid = \'#sindex\';\n\tjQuery(divid).asker({\n\t id: divid,\n\t question: "What is the value of s[1]?",\n\t\tanswers: ["Hello","H","e","o","None"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n</script>\n') # <img src="data:image/jpeg;base64,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888888888888888884OFMu888WEQaS7QZneZZeths888888888888888888888JrkWNwg8eW80tp8+zRhNZplIl88888888888888888888E/l9CfGMDqkKRgcV5pBzRLhwx88888888888888888888CmzrI8sUsQ8ogUcA4ce2N6QCx88888888888888888888Yw+kdCgkcUcNogkMUgPwJWmAg88888888888888888888+vObAI0Jt8Y8EAAM48wkco5/Y88888888888888888888EeR+00Q0Q9kIUcMoUoQswInC9888888888888888888889QvkHuSQGe3Sma6Cy6CLzbaic88888888888888888888/8AunNDFLSYnNGh6uSaNWgIF9bPPPPPPPPPPPPPPPPPPPPEPBVSTEAL0zfR+AthGSSGMXa+PPPPPPPPPPPPPPPPPPPPDkk8eaFqV/3JEhDsA6SlYjuZ+fPPPPPPPPPPPPPPPPPPPB6loIdkW8PLgbbNJG7D+hDDpm/PPPPPPPPPPPPPPPPPPPMUzTM57TuEvETFdGK+GaRcQaf/ADzzzzzzzzzzzzzzzzzzwngZ06CbmmwX6z+/RO2UkGq93DzzzzzzzzzzzzzzzzzzzzqX46jOaWd3z+t6CQjWaTbX+7jzzzzzzzzzzzzzzzzzzzzzz7ZjuJ6UVnp9q5oBeOmNf7irzzzzzzzzzzzzzzzzzzzyLzCZwFz0kRDCRwqIw1ChPJsPDzzzzzzzzzzzzzzzzzzzzxER+mBtRCABxzTQBhrwgoV1wzzzzzzzzzzzzzzzzzzzzwGdFzH3DsNpiDhyKhZ/hpMna+TzzzzzzzzzzzzzzzzzzzyRo1PzzzxyXZvjrSReKhTybfFDzzzzzzzzzzzzzzzzzzzwg9W4nzzwnh3dwzCZryDFoSmMLzzzzzzzzzzzzzzzzzzzwgvMuT3zy15NqcR39ATw23+IwTzzzzzzzzzzzzzzzzzzzyapFS33zwOAYtKi4pvrkkonFjDzzzzzzzzzzzzzzzzzzzzg4buXODxYBJHBt2Thzw01mpkjzzzzzzzzzzzzzzzzzzzxTXv8SkRwgxnT29hlbrsZEDWDnzzzzzzzzzzzzzzzzzzzx+Hw/hCg7MfzpAA+cJ93oFhxkjzzzzzzzzzzzzzzzzzzzwhXY6LnWh/T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"> # # Lists # # A list is an ordered container of arbitrary objects. # # A list is defined by comma separated items in square brackets `[]`. # In[22]: mylist = [1,3.0,"cat", 9+2] print (mylist) # In[23]: mylist[0] # Lists are objects and have a number of built-in methods: # In[24]: print(dir(mylist)) # In[ ]: l = [] l.append(5) l.append(1) l.append(3) l.sort() # In[25]: get_ipython().run_cell_magic('html', '', '<div id="listq" style="width: 500px"></div>\n<script>\n\n var divid = \'#listq\';\n\tjQuery(divid).asker({\n\t id: divid,\n\t question: "What is the value of l?",\n\t\tanswers: ["3","[3]","[5,1,3]","[1,3,5]","[3,1,5]"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n</script>\n') # # Functions (callables) # # # A function is an encapsulation of code; a set of statements that can # be executed on request and returns a value. # # Functions are objects. # # A method is a function that is an attribute of an object. # # A function takes _arguments_ and returns a result (maybe None) # # The value of a callable type is the address of executable code # In[ ]: len("Luke, I am your father.") # this function takes one argument divmod(13,4); # this function takes two arguments # # Defining a function # In[ ]: def square(x): return x * x # - <tt>def</tt> starts definition # - The function name is an identifier like a variable name # - good function names are a critical part of good coding style # - bad: foo, dostuff, process_data # - also bad: ReadInFromFileComputeCorrelationAndOutput # - good: ReadExpressionData, ComputeCorrelation, OutputCorrelationMatrix # - _Parameters_ definine what arguments that function takes # - parameters are _bound_ to the values passed to the function # - Statements are the body of the function; **must be indented** # - Return statement exits function and returns specified value # - if omitted, <tt>None</tt> is returned # - Function definition ends when no more indentation (**whitespace significant!**) # # In[ ]: def twice(x): return x*2 dbl = twice #functions are objects print(dbl(4)) # In[26]: get_ipython().run_cell_magic('html', '', '<div id="dbl" style="width: 500px"></div>\n<script>\n$(\'head\').append(\'<link rel="stylesheet" href="https://bits.csb.pitt.edu/asker.js/themes/asker.default.css" />\');\n\n var divid = \'#dbl\';\n\tjQuery(divid).asker({\n\t id: divid,\n\t question: "What prints out?",\n\t\tanswers: ["8","4","0","<function twice at 0x11115ea28>","None"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n</script>\n') # # Function Scope # # A function's parameters are bound to the passed value. # That is, it's the same as if the parameter was set equal to the passed value (ex, x=4). # # Parameters and variables bound (assigned to) in the function have _local scope_ # # _global_ variables defined outside the function can only be read. # # In[27]: x=4 y=3 def incr(x): x = x + 1 return x print(x,incr(x),x) # In[28]: get_ipython().run_cell_magic('html', '', '<div id="func1" style="width: 500px"></div>\n<script>\n$(\'head\').append(\'<link rel="stylesheet" href="https://bits.csb.pitt.edu/asker.js/themes/asker.default.css" />\');\n\n var divid = \'#func1\';\n\tjQuery(divid).asker({\n\t id: divid,\n\t question: "What prints out?",\n\t\tanswers: ["4 4 4","4 5 5","4 5 4","4 5 6","Error"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n</script>\n') # In[ ]: x=4 y=3 def incr(): y = y + 1 return y print(y,incr()) # In[29]: get_ipython().run_cell_magic('html', '', '<div id="func2" style="width: 500px"></div>\n<script>\n$(\'head\').append(\'<link rel="stylesheet" href="https://bits.csb.pitt.edu/asker.js/themes/asker.default.css" />\');\n\n var divid = \'#func2\';\n\tjQuery(divid).asker({\n\t id: divid,\n\t question: "What prints out?",\n\t\tanswers: ["3 3","3 4","4 4","Error"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n \n</script>\n') # Default Parameters # ------------------ # Default values for parameters can be given. This makes it easy to have # optional arguments that take reasonable defaults if not specified. # In[30]: def foo(x,y=0,z=1): return (x+y)*z foo(2) # In[31]: foo(2,3) # In[32]: foo(2,3,4) # Calling Functions # ----------------- # Functions are called using parens <tt>()</tt>. # # It is an error to call a function # with an incompatible number of arguments. # # _Named_ arguments allow you to specify arguments in a different order # than defined. # # Unnamed arguments (passed in the order defined) must all be # specified before any named arguments. # In[33]: foo(z=2,y=1,x=3) # In[34]: foo(y=1,x=3) # In[ ]: def foo(x,y=0,z=1): return (x+y)*z # In[35]: get_ipython().run_cell_magic('html', '', '<div id="func3" style="width: 500px"></div>\n<script>\n$(\'head\').append(\'<link rel="stylesheet" href="https://bits.csb.pitt.edu/asker.js/themes/asker.default.css" />\');\n\n var divid = \'#func3\';\n\tjQuery(divid).asker({\n\t id: divid,\n\t question: "What does <tt>foo(z=2,4)</tt> return?",\n\t\tanswers: ["8","4","5","10","An Error"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n \n</script>\n') # Lambda Functions # ---------------- # The <tt>lambda</tt> keyword can be used to generate an anonymous (unnamed) function # object. # # The return value of this anonymous <tt>lambda</tt> function is the value of the specified expression. # # Lambda expressions tend to make your code more compact but less readable, # so it's probably best to avoid their use for all but the simplest functions. # In[ ]: foo = lambda x: x**2 #this squares x # is equivalent to # In[ ]: def foo(x): return x**2 # Built-in Functions # ------------------ # There are a huge number of functions built into the python language and # even more are included in standard modules. A few examples: # # * `abs` - absolute value # * `len` - length of a sequence (string, list, etc) # * `min`,`max` - returns smallest/largest item in a sequence # * `sorted` - given a list, returns a sorted copy of that list # * `type` - returns type of an object # * `map` - applies a function to every element of a sequence and returns a list of the result # * `filter` - applies a function to every element of a sequence and returns a # list of just those elements where the function evaluates to true # In[36]: list(map(ord, "hello")) #ord returns ASCII code of string of length 1 # In[37]: list(filter(lambda x: x > 0, [1.0,0.4,-0.3,-1.3,4])) # # What is truth? # # Every object has a Boolean value # In[38]: bool(None),bool(False),bool(True) # For numerical types 0 is false # In[39]: bool(0),bool(0.0),bool(-100) # Empty collections are false # In[40]: bool([]),bool(''),bool([False]),bool([0]) # In[41]: get_ipython().run_cell_magic('html', '', '<div id="falseisfalse" style="width: 500px"></div>\n<script>\n$(\'head\').append(\'<link rel="stylesheet" href="https://bits.csb.pitt.edu/asker.js/themes/asker.default.css" />\');\n\n var divid = \'#falseisfalse\';\n\tjQuery(divid).asker({\n\t id: divid,\n\t question: "What is the value of bool(\'false\')?",\n\t\tanswers: ["True","False","None","Error"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n \n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n</script>\n') # # Comparison Operators # # Return a boolean value # # `<,>,!=,==,<=,>=` # In[42]: 1 < 3 # In[43]: "hello" != "hi" # In[44]: [1,2,3] == [1,2,3], [1,2,3] == [1,2,3.14] # In[45]: x = 3; y = 4; x >= y # In[ ]: list(filter(round, [1.0,0.4,-0.3,-1.3,4])) # In[46]: get_ipython().run_cell_magic('html', '', '<div id="filterlam" style="width: 500px"></div>\n<script>\n$(\'head\').append(\'<link rel="stylesheet" href="https://bits.csb.pitt.edu/asker.js/themes/asker.default.css" />\');\n\n var divid = \'#filterlam\';\n\tjQuery(divid).asker({\n\t id: divid,\n\t question: "What is the result of this application of filter?",\n\t\tanswers: ["[1, 0, 0, -1, 4]","[1.0, 0.4, -0.3, -1.3, 4]","[1.0, -1.3, 4]","[1,-1,4]","[]","An Error"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n \n</script>\n') # # Introspection # # `dir` and `help` can be used to figure out what methods an object has and what they do. # In[47]: help(round) # File Objects # ------------ # A file object provides an interface for reading and writing files. # # Files, unlike memory, are **accessed sequentially** (like reading a book). # # To create a file object use the `open` function: # # `fileobject = open(filename, mode)` # # Where filename is a string that is either a relative path from the # current working directory (e.g., file.txt if file.txt is in the current # directory) or an absolute path (e.g. `/home/user/dkoes/tmp/file.txt`). # File Mode # ---------- # # mode is a string that specifies what you are going to do with the file. # * 'r' - file must already exist and will only be read from (default) # * 'w' - file is created or truncated (delete what's already there) and can only be written to # * 'a' - file is open appended to (does not delete existing file) and can only be written to # # It is also possible to open files for both read/write access ('r+') but this # is tricky and generally not necessary. # # Manipulating File Objects (Methods) # ------------------------ # * `close` - closes the file when you are done with it # * `read` - return the entire file as a string (can also specify optional size argument) # * `readline` - return a single line from the file, returned string includes '\n' # * `readlines` - return lists of all lines # * `write` - writes a passed string to the file # * `seek` - set current position of the file; seek(0) starts back at beginning # # # In[48]: f = open('../files/brca1.fasta') f.readline() # In[ ]: f = open('../files/brca1.fasta') f.read() line = f.readline() # In[49]: get_ipython().run_cell_magic('html', '', '<div id="filer" style="width: 500px"></div>\n<script>\n$(\'head\').append(\'<link rel="stylesheet" href="https://bits.csb.pitt.edu/asker.js/themes/asker.default.css" />\');\n\n var divid = \'#filer\';\n\tjQuery(divid).asker({\n\t id: divid,\n\t question: "What is the value of line?",\n\t\tanswers: ["The first line in the file","The second line in the file",\n "The last line in the file","An empty line","An error is generated"],\n server: "https://bits.csb.pitt.edu/asker.js/example/asker.cgi",\n\t\tcharter: chartmaker})\n \n$(".jp-InputArea .o:contains(html)").closest(\'.jp-InputArea\').hide();\n\n</script>\n') # # Exercise # # What percent of this string consists of g or c? # # atattaggtttttacctacccaggaaaagccaaccaacctcgatctcttgtagatctgttctctaaacgaactttaaaatctgtgtagctgtcgctcggctgcatgcctagtgcacctac # # Create a `.py` text file using Jupyter. # # # Exercise # In[ ]: get_ipython().system('wget https://MSCBIO2025.github.io/files/brca1.fasta') # How can you extract the gene name (second column) from the first line of`brca1.fasta`? # # How many As, Ts, Cs, and Gs are there on the _second_ line of `brca1.fasta`? # # Write a function that takes a file name as an argument and prints out the gene name and percentage of G's and C's in the first line of the sequence. # # **Hint**: Checkout `split`, `count`, and `strip` methods of `str`