introduction to programming using the python …introduction to programming using the python...
TRANSCRIPT
![Page 1: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/1.jpg)
Introduction to Programming using the Python Programming Language
Introduction to Programming
using the Python Programming Language
Scott Hazelhurst
2012
![Page 2: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/2.jpg)
Introduction to Programming using the Python Programming Language
Objectives
Objectives
I learn algorithmic techniques and data structures;apply them in Python;write larger pieces of code
I understand how to use Python librariesI regular expressions;I operating system;I . . .
I Python as a scripting language
![Page 3: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/3.jpg)
Introduction to Programming using the Python Programming Language
Objectives
Curriculum
I brief introduction to algorithm design principles
I data structures i: basic data structures
I algorithmic constructs
I data structures ii: collections
I modularity and functions
![Page 4: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/4.jpg)
Introduction to Programming using the Python Programming Language
Objectives
Documentation
I http://www.python.org
I http://www.python.org/doc/
I also look for the python-doc package. usually installed, ifnot get it installed!!!
I usually placed in something like/usr/share/doc/python2.7.
Bookmark it!
![Page 5: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/5.jpg)
Introduction to Programming using the Python Programming Language
Objectives
Why Python?
I Modern programming language
I Clean syntax
I Good learning curve
I Reasonable semantics
I Powerful features, Lots of libraries
I Cross-platform
Of course weaknesses too:
I Python not the right tool for all problems.
![Page 6: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/6.jpg)
Introduction to Programming using the Python Programming Language
Objectives
IEEE Computer 33(10)
0018-9162/00/$10.00 © 2000 IEEE October 2000 23
C O M P U T I N G P R A C T I C E S
PLOTS AND STATISTICAL METHODSMy study used the multiple boxplot display shown in
Figure 1 for its main evaluation tool. Each of the linesrepresents one subset of data, with its name appearingto the left. Each small circle stands for an individualdata value. The rest of the plot provides visual aids forthe comparison of two or more such data subsets. Theshaded box indicates the range of the middle half of thedata, that is, from the first (25 percent) quartile to thethird (75 percent) quartile. The “whiskers” to the leftand right of the box indicate the data’s bottom and top10 percent, respectively. The fat dot within the box is themedian (50 percent) quartile. The “M” and the dashedline around it indicate the arithmetic mean and themean’s plus-and-minus-one standard error.
For quantitatively describing the variability withinone group of values, I use the bad-to-good ratio:Imagine the data split into an upper and lower half,with the bad-to-good ratio being the median of theupper half divided by the median of the lower half. Inthe boxplot, the median is the value at the right edgeof the box divided by the value at the left edge. In con-trast to a variability measure such as the standard devi-ation, the bad-to-good ratio is robust against outliers.
Most significant observations can easily be madedirectly from the plots. To be sure, however, I also per-formed statistical tests. Medians are compared usingthe one-sided Mann-Whitney U-test (also known astheWilcoxon rank sum test). The result of each test isa p-the value, that is, a probability that the observeddifferences between the samples are only accidentaland that either no difference or a difference in theopposite direction between the underlying populations
An Empirical Comparison ofSeven Programming Languages
When it comes to the pros and consof various programming languages,programmers and computer scien-tists alike usually hold strong opin-ions. By comparing several lan-
guages, I seek to provide some objective informationabout C, C++, Java, Perl, Python, Rexx, and Tcl.
For the comparison, I used the same program, whichimplements the same set of requirements for each lan-guage. Doing so makes the comparison narrow buthomogeneous. Further, for each language, I analyzeseveral separate implementations by different pro-grammers. Such a groupwise comparison offers twoadvantages. First, it smoothes out the differencesamong individual programmers, which could threatenthe validity of any comparison based on a single imple-mentation per language. Second, it allows us to assessand compare the variability of the program propertiesthe different languages induce.
The comparison investigates several aspects of eachlanguage, including program length, programmingeffort, runtime efficiency, memory consumption, andreliability. I also consider the languages both individ-ually and combined into groups. Scripting languagessuch as Perl, Python, Rexx, and Tcl tend more towardbeing interpreted than compiled, at least during theprogram development phase, and they typically do notrequire variable declarations.
The more conventional programming languages—C,C++, and Java—are compiled rather than interpreted,and they require typed variable declarations. Since Javais often believed to be very inefficient, I also sometimesconsider C and C++ as one group and Java as another.
Lutz PrecheltUniversity ofKarlsruhe
Often heated, debates about differentprogramming languages remain incon-clusive. The author takes a first steptoward providing hard data about therelative effectiveness of C, C++, Java,Perl, Python, Rexx, and Tcl.
![Page 7: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/7.jpg)
Introduction to Programming using the Python Programming Language
Objectives
24 Computer
Table 1. Programming-language comparison statistics.
Number of Compiler or Language programs execution platform
Tcl 10 Tcl 8.2.2Rexx 4 Regina 0.08gPython 13 Python 1.5.2Perl 13 Perl 5.005_02Java 24 Sun JDK 1.2.1/1.2.2C++ 11 GNU g++ 2.7.2C 5 GNU gcc 2.7.2
ping, which is described in more detail elsewhere.1
Given the study’s validity caveats, these quantita-tive statistical inference results merely indicate trendsand should not be considered precise evidence.
Table 1 shows the number of programs consideredfor each language and the execution platforms used.The Java evaluation uses either the JDK 1.2.2 HotspotReference version or the JDK 1.2.1 Solaris Productionversion with JIT, depending on which one was fasterfor each program. I executed all programs on a 300-MHz Sun Ultra II workstation with 256 Mbytes ofRAM, running under SunOS 5.7. The results for Cand Rexx are based on only five and four programs,respectively, and are thus rather coarse estimates ofreality, but for all other languages, the results derivefrom 10 or more programs, which is a broad-enoughbase for reasonably precise results.
The “The Programming Problem: Phonecode” and“Comparison Validity” sidebars describe the study’ssetup and validity. Readers interested in a moredetailed description of the study can find it on the Webat ftp.ira.uka.de.2
RESULTSI evaluated the programs using three different input
files: z1000, which contains 1,000 nonempty random
4 16 64
Runtime for z1000 in seconds
256 1,024 4,096
C
C++
Java
Perl
Python
Rexx
Tcl
Individual data valueMedianRange for data‘s middle halfBounds for the data‘s bottom and top 10 percentArtithmetic mean and plus/minus one standard error
Figure 1. Program runtime on the z1000 data set. Three programs timed out with nooutput after about 21 minutes. The bad-to-good ratios range from 1.5 for Tcl up to 27for C++. Note the logarithmic axis. The legend shown here applies to Figures 2 through7 as well. Refer to the “Plots and Statistical Methods” section for more details.
Any programming language compari-son based on actual sample programs isvalid only to the degree to which the capa-bilities of the respective programmersusing these languages are similar. In ourcase, we only need the programs to becomparable on average, not in individualcases. Several factors present programcomparability threats for the 80 programsanalyzed in the study.
The programs come from two differentsources. The Java, C, and C++ programswere produced in 1997 and 1998 duringa controlled experiment in which all thesubjects were computer science master stu-dents.1 The Perl, Python, Rexx, and Tclprograms were produced under more vari-able conditions, created by volunteers after
I posted a “call for programs” message onseveral newsgroups. Consequently, thesesubjects show more diversity in back-ground and experience.
Programmer capabilitiesIt is plausible that a public call for pro-
grams may attract only fairly competentprogrammers, hence the script programsreflect higher average programmer capa-bilities than the nonscript programs.However, two observations suggest thatthis discrepancy is not a problem. First,with some exceptions, the students whocreated the nonscript programs were alsoquite capable and experienced. Second, afair fraction of the script programmersdescribed themselves as either beginners
in programming with their respectivescripting language or as not having a thor-ough programming background, includ-ing a VLSI designer, a system administra-tor, and a social scientist.
Within the nonscript group, the Javaprogrammers tended to be less experi-enced in their language than the C andC++ programmers because Java was stilla new language in 1997 and 1998. In thescript group, the Perl subjects may havebeen more capable than the othersbecause the Perl language appears toattract especially capable programmers—at least that is my personal impression.
Work time reporting accuracyIn contrast to the nonscript programs
Comparison Validity
does indeed exist. I will usually not give the p-valueitself, but rather say “... is larger than ...” if 0 < p !0.10 or “... tends to be larger than ...” if 0.10 < p !0.20. If p > 0.10, there is “no significant difference.”
At several points I also provide confidence inter-vals, either on the differences in means or on the dif-ferences in logarithms of means—that is, on the ratiosof means. The confidence levels are chosen so thatthey are open ended, with their upper end at infinity.I computed the confidence intervals using bootstrap-
![Page 8: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/8.jpg)
Introduction to Programming using the Python Programming Language
Objectives
26 Computer
There is no significant difference between the averageJava and script runtimes. The results give an 80 per-cent confidence that a script will run at least 1.29 timesas long—and a Java program at least 1.22 times aslong—as a C or C++ program. The bad-to-good ratiosare much smaller for scripts (4.1), than for Java (18)or even C and C++ (35).
Initialization phase only, z0 data set. I next focused onthe time to read, preprocess, and store the dictionary.Figure 2 shows the corresponding runtimes. Theresults clearly show C and C++ to be faster in thisphase than all other languages tested. The fastestscript languages are again Perl and Python.
For the aggregate grouping, we find with an 80 per-cent confidence level that, compared to a C or C++
program, a Java program will run at least 1.3 timesas long, while a script will run at least 5.5 times aslong. Compared to a Java program, a script will runat least 3.2 times as long.
Search phase only. Finally, I subtracted the runtimefor the loading phase (z0 data set) from the total run-time (z1000 data set) to obtain the runtime for theactual search phase only. Figure 3 shows the corre-sponding runtimes, which reveal the following:
• Very fast programs occur in all languages exceptfor Rexx and Tcl, while very slow programsoccur in all languages.
• Tcl’s median run time is longer than the run timesfor Python, Perl, and C, but shorter than the runtime for Rexx.
• Python’s median runtime is shorter than the runtimes for Rexx and Tcl and tends to be shorterthan the run time for Java (p = 0.13).
• Perl’s median run time is shorter than the medi-ans for Rexx, Tcl, and Java.
• C++’s median differs significantly from any otherlanguage’s.
The group-aggregated comparison indicates no sig-nificant differences among any of the groups.However, the results give an 80 percent confidencethat the scripts’ runtime variability is smaller than thatof Java by a factor of at least 2.1, and smaller thanthat of C and C++ by a factor of at least 3.4.
Memory consumptionFigure 4, which shows the total process size at the
end-of-program execution for the z1000 input file,encourages several observations:
• Clearly, the most memory-efficient programs comefrom the C and C++ groups, while the least mem-ory-efficient programs come from the Java group.
• Except for Tcl, few of the script languages con-sume more memory than the worst half of the Cand C++ programs.
• Tcl scripts require more memory than other scripts.• For Python and Perl, the relative variability in
memory consumption tends to be much smallerthan for C and, in particular, C++.
• A select few of the scripts consume large amountsof memory.
• On the average, for the group-aggregated viewand with a confidence of 80 percent, the Java pro-grams consume at least 32 Mbytes more mem-ory (297 percent) than the C and C++ programs,and at least 20 Mbytes more memory (98 per-cent) than the script programs. The script pro-grams consume at least 9 Mbytes more memory(85 percent) than the C and C++ programs.
2 4 8
Runtime for z0 in seconds
16 32 64
C
C++
Java
Perl
Python
Rexx
Tcl
Figure 2. Program runtime for loading and preprocessing the dictionary only (z0 dataset). Note the logarithmic axis. The bad-to-good ratios range from 1.3 for Tcl up to 7.5for Python.
4 16 64
Runtime for z1000 after loading in seconds
256 1,024 4,096
C
C++
Java
Perl
Python
Rexx
Tcl
Figure 3. Program runtime for the search phase only, computed as time for the z1000data set minus time for the z0 data set. Note the logarithmic axis. The bad-to-goodratios range from 2.9 for Perl up to more than 50 for C++.
![Page 9: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/9.jpg)
Introduction to Programming using the Python Programming Language
Objectives
28 Computer
script programmers and as measured for the nonscriptprogrammers.
We see that scripts, which have a total median of 3.1hours, take less than half as long to write as nonscripts,which have a total median of 10.0 hours, althoughvalidity threats may have exaggerated this difference.
Fortunately, we can check two things at once,namely, the correctness of the work-time reporting andthe equivalence of the programmer capabilities in thescript versus the nonscript group. Both these possibleproblems, if present, tend to bias the script group’sworktimes downward: We would expect cheaters tofake their time to be shorter, not longer, and, if there isa difference, we expect to see more capable program-mers in the script group compared to the nonscriptgroup because in 1997 and 1998, when the study tookplace, the Java programmers were less experienced rel-ative to the other programmers. This check relies onan old rule of thumb, which says that programmer pro-ductivity measured in lines of code per hour is roughlyindependent of the programming language. Severalwidely used effort estimation methods—includingBarry Boehm’s Cocomo3 and Capers Jones’ program-ming language table for function point estimation4—explicitly assume that productivity LOC per hour isindependent of programming language. Figure 7 plotsthe validation of my work-time data, based on thisrule. Judging from the reliably known productivityrange of Java, all data points, except perhaps the topthree Tcl and topmost Perl results, are quite plausible.
None of the median differences show clear statisticalsignificance, although Java versus C, Perl, Python, orTcl—where 0.07 ! p ! 0.10—comes close to doing so.Even in the group-aggregated view, with its much largergroups, the difference between C and C++ versus scriptsis insignificant (p = 0.22), and only Java is less produc-tive than scripts (p = 0.031), the difference being at least5.2 LOC per hour, with 80 percent confidence.
This comparison lends credibility to the study’swork-time comparison. The times reported for scriptprogramming are likely either only modestly opti-mistic or not at all so. Thus, a work-time advantagefor the script languages of about factor two holds. TheJava work times appear to be a bit pessimistic becausewhen the study took place, the Java programmerswere less experienced than the other programmers.
Program structureIf we consider the designs chosen by those who
wrote programs in the various languages studied, weuncover a striking difference. Most programmers inthe script group used the associative arrays providedby their language and stored the dictionary words tobe retrieved by their number encodings. The searchalgorithm simply attempts to retrieve from this array,using prefixes of increasing length based on the restof the remaining current phone number as the key.Any match found leads to a new partial solution tobe completed later.
In contrast, essentially all the nonscript program-mers chose one of the following solutions: In the sim-ple case, they stored the whole dictionary in an array,usually in both its original character form and the cor-responding phone number representation. They thenselected and tested one-tenth of the whole dictionaryfor each digit of the phone number they were encod-ing, using only the first digit as a key to constrain thesearch space. This procedure leads to a simple butinefficient solution.
The more elaborate case uses a 10-ary tree in whicheach node represents a certain digit, nodes at height nrepresenting the nth character of a word. A word isstored at a node if the path from the root to this noderepresents the word’s number encoding. This solutionis most efficient, but requires a comparatively largenumber of statements to implement the tree con-struction and traversal. In Java, the large resultingnumber of objects also leads to high memory con-sumption due to the severe memory overhead incurredper object by current Java implementations.
The script programs require fewer statements relativeto the nonscript programs because they do most of theactual search with the hashing algorithm, which is usedinternally by the associative arrays. In contrast, the non-script programs require the programmer to code mostof the search process’s elementary steps explicitly. Thisdifference is further accentuated by the effort—or lackof it—for data structure and variable declarations.
Despite the existence of hash table implementationsin both the Java and C++ class libraries, none of thenonscript programmers used them, choosing insteadto implement a tree solution by hand. Conversely, thescript group’s programmers found the hash tablesbuilt into their languages to be an obvious choice.
0 5 10
Total time for programming in hours
15 20 25
C
C++
Java
Perl
Python
Rexx
Tcl
Figure 6. Total working time for realizing the program. The programmers measured andreported the script group times; the experimenter measured the nonscript group times.The bad-to-good ratios range from 1.5 for C up to 3.2 for Perl. Three Java work times of40, 49, and 63 hours exceed the chart’s bounds and thus are not shown.
![Page 10: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/10.jpg)
Introduction to Programming using the Python Programming Language
Objectives
![Page 11: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/11.jpg)
Introduction to Programming using the Python Programming Language
Objectives
Top programming languages – TIOBE February
2012
1 Java 17.1%2 C 16.5%3 C# 8.6%4 C++ 9%5 Objective-C 7.1%6 PHP 5.6%7 Visual Basic 4.3%8 Python 3.1%9 Perl 2.9%10 JavaScript 2.5%
Highly used in bioinformatics
![Page 12: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/12.jpg)
Introduction to Programming using the Python Programming Language
Objectives
Python 2 vs 3
Long term future is Python 3
I But some libraries not available
Python 2
I Last version is 2.7 — now in maintenance
Python 3
I Python 3.2
I Not backwards compatible
![Page 13: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/13.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Program design
Use a design methodology for any real program.
I requirements
I design
I implementation
I testing
I . . . and repeat
Planning
plan . . . plan . . . plan . . . plan . . . plan . . . plan. . . plan . . . plan . . . plan . . . plan . . . plan . . . plan . . .
![Page 14: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/14.jpg)
Introduction to Programming using the Python Programming Language
Program Design
program = data structures + algorithms
Outline of process
I what data we need represent
I how it is manipulatedI what is the input?I what is the output?
![Page 15: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/15.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Data structure: first, understand the concept.
I understand the problem
I decide what data must be representedI what is persistent data – exists beyond life of programI stored dataI what is temporary / on-the-fly
I determine relationship of data
I strive forI simplicity, elegance, clarity, accuracy . . . . . . no
compromises, no tricks
![Page 16: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/16.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Data structure: first, understand the concept.
I understand the problem
I decide what data must be representedI what is persistent data – exists beyond life of programI stored dataI what is temporary / on-the-fly
I determine relationship of data
I strive forI simplicity, elegance, clarity, accuracy . . . . . . no
compromises, no tricks
![Page 17: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/17.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Data structure: first, understand the concept.
I understand the problem
I decide what data must be representedI what is persistent data – exists beyond life of programI stored dataI what is temporary / on-the-fly
I determine relationship of data
I strive forI simplicity, elegance, clarity, accuracy . . .
. . . nocompromises, no tricks
![Page 18: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/18.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Data structure: first, understand the concept.
I understand the problem
I decide what data must be representedI what is persistent data – exists beyond life of programI stored dataI what is temporary / on-the-fly
I determine relationship of data
I strive forI simplicity, elegance, clarity, accuracy . . . . . . no
compromises, no tricks
![Page 19: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/19.jpg)
Introduction to Programming using the Python Programming Language
Program Design
ImplementationSecond, decide how to implement this using the tools availableand data structures provided by the language:
I variables (integer, floating point)
I sequencesI stringsI tuplesI lists
I files
I classes
I callable types
Strive for: as above, but efficiency (memory, time) maybecome critical issues so compromise often necessary
![Page 20: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/20.jpg)
Introduction to Programming using the Python Programming Language
Program Design
ImplementationSecond, decide how to implement this using the tools availableand data structures provided by the language:
I variables (integer, floating point)
I sequencesI stringsI tuplesI lists
I files
I classes
I callable types
Strive for: as above, but efficiency (memory, time) maybecome critical issues so compromise often necessary
![Page 21: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/21.jpg)
Introduction to Programming using the Python Programming Language
Program Design
ImplementationSecond, decide how to implement this using the tools availableand data structures provided by the language:
I variables (integer, floating point)
I sequencesI stringsI tuplesI lists
I files
I classes
I callable types
Strive for: as above, but efficiency (memory, time) maybecome critical issues so compromise often necessary
![Page 22: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/22.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Algorithm
Start with high-level design
I make sure you understand how to solve the problem
I break the problem upI divide-and-conquerI understand the interface between the different
components
I sketch a solution (can you give written instructions for an8 year old)
I formalise solution
I think about alternatives, options
![Page 23: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/23.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Algorithm
Start with high-level design
I make sure you understand how to solve the problem
I break the problem upI divide-and-conquerI understand the interface between the different
components
I sketch a solution (can you give written instructions for an8 year old)
I formalise solution
I think about alternatives, options
![Page 24: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/24.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Algorithm
Start with high-level design
I make sure you understand how to solve the problem
I break the problem upI divide-and-conquerI understand the interface between the different
components
I sketch a solution (can you give written instructions for an8 year old)
I formalise solution
I think about alternatives, options
![Page 25: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/25.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Algorithm
Start with high-level design
I make sure you understand how to solve the problem
I break the problem upI divide-and-conquerI understand the interface between the different
components
I sketch a solution (can you give written instructions for an8 year old)
I formalise solution
I think about alternatives, options
![Page 26: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/26.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Algorithm
Start with high-level design
I make sure you understand how to solve the problem
I break the problem upI divide-and-conquerI understand the interface between the different
components
I sketch a solution (can you give written instructions for an8 year old)
I formalise solution
I think about alternatives, options
![Page 27: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/27.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Algorithm
Start with high-level design
I make sure you understand how to solve the problem
I break the problem upI divide-and-conquerI understand the interface between the different
components
I sketch a solution (can you give written instructions for an8 year old)
I formalise solution
I think about alternatives, options
![Page 28: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/28.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Refine into final program . . . worry about exact syntax etc
I what structureI what modules (new or old)I what functions/methodsI how functions built
I sequence
I assignment, expressions
I iteration (for/while)
I selection (if)
I exceptions
![Page 29: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/29.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Testing . . . getting it to work
Reality, even for small programs:
I program is read much more than written
I you’ll spend more time debugging it than writing it
So:
I plan ahead
I comment your code, make sure well structured
I design good test cases
I learn to use tools like debuggers
![Page 30: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/30.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Testing . . . getting it to work
Reality, even for small programs:
I program is read much more than written
I you’ll spend more time debugging it than writing it
So:
I plan ahead
I comment your code, make sure well structured
I design good test cases
I learn to use tools like debuggers
![Page 31: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/31.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Range of test cases depends on complexity of codeTest cases:
I trivial cases
I simple cases
I ‘normal’ cases
I difficult/extreme cases
I illegal cases
Test as you go along
I unit testing
I system testing
![Page 32: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/32.jpg)
Introduction to Programming using the Python Programming Language
Program Design
What is an algorithm
Algorithm is a set of instructions for accomplishinga task:
I a pattern for knitting a jersey
I a recipe for cooking a meal
I instructions for making tea, a kite, . . .
I directions for travelling from one place toanother
I instructions for filling a bath
I instructions for performing a mathematicalcalculation
![Page 33: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/33.jpg)
Introduction to Programming using the Python Programming Language
Program Design
What is an algorithm
Algorithm is a set of instructions for accomplishinga task:
I a pattern for knitting a jersey
I a recipe for cooking a meal
I instructions for making tea, a kite, . . .
I directions for travelling from one place toanother
I instructions for filling a bath
I instructions for performing a mathematicalcalculation
![Page 34: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/34.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Key points about instructions:
I should be unambiguous
I written in an appropriate language
I require person/thing executing instruction tounderstand context and the language
![Page 35: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/35.jpg)
Introduction to Programming using the Python Programming Language
Program Design
Program
Program: an algorithm written in a special languagecapable of being executed by a computer.
I To solve a problem on computer, we specify theproblem.
I Give high level solution
I Refine solution into program.
Many different programming languages withdifferent strengths, weaknesses and purposes.
![Page 36: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/36.jpg)
Introduction to Programming using the Python Programming Language
Program Design
To understand and use a programming language mustunderstand
I syntax: the form. The rules of grammar which must beobeyed.rules are very strict.
I semantics: the meaning
Correct syntax does not imply correct meaning – we studyPython as an example.
I The constructs and structures of Python have a precisesemantics.
I Ultimately, any solution must be expressed using theseconstructs.
![Page 37: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/37.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Data structures I
Data must be stored in memory:
I primary memory: RAM
I secondary memory: disk
![Page 38: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/38.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Primary memory — “RAM”
I transient, fast: typical sizes 2GB-8GB (120GB huge).
I PLs have a convenient way to use and access.
Permanent memory — the file system
I typically hard disk, tapes etc.
I larger, cheaper, but much slower than primary memory(typical sizes above 250GB, easily up to TB size)
I not as convenient to access
Programs can access both types of memory
![Page 39: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/39.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Primary memory — “RAM”
I transient, fast: typical sizes 2GB-8GB (120GB huge).
I PLs have a convenient way to use and access.
Permanent memory — the file system
I typically hard disk, tapes etc.
I larger, cheaper, but much slower than primary memory(typical sizes above 250GB, easily up to TB size)
I not as convenient to access
Programs can access both types of memory
![Page 40: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/40.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Variables
VariablesThe key construct is a variable: a location in(primary) memory where data is stored.
In Python:
I variable has a type
I must assign a variable a value before trying toaccess it!
I declaration is implicit
![Page 41: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/41.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Variables
Different types for:
I numbers (distinguish between integers andfloating point)
I strings
I truth values/booleans
I collections of different sorts
I files (for accessing external memory)
We can construct new types from primitive ones
![Page 42: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/42.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Operations on variables
Operations on variables
Assignment gives or updates a variable’s value.varname = expression
Read from right-to-left:
I evaluate the expression on the right-hand side;
I store its value in the variable on the left-handside
![Page 43: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/43.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Operations on variables
Examples
i = 10
k = (i+20)*3
i = i+1
k = k*i
![Page 44: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/44.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Operations on variables
I value of a variable can be used in an expression;
I syntax and semantics of an expression dependson type of expression
I can print out a variable (or expression)print(i)
![Page 45: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/45.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Numeric types in Python
Numeric types in Python
I int : integer typeunlimited in size
I float : for floating point numbers (e.g. 3.5,2.66626)NB: generally there is a loss of precision whenrepresenting floats and you must take care.
I Complex: for complex numbers. Use j torepresent square root of −1.e.g. 5.1 + 6.3j
![Page 46: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/46.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Numeric types in Python
Operations on numbers
+, − unary plus, minus** power*, /, //, % multiplication, division, int div, remainder+, − binary: addition, subtraction
Note the precedence.
I −5− 3
I 5 + 3 ∗ 4 ∗ ∗2I (5 + 3 ∗ 4) ∗ ∗2
![Page 47: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/47.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Numeric types in Python
Aside: Built-in Functions
A function is piece of code that:
I accomplishes a particular task;
I can be called by referring to its name;
I usually returns a value
Functions can be
I built-in functions
I from libraries
I written by us
![Page 48: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/48.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Numeric types in Python
Built-in functions on numbers
I abs(x): return the absolute value of xFor example: diff = abs(x-y)
I float(x): convert to a floating point. It must besensible to convert x to a float.
I int(x): convert to an integer (if sensible)
I max(...), min(...): return largest and smallestx = max(a,b,c,d)
I round: round a float to the nearest int.round(5.3) is 5; round(5.7) is 6.
Many others: look at the documentation.
![Page 49: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/49.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Numeric types in Python
Note the difference between integer and floatingpoint arithmetic
x = 10
y = 3
print x/y
print 1.0*x/y
There is also a math module that provides manyfunctions.
![Page 50: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/50.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Strings
StringsStrings allow us to manipulate general alphanumeric data.
city = "Johannesburg"
protein = "alanine"
digstr = "55763"
dignum = 55763
example = ’The book is "Bioinformatics" by Krane’
etc = "don’t hesitate to try other examples"
escapechars = "Examples are tab \t and new line \n. Try them"
Note the difference between digstr and dignum
![Page 51: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/51.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Strings
oaddress = """University of the Witwatersrand1 Jan Smuts AvenueJohannesburg"""
pbag = "Private Bag 3\2050 Wits\South Africa"
notraw = "this is NOT an example \n of a \t raw string \u0026"raw = r"this is an example \n of a \t raw string \u0026"
notrawprint(notraw)rawprint(raw)
![Page 52: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/52.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Strings
Operations on string
I Concatenation: +
fruit = "orange"
beverage = fruit+" juice"
I Repetition: box=fruit*12
![Page 53: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/53.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Strings
What is the difference between:
I x=digstr*10, x=dignum*10
I x=digstr+"10", x=digstr+10,
x=dignum+10
![Page 54: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/54.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Strings
Also many builtin functions:
I len(x): find the length of the string
I Each character is represented internally by a numberchr(x) returns the character represented by the numberx;ord(x): returns the number (ordinal value) of the singlecharacter x .
I split: split a string
I str(x): return a string (printable) version of x
I Note that int and float will convert strings made upof digits into the appropriate number
Good x=int ("23213"); x=float ("232.13")
Bad x=int ("23acc")
There is a strings module with many functions.
![Page 55: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/55.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Simple input from keyboard
Simple input from keyboardThere is a special built-in function called rawinput that takesinput from the keyboard (standard input). It returns a string.
I When executed, the program pauses and waits for inputfrom the keyboard.
I The user enters something at the keyboard terminated bypressing the return key,
I What the user types in is returned.
![Page 56: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/56.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Simple input from keyboard
# program to convert Fahrenheit to Celsius
datain = rawinput("Enter temperature in C: ")
celsius = int(datain)
fahrenheit = celsius *9/5+32
print(fahrenheit)
# or could just do
print(int(rawinput ())*9/5+32)
![Page 57: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/57.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Boolean/Truth values
Boolean/Truth valuesUsed to make decisions.There are two distinguished boolean values: True and False
I operators are: and , or , and not
Truth tables:
and F T or F T notF F F F F T F TT F T T T T T F
We’ll see more general use of truth values later . . .
![Page 58: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/58.jpg)
Introduction to Programming using the Python Programming Language
Data Structures I: A first introduction to data structures in Python
Relational Operators
The relational operators are most useful: >, >=, <, <=,
==, !=
I x < y
Returns True if x is less than y, False otherwise.Numerical or lexicographic ordering is used as appropriate
I Similarly for the other operators.
![Page 59: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/59.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Algorithmic constructs
Python programs are made up using the followingconstructs
I assignments;
I sequence;
I selection;
I repetition
I calls to functions
I blocks of code.
![Page 60: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/60.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Statement sequence
Statement SequenceAn algorithm is a sequence of steps if it consists ofsimple steps which are to be executed one after theother.
I Start at top
I Execute each line
I in order
I exactly once
I unless we use a Python construct – we’ll seelater – that says otherwise
General rule: top-to-bottom; in-order; once
I order really matters
![Page 61: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/61.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Statement sequence
Statement SequenceAn algorithm is a sequence of steps if it consists ofsimple steps which are to be executed one after theother.
I Start at top
I Execute each line
I in order
I exactly once
I unless we use a Python construct – we’ll seelater – that says otherwise
General rule: top-to-bottom; in-order; once
I order really matters
![Page 62: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/62.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Statement sequence
Example
Read in dimensions of rectangle, compute the area.
a = int(rawinput("Enter the length of the rectangle: "))
b = int(rawinput("Enter the width of the rectangle: "))
area = a * b
print "Area is ",area
![Page 63: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/63.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Statement sequence
Sequence thus means
I Steps are executed one at a time
I Each step is executed exactly once.
I The order in which the steps are executed is thesame as that in which they are written down.
I Termination of the last step implies terminationof the algorithm.
Working out the steps is a critical part of theprocess.
![Page 64: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/64.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Statement sequence
In Python, sequencing is done by putting
I each instruction on a line by itself
I mandatory: each line must start in the columnas the preceding line
Unlike many other languages, it is not necessary(nor idiomatic) to end a line with a semi-colon.
I If you have two statements on the same line,separate them with a semi-colonx=1; y=10
Not idiomatic
![Page 65: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/65.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Selection
Selection
To solve most problems we need to make choices.
I In Python most commonly with selection
if condition:
sequence of statements
Example
temp = int(rawinput)
if temp > 30:
aircond=aircond +1
hot = true
![Page 66: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/66.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Selection
ExampleEnter two numbers into the variables a and b so that thelarger of the two numbers is in a, and the smaller in b.
put vals in a and b
if a < b:
Swap a and b
NB: not a program yet . . . how is swapping done.
I must avoid losing information . . .
![Page 67: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/67.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Selection
Using a temporary variable
a = int(rawinput("Enter a: "))
b = int(rawinput("Enter b" ))
if a<b:
tmp = a
a = b
b = tmp
print a, b
![Page 68: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/68.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Role of indentation
Indentation
In Python, indentation (which column a line starts)conveys meaning — a mandatory part of the syntax.The sequence of statements executed when acondition of an if statement become true are
I introduced by a colon;
I consist of all subsequence lines that are furtherindented
I terminated by the first statement indented atsame level
![Page 69: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/69.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Role of indentation
Communications of the ACM 52(10)
![Page 70: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/70.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Role of indentation
if x > y:
y = y + 1
t = x
m = rawinput ()
if a > b: a=a+1
if len(x) > 10:
if cond and b<a:
z=z+1
t = t+1
z=z+1
![Page 71: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/71.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Role of indentation
There is also an else construct.Example: Read in two numbers and put the smaller into avariable called smaller
x = int(rawinput("Enter the first number: "))
y = int(rawinput("Enter the second number: "))
if x < y:
smaller = x
else:
smaller = y
print(smaller)
![Page 72: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/72.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Role of indentation
Bigger and smaller
x = int(rawinput("Enter the first number: "))
y = int(rawinput("Enter the second number: "))
if x < y:
smaller = x
larger = y
else:
smaller = y
larger = x
print "The smaller number is",smaller ,\
and the larger number is",larger
![Page 73: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/73.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Role of indentation
Nested selectione.g find the largest of 3 numbers
I read the numbers into x , y and z
I compare the value in x with the value in yif the value in x is bigger than the value in y
I compare x and z
otherwiseI compare y with z .
![Page 74: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/74.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Role of indentation
x = int(rawinput("Enter the first number: "))
y = int(rawinput("Enter the second number: "))
z = int(rawinput("Enter the third number: "))
if x > y:
if x > z:
largest = x
else:
largest = z
else:
if y > z:
largest = y
else:
largest = z
print "The largest number is",largest
![Page 75: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/75.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Role of indentation
x = int(rawinput("Enter the first number: "))
y = int(rawinput("Enter the second number: "))
z = int(rawinput("Enter the third number: "))
largest = x;
if y > largest:
largest = y
if z > largest
largest = z
![Page 76: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/76.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Role of indentation
elif
And the elif construct allows multiple choices
if not aircond:
message = "Mild"
elif temp > 40:
message = "Very hot"
elif temp > 30:
message = "Hot"
elif temp > 20:
message = "Moderate"
else:
message = "Cold"
![Page 77: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/77.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Repetition I
Repeating sections of code is essential in most algorithms.General approach:
I Identify a set of operations that are performed repetitively(but on different data each time);
I Determine how many times the code must execute orwhen the stopping condition is.
I Identify the essence of the loop
I usually a variable or set of variables that records thepartial answers, summarises the results, and contains thefinal answer when the loop finishes.
![Page 78: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/78.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Examples
I Read in 3 numbers, find the smallest
I Read in 30000 numbers, find the smallest
I Read in a list of student marks (total number ofstudents may not be known before) find theaverage.
I Ditto: but find all the students who got morethan 20% above the average.
I Read in a list of student marks – find the firstone who failed.
![Page 79: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/79.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Guidelines: in designing a loop, each loop must have an
I invariantThis is the thing that makes the loop correctly.One perspective is to see the loop as transforming thedata – after each iteration we get closer to the finalanswer.
I variantThis is the thing that makes the loop terminate.
![Page 80: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/80.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Read in a set of 10 numbers and sum them up
do 10 times
read in a number
add it to what we have seen so far
refine this to
sum = 0
do 10 times
x = int(rawinput())
sum = sum+x
Refine this into Python code.
![Page 81: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/81.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
There are two major ways of looping in Python:
I while loopsLoop while some condition is true — often used when wedon’t know at the beginning how many times the loopwill execute.
I for loopLoop over a list of things – we’ll look at in more detaillater.
![Page 82: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/82.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Basic form of the while loop
while cond:
sequence of statements
Usual structure
initialisation code
while cond:
repeated operations
change variables in the condition
![Page 83: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/83.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Basic form of the while loop
while cond:
sequence of statements
Usual structure
initialisation code
while cond:
repeated operations
change variables in the condition
![Page 84: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/84.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Loop conditionsCan depend on data directly, or program artifacts
I e.g. loop while temp>30
depends on program data
I may introduce loop indices to control number of iterationse.g. loop n times – have a variable i to keep track of howmany times the loop might iterate.
![Page 85: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/85.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Loop conditionsCan depend on data directly, or program artifacts
I e.g. loop while temp>30
depends on program data
I may introduce loop indices to control number of iterationse.g. loop n times – have a variable i to keep track of howmany times the loop might iterate.
![Page 86: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/86.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Example: Read in 10 numbers, find the sum.
sum = 0
i = 0
while i < 10:
x = int(rawinput())
sum = sum+x
i = i+1
![Page 87: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/87.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Example: Read in a list of numbers terminated by a 0, findthe sum.
sum = 0
x = int(rawinput ())
while x != 0:
sum = sum+x
x = int(rawinput ())
![Page 88: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/88.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Read in 10 positive numbers, and print outthe largest number
largest = 0
i = 0
while i < 10:
x = int(rawinput ())
if x > largest:
largest = x
i=i+1
![Page 89: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/89.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Read in 10 positive numbers – print out the largestnumber. If any non-positive numbers, print errormessage and terminate.
largest = i =0
x = 1
while i < 10 and x>0:
x = int(rawinput())
if x > largest:
largest = x
i=i+1
if x <= 0:
print("A non-positive number was entered")
else:
print(largest)
![Page 90: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/90.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Find the first positive integer x such that x3 is greaterthan 1000x .
x=1
while x*x*x <= 1000*x:
x = x+1
![Page 91: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/91.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Read in six integers a, b, c and d , e, f . Determinewhether there are any integers between −1000 and 1000such that ax2 + bx + c = dx2 + ex + f
a = int(rawinput())
...
f = int(rawinput())
x = -1000
while x <= 1000 and a*x*x+b*x+c != d*x*x+e*x+f:
x = x+1
![Page 92: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/92.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
Another approach:
a = int(rawinput())
...
f = int(rawinput())
more = True
x = -1000
while more:
x2 = x*x
if a*x2+b*x+c == d*x2+e*x+f or x > 1000:
more = False
else:
x = x+1
![Page 93: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/93.jpg)
Introduction to Programming using the Python Programming Language
Algorithmic constructs
Repetition I
General guidelines:
I Every variable must have a purpose: it must representsomething meaningful to you, and you must know whatthe value of the variable means.
I formalise the continuing conditionmay be easier to decide terminating condition and negate
I what variables control the condition?
I what initialisation is necessary?will the loop iterate at least once? (What do you want?)
I how are the control variables changed? What will makethe loop terminate?
![Page 94: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/94.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
Data structures II: Sequences and files
Sometimes we can process data ‘on-the-fly’
I read it in one at a time, do some processing, read thenext, never have to look at the same piece of data twice.
But often we need to store the data all in RAM
I algorithm requires data to be processed several times;
I more natural to do so
![Page 95: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/95.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
Data structures II: Sequences and files
Sometimes we can process data ‘on-the-fly’
I read it in one at a time, do some processing, read thenext, never have to look at the same piece of data twice.
But often we need to store the data all in RAM
I algorithm requires data to be processed several times;
I more natural to do so
![Page 96: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/96.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
Requirements for storing data collections
I must be able to refer to the data as a collective;
I must be able to refer to individual items;
Would like flexibility in how to structure data.
I Sequence types are one way of storingcollections.
![Page 97: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/97.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
String
Strings, againStrings are a sequence type:
I sequence of characters
Given a string variable:
I can manipulate it as a whole;
I can access individual characters;
I can access slices.
juice = "apple juice"
print juice[0]
pie = juice[0:5]+" pie"
Can also iterate over – will see examples.Strings are immutable.
![Page 98: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/98.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
String
ExampleRead sequences from input, find the index of the longestsequence, determine how many start with ACCA and howmany have CGGT somewhere
Will develop in steps
I find how long the longest sequence is
I find index of longest sequence
I solve the whole problem
![Page 99: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/99.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
String
len_max = 0
i = 0
seq = rawinput()
while len(seq) > 0:
if len(seq) > len_max:
len_max=len(seq)
seq = rawinput()
i=i+1
print "longest sequence is length ",len_max
![Page 100: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/100.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
String
big_seq = 0
len_max = 0
i = 0
seq = rawinput()
while len(seq) > 0:
if len(seq) > len_max:
big_seq = i; len_max=len(seq)
seq = rawinput()
i=i+1
print "longest sequence is ",big_seq
![Page 101: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/101.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
String
big_seq = len_max = i = numACCA = numCGGT = 0
seq = rawinput()
while len(seq) > 0:
if len(seq) > len_max:
big_seq = i; len_max=len(seq)
if seq[0:4] == "ACCA": numACCA=numACCA+1
if "CGGT" in seq: numCGGT = numCGGT+1
seq = rawinput()
i=i+1
print "longest sequence is ",big_seq
print numACCA," sequences start with ACCA"
print numCGGT," sequences contains CGGT"
![Page 102: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/102.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
Lists
ListsLists enable you to have a collection of Python objects –represented as a list in square brackets.
I numlist = [1,2,3,4,5,6]
I evenlist = [0,2,4,6,8,10]
I stringlist =
["apple","pear","banana","vampire"]
I nested = [[0,2,3],[4,1,0],[3,2,1]]
I oddsnends =
["banana",2j+3,-4.32,[1,2,3],true]
Individual elements and sub-ranges accessed as slices (likestrings).Lists are mutable: e.g. can say nested[1]=25
![Page 103: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/103.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
Tuples
TuplesRepresented as a list in parentheses (round brackets)
I date = (3,"February",2007)
Tuples vs Lists
I Major differenceTuples are immutable: date[1]="March" is not allowed.Lists are mutable: stringlist[2]=3 is allowed.
![Page 104: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/104.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
Repetition II: Iterating over sequences
Repetition II: Iterating over sequencesUsing the for loop, we can iterate over any sequences.General form.
for var in list:
statement -seq
For each value in the list, in turn
I give the variable the value
I execute the body of the code
![Page 105: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/105.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
Repetition II: Iterating over sequences
for ch in dnaseq:
if ch=="C": numCs = numCs+1
for seq in seqList:
if seq[0:4]=="ACCA": numACCAs=numACCAs+1
for ch in seq:
if ch=="C": numCs = numCs+1
![Page 106: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/106.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
Repetition II: Iterating over sequences
Read in a list of DNA sequences. Print out all thoseabove average length.
seq = rawinput()
sum = num = 0
seqlist = []
while len(seq) > 0:
seqlist.append(seq)
sum = sum+len(seq)
seq = rawinput()
num = num+1
average = float(sum) / num
for seq in seqlist:
if len(seq) > average: print(seq)
![Page 107: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/107.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
List functions and helpers
List functions and helpersOne of the most useful functions is range which can be usedto produce lists:
I range(n) produces the list [0, 1, . . . n − 1]
I range(i,n) produces the list [i , i + 1, . . . , n − 1]
I range(i,n,d) produces the list i , i + d , up to but notincluding n.
![Page 108: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/108.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
List functions and helpers
seqlist=[]
for i in range(10):
seq = rawinput()
seqlist.append(seq)
sum = 0
for i in range(10):
sum = sum+len(seqlist[i])
![Page 109: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/109.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
List functions and helpers
Some useful list and tuple functions:
I concatenation: +
I len
I append
I sort, insert,del
I Assignment: e.g. m[5]=23
But! List element must exist already. Can’t do
ml = ["a","b"]
ml[10]= "c"
![Page 110: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/110.jpg)
Introduction to Programming using the Python Programming Language
Data structures II: Sequences and files
List comprehension
List comprehensionCan also create lists using list comprehension.
evens = [2*x for x in range(20)]
odds = [2*x+1 for x in range(20)]
oddsnot3 = [x for x in odds if x%3 !=0]
pairs = [(x,2*x,4*x) for x in range(20) if x%3 == 0]
![Page 111: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/111.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Input/Output
So far we have only done simple I/O to standardinput and standard output (usually keyboard andscreen).Need to be able to
I do I/O to/from files on diskpermanent storage, much larger data
I need finer controldo pretty outputfancier input
![Page 112: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/112.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
print 1,2,3
print (1,2,3)
print 1,2,3,
In Python 2.x can use print to print to a file by assigningsys.stdout
![Page 113: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/113.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Aside: unpacking lists
Often lists are useful – sometimes you want to unpack them
data=["Physics","Chemistry","Bioinformatics"]
print(data ,sep="*")
I ["Physics","Chemistry","Bioinformatics"]
But
print(*data ,sep="*")
I Physics*Chemistry*Bioinformatics
![Page 114: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/114.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Files
Files
file variables in Python let us manipulate externaldata objects such as files on disk.
I The file variable is the internal representationof the external data object such as a file on diskor a pipe.
I Before using, must associate the external andinternal objects.Done with the open function.
![Page 115: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/115.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Files
Opening filesThe open command instructs the system to prepare theexternal file for reading or writing and also gives us an internalreference to that file so we can manipulate it
I give the name of the external file
I give the mode of opening
I store the returned reference in a file
myfile = open("/tmp/seqlist.fasta")
ddfile = open("results.out","w")
mm = open("/usr/local/Hseq.inp","r")
![Page 116: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/116.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Files
Reading from a file
To read a line from a file, use the readline function.
I seq = myfile.readline()
Or, can read all the lines in the file into a list
I seqlist = myfile.readlines()
The latter is often more convenient
I Need to understand application
I BUT: has performance problems if the file is very large
![Page 117: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/117.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Files
Example: Write a program that counts the number of lines ina file.
count = 0
f = open("mydata")
line = f.readline()
while len(line) > 0:
count = count+1
line = f.readline()
print("There are ",count,"lines")
Usual template for most programming languages.Note the structure of the loop.
![Page 118: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/118.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Files
Python alternative: In Python could also do
f = open("mydata")
lines = f.readlines()
print "There are ",len(lines),"lines"
Or also
count = 0
f = open("mydata")
for line in f:
count = count+1
print "There are ",count,"lines"
![Page 119: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/119.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Files
ExampleOpen a file, read in sequences. Print out the first sequencethat starts with ACCAG and has CCATT in it. If no suchsequence, stop.
Need a loop — what is the controlling condition:
I Stop ifwe get to the end of the file; orthe sequence read in starts with ACCAG and has CCATTin it
I Continue if this is not the caseContinue while there is still more to read in and it’s notthe case that the sequence read in starts with ACCAGand has CCATT in it
![Page 120: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/120.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Files
f = open("data/set1.seq")
seq = f.readline()
while len(seq)>0 and
not(seq[0:5]=="ACCAG" and "CCATT" in seq):
seq = f.readline()
if seq[0:5]=="ACCAG" and "CCATT" in seq:
print(seq)
else:
print("No such sequence")
![Page 121: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/121.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Files
f = open("data/set1.seq")
seq = f.readline()
found = False
while len(seq)>0 and not found:
if seq[0:5]=="ACCAG" and "CCATT" in seq:
found = True
else:
seq = f.readline()
if found:
print(seq)
else:
print("No such sequence")
![Page 122: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/122.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Files
What about using a for loop?
I for loops are usually used when the number of times theloop will execute depends only on the size of the list — isknown at the start of the loop.
I can do out-of-the-ordinary termination and skipping
I break: leave the loop immediately.I continue: skip the rest of this iteration of the loop;
start the next one if there is.
I very useful, but should not be over-used
I can apply to a while loop too.
![Page 123: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/123.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Files
f = open("data/set1.seq")
for seq in f:
if seq[0:5]=="ACCAG" and "CCATT" in seq:
break
if seq[0:5]=="ACCAG" and "CCATT" in seq:
print(seq)
else:
print("No such sequence")
![Page 124: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/124.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Output
OutputTo write to a file:
I open a file with the write mode.
I use write and writelines()
outf = open("/tmp/res.dat","w")
for i in range(0,10):
outf.write(str(i)+" "+str(i*i)+str("\n"))
outf.close()
![Page 125: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/125.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Aside: manipulating strings with the % operator
Aside: Manipulating strings – the % operatorParticularly useful for output.General form:
I formatstring%(list of expressions)
I The format string gives the form in which we want thestring to appear, with % flags for place-holders;
I The expressions are the values we want.
![Page 126: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/126.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Aside: manipulating strings with the % operator
"Capital of %s is %s\n"%("Russia","Moscow")
"Rate at hour %d was %f"%(i,r[i])
![Page 127: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/127.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Aside: manipulating strings with the % operator
univs = ["Wits","UWC","UP","Rhodes","UCT","UKZN"]
for u in univs:
print("Name is %s; length name is %d\n")%\
(u,len(u))
![Page 128: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/128.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Aside: manipulating strings with the % operator
Read for yourself the details. Key points are:
I %s: string substiution
I %d integer substitution%4d: integer substitution R/J in a field of width 4%-4d: integer substitution L/J in a field of width 4
I %f float%6.3f float sub R/J in a field of width 6, with 3 to theright of the decimal
![Page 129: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/129.jpg)
Introduction to Programming using the Python Programming Language
Input/Output
Aside: manipulating strings with the % operator
outf.write(("Name: %s; Surname: %s\n")%(fname,sname))
x = ("%d %d-%d\n")%(areac,exch,num)
outf.write(("Seq: %d;\t ID: %5d; \t ratio: %5.3f\n")%\
(i,seqid, numc/len(seq)))
![Page 130: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/130.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Case study – building histogramsProduce average, median, histogram from a file of marks
Input
76817569726345886978..
Output
..
40-49 *
50-59
60-69 ***
70-79 ****
80-89 **
..
Ave: 63.4
Median: 65.2
![Page 131: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/131.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Assumptions
All programs must make assumptions. Assumptionshave impact on what you do.
I Where is the data?
I Can we assume there are always marks in thefile?
I Is the file always in the right format?
I Marks integers?
I Any marks above 100?
I Any marks below 0?
![Page 132: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/132.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Design issues
How do we solve? What data needs to be stored?
I Do we need to store data, or do on fly?
I How to compute average?
I How to compute median?
I How to compute histogram?
I How to print out histogram?
![Page 133: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/133.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Design issues
How do we solve? What data needs to be stored?
I Do we need to store data, or do on fly?
I How to compute average?
I How to compute median?
I How to compute histogram?
I How to print out histogram?
![Page 134: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/134.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Design issues
How do we solve? What data needs to be stored?
I Do we need to store data, or do on fly?
I How to compute average?
I How to compute median?
I How to compute histogram?
I How to print out histogram?
![Page 135: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/135.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Design issues
How do we solve? What data needs to be stored?
I Do we need to store data, or do on fly?
I How to compute average?
I How to compute median?
I How to compute histogram?
I How to print out histogram?
![Page 136: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/136.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Design issues
How do we solve? What data needs to be stored?
I Do we need to store data, or do on fly?
I How to compute average?
I How to compute median?
I How to compute histogram?
I How to print out histogram?
![Page 137: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/137.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Computing average
f = open("marks.dat") # NB: bad idea to hard code
n=sum = 0
for line in f:
sum = sum+int(line)
n=n+1
print("Ave =%4.1f\n"%(sum/n))
![Page 138: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/138.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Computing median and average
marks = []
for line in f:
num=int(line)
marks.append(num)
sum=sum+num
n=n+1
marks.sort()
print("Ave: %4.1f"%(sum/n))
print("Median: %4.1f"%(marks[n//2]))
![Page 139: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/139.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Computing histogramUse an array of counters – one element for each decile
I Create, initialise to zero
I histo = [0]*10
I As you read in a mark, determine the decile, incrementthe counter
![Page 140: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/140.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Computing histogramUse an array of counters – one element for each decile
I Create, initialise to zero
I histo = [0]*10
I As you read in a mark, determine the decile, incrementthe counter
![Page 141: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/141.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
Computing histogramUse an array of counters – one element for each decile
I Create, initialise to zero
I histo = [0]*10
I As you read in a mark, determine the decile, incrementthe counter
![Page 142: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/142.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
....
num=int(line)
marks.append(num)
if 0 <= num < 10:
histo [0]= histo [0]+1
elif 10<= num < 20:
histo [1]= histo [1]+1
..
..
elif 80<= num < 90:
histo [8]= histo [8]+1
elif 90<= num <= 100:
histo [9]= histo [9]+1
![Page 143: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/143.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
for line in f:
num=int(line)
decile = num //10
if decile ==10: decile =9
histo[decile ]= histo[decile ]+1
for i in range (10):
if i < 9:
print "%2d-%-3d "%(i*10,(i+1)*10 -1) ,
else:
print "%2d-%3d "%(i*10,(i+1)*10) ,
print "*"*histo[i]
![Page 144: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/144.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
f = open("marks.dat")
n=sum = 0
marks = []
histo = [0]*11
for line in f:
num=int(line)
marks.append(num)
decile = num //10
histo[decile ]= histo[decile ]+1
sum=sum+num
n=n+1
histo [9]= histo [9]+ histo [10]
![Page 145: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/145.jpg)
Introduction to Programming using the Python Programming Language
Case study: Histograms
for i in range (10):
start = i*10
last = start +9
if i==9: last =100
print "%2d-%-3d "%(start ,last),"*"*histo[i]
marks.sort()
print "Ave: %4.1f"%(sum/n)
print "Median: %4.1f"%( marks[n/2])
![Page 146: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/146.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Modularity and sub-algorithms
Divide-and-conquer is a key design principle
I For everything but the most trivial program, the designphase will break the problem into parts.
Programming languages provide useful constructs for this:
I promote good design and implementation techniques;
I promote code re-use
![Page 147: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/147.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Modularity and sub-algorithms
Divide-and-conquer is a key design principle
I For everything but the most trivial program, the designphase will break the problem into parts.
Programming languages provide useful constructs for this:
I promote good design and implementation techniques;
I promote code re-use
![Page 148: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/148.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Functions
Functions
Functions (also known as methods, procedures, routines,sub-routines) are sections of named, separately callable code:
I the same piece of code may be called in several places;
I can structure your code to reflect the design
We have seen examples:
I len(x)
I f.readlines()
There are built-in functions, functions in libraries, libraries youwrite yourself.
![Page 149: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/149.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Functions
Calling a functionTo call a function, you give its name and its argument list.
I execution transfers to the code of the function;
I the values of the argument are passed to the function;
I the function then executes using the given values;
I when the function finishes executing, control returns tothe caller.
I function may return a value. x=len(datalist)
Note:
I one function can call another function and so on.
![Page 150: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/150.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Functions
In Python we see two ways of referring to functions thatreflect different perspectives of data.
I passive view: the data is a passive thing on which weperform operations.x=len(datalist)
I active view: the data is an active thing and the operationsthat are relevant to the data are parts of its definition.x.capitalize(); x.center(20)
often known as methods
![Page 151: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/151.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Importing functions from modules
Functions from Modules
A module is a collection of related functions (possiblyimplementing a class – will talk about later).To use a module, must
I import the whole moduleuse the functions in the module, qualifying the names; or
I import the functions required from the module; or
I use a function to create an object of the type that themodule defines.invoke appropriate methods on that object.
Modules can also contain constants
![Page 152: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/152.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Importing functions from modules
import math
from time import clock
start = clock() # cpu usage not wall-clock
radius = 20.0
area = math.pi*radius**2
l = math.log(radius)
k = math.log(radius,2)
for i in range(1000):
print k,l
finish = clock()
print "This took ",finish-start
![Page 153: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/153.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Importing functions from modules
Example using csv module
CSV (comma-separated-values) files
I Produced by most spreadsheet programs like Excel
David,78272782,25,38,57
Barack,8228728,82,73,91,75
Hosni,726276,5,3,12,16,10,9,17
We want to compute the average of each of the students.
![Page 154: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/154.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Importing functions from modules
import csv
classfile =open("classlist")
csvfile = csv.reader(classfile)
for student in csvfile:
name = student[0]
number = student[1]
sum=n=0
for mark in student[2:]:
sum=sum+int(mark)
n = n + 1
print "Average of %s was %5.1f"%(name,float(sum)/n)
![Page 155: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/155.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Importing functions from modules
from datetime import date
# create a new date object
d = date.today()
print("Today is: ",d.day,"/",d.month,"/",d.year)
print(d.isoformat())
dayofweek = d.weekday()
if dayofweek not in [0,6]:
print("Work harder!!!!")
![Page 156: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/156.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Defining new functions
Defining new functions
You can write your own functions:
def functionname(list of args):
code
Functions usually return a value: use the return keyword.
I When the return keyword is reached, executionterminates and control passes back to where called.A value can be returned to the caller
I Can have multiple returns – may make things complex
I If no return given, then a special value None returned.
![Page 157: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/157.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Defining new functions
def count_vowels(s):
count=0
for ch in s:
if ch.upper() in ["A","E","I","O","U"]:
count=count+1
return count
print "Please enter string: "
myinp = raw_input()
c = count_vowels(myinp)
print "There are %d vowels\n"%c
![Page 158: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/158.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Defining new functions
def double(x):
return 2*x
def print_row(i):
outs = ("Number is %5d, double is %5d")%\
(i,double(i))
print outs
for j in range(20): print_row(j)
![Page 159: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/159.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Defining new functions
def count_chars(seq,target):
count=0
for ch in seq:
if ch==target:count=count+1
return count
def count_chars_in_file(fname,t):
count = 0
f = open(fname)
for seq in f:
count=count+count_chars(seq,t)
return count
print count_chars_in_file("see.dat","C")
![Page 160: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/160.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Parameter/argument passing
Parameter/argument passingParameters given in two places:
I where the function is defined — formal arguments.
I where the function is called – actual arguments
When function called, actual, formal arguments bound:
I first actual argument bound to first formal, etc. . .
I values copied across
I after that no link between parameters (but see later. . . it’snot quite so simple)
Each time a function is called there is a fresh binding – thereis no “memory”
![Page 161: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/161.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Parameter/argument passing
I your functions can call other functions;
I they can call themselves – recursion (we’ll see this later);
I functions can be nested
I functions have their own name spacewill have a look at this later in more detailif a variable is assigned a value in a function it is local tothat functionif a variable only has its value used, it is a global variableand must be given a value globally before the function iscalled.
![Page 162: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/162.jpg)
Introduction to Programming using the Python Programming Language
Modularity, sub-algorithms, functions
Parameter/argument passing
Functions and good design
I let the structure of your program reflect the structure ofyour solution;
I can work top-down:know you need a function to accomplish a taskbuild a stub, come back to the problem later
I can work bottom-up:build a function to accomplish a small task, test itseparatelythen work upwards
Big-bang program design and implementation is not a goodidea.
![Page 163: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/163.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Some basic Python Modules
There are hundreds of Python module.
I Must know some well
I Have an overview of what’s out there
I Use the documentation
![Page 164: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/164.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The pickle module
The pickle module
Useful for I/O of data to/from disk for
I want program data from one run of program to be usedin another run of program
I problem addressed: easy to print out and subsequentlyread simple data, but not so easy for complex data (e.g.dictionaries, storing lists of tuples).
I data not intended to be human readable on disk
I don’t need to interface with non-Python programs
![Page 165: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/165.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The pickle module
The pickle module
Useful for I/O of data to/from disk for
I want program data from one run of program to be usedin another run of program
I problem addressed: easy to print out and subsequentlyread simple data, but not so easy for complex data (e.g.dictionaries, storing lists of tuples).
I data not intended to be human readable on disk
I don’t need to interface with non-Python programs
![Page 166: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/166.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The pickle module
The pickle module
Useful for I/O of data to/from disk for
I want program data from one run of program to be usedin another run of program
I problem addressed: easy to print out and subsequentlyread simple data, but not so easy for complex data (e.g.dictionaries, storing lists of tuples).
I data not intended to be human readable on disk
I don’t need to interface with non-Python programs
![Page 167: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/167.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The pickle module
The pickle module
Useful for I/O of data to/from disk for
I want program data from one run of program to be usedin another run of program
I problem addressed: easy to print out and subsequentlyread simple data, but not so easy for complex data (e.g.dictionaries, storing lists of tuples).
I data not intended to be human readable on disk
I don’t need to interface with non-Python programs
![Page 168: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/168.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The pickle module
Dumping data
f = open("prog.dat","w")
x = [1,2,("a","b")]
y = {....}
pickle.dump(x,f)
pickle.dump(y,f)
Reading data
f = open("prog.dat")
x=pickle.load(f)
y=pickle.load(f)
![Page 169: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/169.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The sys module
The sys moduleAllows system specific information to be retrieved.Most very technical. Some of the useful ones are
I sys.exit(arg): Leave the current program immediately.
I arg can be numeric: 0 is good; 1–127 is bad.I Can also be a string which may be printed out.
I sys.path: A list of places Python looks to import code
I sys.platform
![Page 170: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/170.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The sys module
Sometimes you want to pass your program: can use listsys.argv
Suppose this is the file see.py
import sys
print(sys.argv)
and it is run by
python see.py a b c d e
Then sys.argv is the list[’see.py’, ’a’, ’b’, ’c’, ’d’]
![Page 171: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/171.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The sys module
Our histogram example, could now be written as
import sys
f = open(sys.argv [1])
And then when the program is run, we give it the file namecontaining the marks.
![Page 172: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/172.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The sys module
sys.stdin, sys.stdout, sys.stderr
Say where default I/O is done
I Can use, change
if file_output:
f=open(fname,"w")
else:
f=sys.stdout
f.write(answer)
![Page 173: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/173.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
Regular expressions: re
Support for regular expressions is common in scriptinglanguages:
I generalised form of string matching;
I useful for finding text, processing and replacingsupplements methods on strings
Example:
I using strings it’s easy to find particular text, but notpatterns, e.g.:capitalise every letter after a full stop followed by a spacereplace \begin{xxxx} with <xxxx>
find all numbers to the right of an equals sign.
![Page 174: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/174.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
Specifying Regular Expressions
I Most characters stand for themselves: F Fred 6312
I \ | ( ) [ { ^ $ * + ? . are metacharacters (havespecial meaning)
I escape with a backslash for the chars:\(Fred\) stands for the string (Fred)
I To group things together, use parentheses.Groups can be referred to.
![Page 175: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/175.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
Specifying Regular Expressions
I Most characters stand for themselves: F Fred 6312
I \ | ( ) [ { ^ $ * + ? . are metacharacters (havespecial meaning)
I escape with a backslash for the chars:\(Fred\) stands for the string (Fred)
I To group things together, use parentheses.Groups can be referred to.
![Page 176: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/176.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
Specifying Regular Expressions
I Most characters stand for themselves: F Fred 6312
I \ | ( ) [ { ^ $ * + ? . are metacharacters (havespecial meaning)
I escape with a backslash for the chars:\(Fred\) stands for the string (Fred)
I To group things together, use parentheses.Groups can be referred to.
![Page 177: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/177.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
I To specify alternatives, use |
green|red apples stands for green or redapples
(green|red) apples stands for green applesor red apples
I A list of characters in square brackets matchesany of the characters.
I [YyNn] matches any of an upper or lower case “y” or“n”.
I [A-Za-z0-9] is all the alphanumeric characters
![Page 178: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/178.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
I To specify alternatives, use |
green|red apples stands for green or redapples(green|red) apples stands for green applesor red apples
I A list of characters in square brackets matchesany of the characters.
I [YyNn] matches any of an upper or lower case “y” or“n”.
I [A-Za-z0-9] is all the alphanumeric characters
![Page 179: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/179.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
I To specify alternatives, use |
green|red apples stands for green or redapples(green|red) apples stands for green applesor red apples
I A list of characters in square brackets matchesany of the characters.
I [YyNn] matches any of an upper or lower case “y” or“n”.
I [A-Za-z0-9] is all the alphanumeric characters
![Page 180: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/180.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
I \n new line; \t tab; \s a whitespace;
I \d digit; \D non-digit;
I \w a word charater, \W a non-word character
I . anything but a \n
I m{3} stands for mmm(map){2,3} stands for mapmap or mapmapmap
I m* stands for 0 or more m’s
I m+ stands for 1 or more m’s
I \k (where k is a number, matches the n-th group)
I Many others. Rules long and complex in full generality,but easy to use basic REs
![Page 181: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/181.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
I \n new line; \t tab; \s a whitespace;
I \d digit; \D non-digit;
I \w a word charater, \W a non-word character
I . anything but a \n
I m{3} stands for mmm(map){2,3} stands for mapmap or mapmapmap
I m* stands for 0 or more m’s
I m+ stands for 1 or more m’s
I \k (where k is a number, matches the n-th group)
I Many others. Rules long and complex in full generality,but easy to use basic REs
![Page 182: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/182.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
I \n new line; \t tab; \s a whitespace;
I \d digit; \D non-digit;
I \w a word charater, \W a non-word character
I . anything but a \n
I m{3} stands for mmm(map){2,3} stands for mapmap or mapmapmap
I m* stands for 0 or more m’s
I m+ stands for 1 or more m’s
I \k (where k is a number, matches the n-th group)
I Many others. Rules long and complex in full generality,but easy to use basic REs
![Page 183: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/183.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
I \n new line; \t tab; \s a whitespace;
I \d digit; \D non-digit;
I \w a word charater, \W a non-word character
I . anything but a \n
I m{3} stands for mmm(map){2,3} stands for mapmap or mapmapmap
I m* stands for 0 or more m’s
I m+ stands for 1 or more m’s
I \k (where k is a number, matches the n-th group)
I Many others. Rules long and complex in full generality,but easy to use basic REs
![Page 184: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/184.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
I \n new line; \t tab; \s a whitespace;
I \d digit; \D non-digit;
I \w a word charater, \W a non-word character
I . anything but a \n
I m{3} stands for mmm(map){2,3} stands for mapmap or mapmapmap
I m* stands for 0 or more m’s
I m+ stands for 1 or more m’s
I \k (where k is a number, matches the n-th group)
I Many others. Rules long and complex in full generality,but easy to use basic REs
![Page 185: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/185.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
I \n new line; \t tab; \s a whitespace;
I \d digit; \D non-digit;
I \w a word charater, \W a non-word character
I . anything but a \n
I m{3} stands for mmm(map){2,3} stands for mapmap or mapmapmap
I m* stands for 0 or more m’s
I m+ stands for 1 or more m’s
I \k (where k is a number, matches the n-th group)
I Many others. Rules long and complex in full generality,but easy to use basic REs
![Page 186: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/186.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
I \n new line; \t tab; \s a whitespace;
I \d digit; \D non-digit;
I \w a word charater, \W a non-word character
I . anything but a \n
I m{3} stands for mmm(map){2,3} stands for mapmap or mapmapmap
I m* stands for 0 or more m’s
I m+ stands for 1 or more m’s
I \k (where k is a number, matches the n-th group)
I Many others. Rules long and complex in full generality,but easy to use basic REs
![Page 187: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/187.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
Using regular expressions
The re module provides extensive regular expression support
search(pattern,string)Look for the pattern in the string.
mtch = re.search(r"(\w+) \1",data):
Returns a MatchObject or None
![Page 188: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/188.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
split(pattern,string)Break a string into a list of strings
>>> re.split(" [;-] ","a-b - c ; d")[’a-b’, ’c’, ’d’]
findall(pattern,string)return a list of matches
>>> re.findall("\(\d+\)","(1) now (x) app (13) next")[’(1)’, ’(13)’]
![Page 189: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/189.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
sub(pattern,replacement,data)Substitute some pattern for another.
re.sub("(.+), (.+), (.+)",
r"Number=\1\nName: \3 \2", data)
![Page 190: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/190.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
Regular expressions: re
The matchobject is a very useful data type:
mtch = re.search("caller (\w+); num (\w+); charge:(\d+)",\data)
I if the search does not succeed, you get back None
I otherwise, mtch can be used to extract out parts of thematch
mtch.group(0) # entire string matched
mtch.group(1) # the first group (caller)
mtch.group(2) # the next
![Page 191: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/191.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The os module
The os module
provides interaction with the operating system, including fileand process management. some of the useful features are
I access(path, mode) access to the path/file?
I chdir(path), getcwd(): change, get the currentworking directory
I listdir(path): list directory
I walk(dirname): generator of hierarchical directorystructure
I change modes, groups; make, delete directories, links;rename files; get file information (stat)
![Page 192: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/192.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The os module
The os module
provides interaction with the operating system, including fileand process management. some of the useful features are
I access(path, mode) access to the path/file?
I chdir(path), getcwd(): change, get the currentworking directory
I listdir(path): list directory
I walk(dirname): generator of hierarchical directorystructure
I change modes, groups; make, delete directories, links;rename files; get file information (stat)
![Page 193: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/193.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The os module
The os module
provides interaction with the operating system, including fileand process management. some of the useful features are
I access(path, mode) access to the path/file?
I chdir(path), getcwd(): change, get the currentworking directory
I listdir(path): list directory
I walk(dirname): generator of hierarchical directorystructure
I change modes, groups; make, delete directories, links;rename files; get file information (stat)
![Page 194: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/194.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The os module
The os module
provides interaction with the operating system, including fileand process management. some of the useful features are
I access(path, mode) access to the path/file?
I chdir(path), getcwd(): change, get the currentworking directory
I listdir(path): list directory
I walk(dirname): generator of hierarchical directorystructure
I change modes, groups; make, delete directories, links;rename files; get file information (stat)
![Page 195: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/195.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The os module
The os module
provides interaction with the operating system, including fileand process management. some of the useful features are
I access(path, mode) access to the path/file?
I chdir(path), getcwd(): change, get the currentworking directory
I listdir(path): list directory
I walk(dirname): generator of hierarchical directorystructure
I change modes, groups; make, delete directories, links;rename files; get file information (stat)
![Page 196: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/196.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The os module
I times returns the time the process has taken up to now(use the time module to get info/perform operations ontime)
I system: run a system commandos.system("cp f1.dat /tmp/f2.dat")
I popen: run another process and open up a pipeAllows execution of the command, and reading theresults.
I Many others
![Page 197: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/197.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The os module
I times returns the time the process has taken up to now(use the time module to get info/perform operations ontime)
I system: run a system command
os.system("cp f1.dat /tmp/f2.dat")
I popen: run another process and open up a pipeAllows execution of the command, and reading theresults.
I Many others
![Page 198: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/198.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The os module
I times returns the time the process has taken up to now(use the time module to get info/perform operations ontime)
I system: run a system commandos.system("cp f1.dat /tmp/f2.dat")
I popen: run another process and open up a pipe
Allows execution of the command, and reading theresults.
I Many others
![Page 199: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/199.jpg)
Introduction to Programming using the Python Programming Language
Some basic Python modules
The os module
I times returns the time the process has taken up to now(use the time module to get info/perform operations ontime)
I system: run a system commandos.system("cp f1.dat /tmp/f2.dat")
I popen: run another process and open up a pipeAllows execution of the command, and reading theresults.
I Many others
![Page 200: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/200.jpg)
Introduction to Programming using the Python Programming Language
More python
More Python
1. dictionaries
2. more on functions
3. sets
![Page 201: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/201.jpg)
Introduction to Programming using the Python Programming Language
More python
Dictionaries
Dictionaries
Known in other languages as hash tables, or associative maps.generalised form of a list:
I the index can be any immutable type
os.environ["PATH"]
os.environ["HOME"]
winner["Wimbledon"]="Williams
![Page 202: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/202.jpg)
Introduction to Programming using the Python Programming Language
More python
Dictionaries
table = {}table["sat"]="saturday"table["sun"]="sunday"table["mon"]=12table[3]="no day"table[(1,2)] = "tuple1"table[(1,4)] = [1,2,3,4]
print(table[3])>> ’no day’
![Page 203: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/203.jpg)
Introduction to Programming using the Python Programming Language
More python
Dictionaries
print(table["sat"])>> ’saturday’print(table[(1,2)])>>’tuple1’print(table[(2,3)])>> keyerror: (2, 3)resp = {"y" : "yes", "y" : "yes", "n": "no", 3:[4,7,"africa"]}
print(resp["n"])’no’
![Page 204: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/204.jpg)
Introduction to Programming using the Python Programming Language
More python
Dictionaries
There are a number of useful methods available for tables.
>>> len(table)6>>> table.keys()[3, ’sun’, ’mon’, (1, 2), (1, 4), ’sat’]>>> table.values()[’no day’, ’sunday’, 12, ’tuple1’, [1, 2, 3, 4], ’saturday’]>>> table.items()[(3, ’no day’), (’sun’, ’sunday’), (’mon’, 12), ((1, 2), ’tuple1’),((1, 4), [1, 2, 3, 4]), (’sat’, ’saturday’)]>>> table.has_key("mon")false>>> table.has_key("mon")true
![Page 205: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/205.jpg)
Introduction to Programming using the Python Programming Language
More python
Dictionaries
Example use of dicts
We have a list of email addresses we have written to.Summarise usage.Input
Output
![Page 206: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/206.jpg)
Introduction to Programming using the Python Programming Language
More python
Dictionaries
summary = {}
f = open(sys.argv [1])
for email in f:
email=email.rstrip("\n");
if summary.has_key(email):
summary[email]= summary[email ]+1
else:
summary[email ]=1
for k in sorted(summary.keys ()):
print "%-30s %s"%(k,summary[k])
![Page 207: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/207.jpg)
Introduction to Programming using the Python Programming Language
More python
Sets
SetsCan use lists for sets, but the set type and frozenset typesare preferred.
>>> a = set([1,2,3,4,5,"apple"])
set([1, 2, 3, 4, 5, ’apple’])
>>> len(a)
6
>>> a.union([5,"cherry"])
set([1, 2, 3, 4, 5, ’cherry’, ’apple’])
>>> b = set([4,5,"apple","cherry"])
>>> a.intersection(b)
set([4, 5, ’apple’])
Usual types of set operations available.
![Page 208: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/208.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
Functions in Python
While not first class citizens in python, functions can bemanipulated in a number of ways:
Higher order functionsfunctions that take other functions as arguments.
Examples:
I map: apply a function to a list
I filter: use a function to select items from a list
I reduce: use a function to combine a list
![Page 209: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/209.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
mapApplies a function to list of items
I x = map(sqrt,[10,3,40,5])
![Page 210: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/210.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
filteruse a boolean function to select items
Applies the function to each item in the list and returns a newlist:
I if true result, put in returned list
I if false result, left out of returned list
def passmark(x):
return x >= 50
numpassed= len(filter(passmark ,marks))
![Page 211: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/211.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
functools.reducecombine a list with given binary function
I reduce(func,list): apply the function to the first andsecond items in the list to get a result. then repeatedlyuse computed result and elements in the list
def concat(x, y): return x+y
reduce(concat ,["apple","pie","is","good"])
![Page 212: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/212.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
I reduce(func,list,init): as above but use init asthe starting point
reduce(concat,["apple","pie","is","good"],"do you think ")
do you think applepieisgood
![Page 213: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/213.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
Lambda forms: anonymous functions
I higher order functions require functions as argument, butoften function wanted
I hasn’t been defined alreadyI has very specific purpose so will only be used in one
placeI don’t want overhead of defining function first
I solution: anonymous function – can define it where weneed it
I general forms: lambda args: expression
![Page 214: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/214.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
Lambda forms: anonymous functions
I higher order functions require functions as argument, butoften function wanted
I hasn’t been defined alreadyI has very specific purpose so will only be used in one
placeI don’t want overhead of defining function first
I solution: anonymous function – can define it where weneed it
I general forms: lambda args: expression
![Page 215: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/215.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
Lambda forms: anonymous functions
I higher order functions require functions as argument, butoften function wanted
I hasn’t been defined alreadyI has very specific purpose so will only be used in one
placeI don’t want overhead of defining function first
I solution: anonymous function – can define it where weneed it
I general forms: lambda args: expression
![Page 216: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/216.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
Lambda forms: anonymous functions
I higher order functions require functions as argument, butoften function wanted
I hasn’t been defined alreadyI has very specific purpose so will only be used in one
placeI don’t want overhead of defining function first
I solution: anonymous function – can define it where weneed it
I general forms: lambda args: expression
![Page 217: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/217.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
I lambda x, y: x+y
I reduce(lambda x, y: x+y,list)
I filter(lambda mark: mark>=50, marklist)
I map usage: map(lambda x: 9*x/5+32, temps)
I filter usage
marklist =
[("0233663" ,58),("0241713" ,82),("0321878" ,42) ,...]
numfirsts = len(filter(lambda (number ,mark):
mark >= 75,marklist ))
![Page 218: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/218.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
I lambda x, y: x+y
I reduce(lambda x, y: x+y,list)
I filter(lambda mark: mark>=50, marklist)
I map usage: map(lambda x: 9*x/5+32, temps)
I filter usage
marklist =
[("0233663" ,58),("0241713" ,82),("0321878" ,42) ,...]
numfirsts = len(filter(lambda (number ,mark):
mark >= 75,marklist ))
![Page 219: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/219.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
I lambda x, y: x+y
I reduce(lambda x, y: x+y,list)
I filter(lambda mark: mark>=50, marklist)
I map usage: map(lambda x: 9*x/5+32, temps)
I filter usage
marklist =
[("0233663" ,58),("0241713" ,82),("0321878" ,42) ,...]
numfirsts = len(filter(lambda (number ,mark):
mark >= 75,marklist ))
![Page 220: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/220.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
I lambda x, y: x+y
I reduce(lambda x, y: x+y,list)
I filter(lambda mark: mark>=50, marklist)
I map usage: map(lambda x: 9*x/5+32, temps)
I filter usage
marklist =
[("0233663" ,58),("0241713" ,82),("0321878" ,42) ,...]
numfirsts = len(filter(lambda (number ,mark):
mark >= 75,marklist ))
![Page 221: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/221.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
I lambda x, y: x+y
I reduce(lambda x, y: x+y,list)
I filter(lambda mark: mark>=50, marklist)
I map usage: map(lambda x: 9*x/5+32, temps)
I filter usage
marklist =
[("0233663" ,58),("0241713" ,82),("0321878" ,42) ,...]
numfirsts = len(filter(lambda (number ,mark):
mark >= 75,marklist ))
![Page 222: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/222.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
I lambda x, y: x+y
I reduce(lambda x, y: x+y,list)
I filter(lambda mark: mark>=50, marklist)
I map usage: map(lambda x: 9*x/5+32, temps)
I filter usage
marklist =
[("0233663" ,58),("0241713" ,82),("0321878" ,42) ,...]
numfirsts = len(filter(lambda (number ,mark):
mark >= 75,marklist ))
![Page 223: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/223.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
I lambda x, y: x+y
I reduce(lambda x, y: x+y,list)
I filter(lambda mark: mark>=50, marklist)
I map usage: map(lambda x: 9*x/5+32, temps)
I filter usage
marklist =
[("0233663" ,58),("0241713" ,82),("0321878" ,42) ,...]
numfirsts = len(filter(lambda (number ,mark):
mark >= 75,marklist ))
![Page 224: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/224.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
Functions as variables
if peaktime
rate= math.sqrt
else
rate= math.log
charge = rate(minutes)
def find_max(list ,checkfn ):
best = list [0]\\
for x in list [1:]
if checkfn(best ,x) best=x
find_max(list ,lambda x,y: x[0]<y[0])
find_max(list ,lambda x,y: x[1]<y[1])
![Page 225: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/225.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
Also supports the table-driven approach – elegant, easy tochange
def calfun (): ...
def inputproc (): ...
def calc ():.....
actiontable = {calibrate:calfun , read:inputproc , compute:calc}
allowable = actiontable.keys()
request = lower(input("enter choice: "))
if request in allowable
actiontable[request ]()
![Page 226: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/226.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
Note the difference between
x = f.readline ()
y = f.readline
I x will be a string – a value read in from a file
I y will be a function
I which you can call, e.g.
a=y()
b=y()
![Page 227: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/227.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
Note the difference between
x = f.readline ()
y = f.readline
I x will be a string – a value read in from a file
I y will be a function
I which you can call, e.g.
a=y()
b=y()
![Page 228: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/228.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
Note the difference between
x = f.readline ()
y = f.readline
I x will be a string – a value read in from a file
I y will be a function
I which you can call, e.g.
a=y()
b=y()
![Page 229: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/229.jpg)
Introduction to Programming using the Python Programming Language
More python
Functions in Python
Note the difference between
x = f.readline ()
y = f.readline
I x will be a string – a value read in from a file
I y will be a function
I which you can call, e.g.
a=y()
b=y()
![Page 230: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/230.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Case study: UPGMA phylogenetic tree
Phylogenetic tree:
I tree that describes the relationship of a set of objects(dna sequences)
I leaves of the tree are a known set of objects;
I internal nodes are (usually) unknown, putative ancestorobjects;
I structure of tree reflects the evolutionary history.
Problem: given a set of DNA sequences, infer theevolutionary history
I input: set of sequences
I output: phylogenetic tree
![Page 231: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/231.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Case study: UPGMA phylogenetic tree
Phylogenetic tree:
I tree that describes the relationship of a set of objects(dna sequences)
I leaves of the tree are a known set of objects;
I internal nodes are (usually) unknown, putative ancestorobjects;
I structure of tree reflects the evolutionary history.
Problem: given a set of DNA sequences, infer theevolutionary history
I input: set of sequences
I output: phylogenetic tree
![Page 232: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/232.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
UPGMA: unweighted pair group method using arithmeticmeans
I popular phylogenetic technique
I fast, but questions about qualityNB: case study on algorithm design, not phylogenetics
I based upon distance between sequencesI sequence distance implies evolutionary distanceI use distance to build tree
I different ways to compute
![Page 233: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/233.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
UPGMA: unweighted pair group method using arithmeticmeans
I popular phylogenetic technique
I fast, but questions about qualityNB: case study on algorithm design, not phylogenetics
I based upon distance between sequences
I sequence distance implies evolutionary distanceI use distance to build tree
I different ways to compute
![Page 234: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/234.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
UPGMA: unweighted pair group method using arithmeticmeans
I popular phylogenetic technique
I fast, but questions about qualityNB: case study on algorithm design, not phylogenetics
I based upon distance between sequencesI sequence distance implies evolutionary distance
I use distance to build tree
I different ways to compute
![Page 235: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/235.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
UPGMA: unweighted pair group method using arithmeticmeans
I popular phylogenetic technique
I fast, but questions about qualityNB: case study on algorithm design, not phylogenetics
I based upon distance between sequencesI sequence distance implies evolutionary distanceI use distance to build tree
I different ways to compute
![Page 236: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/236.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Hierarchically cluster
1
2
10
205
4
3
53 4
2
6 7
8 9
10
build tree: leaves are data points, internal nodes ancestors
![Page 237: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/237.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Hierarchically cluster
1
2
10
205
4
3
53 4
2
6
7
8 9
10
build tree: leaves are data points, internal nodes ancestors
![Page 238: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/238.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Hierarchically cluster
1
2
10
205
4
3
53 4
2
6 7
8 9
10
build tree: leaves are data points, internal nodes ancestors
![Page 239: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/239.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Hierarchically cluster
1
2
10
205
4
3
53 4
2
6 7
8
9
10
build tree: leaves are data points, internal nodes ancestors
![Page 240: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/240.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Hierarchically cluster
1
2
10
205
4
3
53 4
2
6 7
8 9
10
build tree: leaves are data points, internal nodes ancestors
![Page 241: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/241.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Hierarchically cluster
1
2
10
205
4
3
53 4
2
6 7
8 9
10
build tree: leaves are data points, internal nodes ancestors
![Page 242: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/242.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Basic algorithm
read n sequencess0, . . . , sn−1
compute distances between all sequences
k = nrepeat
choose unprocessed si , sj with smallest distanceadd new ‘sequence’ sk as parent of si , sj
compute distance of sk to all other sequencesk = k + 1
![Page 243: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/243.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Distance between two nodes is the average of the distancebetween leaves in the sub-tree rooted by the nodes.
d(x , y) =∑
x∈x ,y∈y d(x , y)/|x ||y |
![Page 244: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/244.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
2065
43210
0
1
2
3
4
14
5
7
6
430 1 2 4
20 24
30
8 18
26 48
7
5
25
* 2
2
25
34
*
6
25
4
28
*
*
22
4
16
7
8
8
*
*28
8
![Page 245: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/245.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
2065
43210
0
1
2
3
4
14
5
7
6
430 1 2 4
20 24
30
8 18
26 48
7
5
25
* 2
2
25
34
*
6
25
4
28
*
*
22
4
16
7
8
8
*
*28
8
![Page 246: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/246.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
2065
43210
0
1
2
3
4
14
5
7
6
430 1 2 4
20 24
30
8 18
26 48
7
5
25
* 2
2
25
34
*
6
25
4
28
*
*
22
4
16
7
8
8
*
*28
8
![Page 247: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/247.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
2065
43210
0
1
2
3
4
14
5
7
6
430 1 2 4
20 24
30
8 18
26 48
7
5
25
* 2
2
25
34
*
6
25
4
28
*
*
22
4
16
7
8
8
*
*28
8
![Page 248: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/248.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
2065
43210
0
1
2
3
4
14
5
7
6
430 1 2 4
20 24
30
8 18
26 48
7
5
25
* 2
2
25
34
*
6
25
4
28
*
*
22
4
16
7
8
8
*
*28
8
![Page 249: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/249.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
2065
43210
0
1
2
3
4
14
5
7
6
430 1 2 4
20 24
30
8 18
26 48
7
5
25
* 2
2
25
34
*
6
25
4
28
*
*
22
4
16
7
8
8
*
*28
8
![Page 250: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/250.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
2065
43210
0
1
2
3
4
14
5
7
6
430 1 2 4
20 24
30
8 18
26 48
7
5
25
* 2
2
25
34
*
6
25
4
28
*
*
22
4
16
7
8
8
*
*28
8
![Page 251: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/251.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
2065
43210
0
1
2
3
4
14
5
7
6
430 1 2 4
20 24
30
8 18
26 48
7
5
25
* 2
2
25
34
*
6
25
4
28
*
*
22
4
16
7
8
8
*
*28
8
![Page 252: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/252.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Data structures
conceptually: what data do we need to represent? what isthe relationship between data?
I sequences
I distances between sequences
I tree
I descendants
![Page 253: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/253.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Data structures
conceptually: what data do we need to represent? what isthe relationship between data?
I sequences
I distances between sequences
I tree
I descendants
![Page 254: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/254.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Data structures
conceptually: what data do we need to represent? what isthe relationship between data?
I sequences
I distances between sequences
I tree
I descendants
![Page 255: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/255.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Data structures
conceptually: what data do we need to represent? what isthe relationship between data?
I sequences
I distances between sequences
I tree
I descendants
![Page 256: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/256.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Data structures
conceptually: what data do we need to represent? what isthe relationship between data?
I sequences
I distances between sequences
I tree
I descendants
![Page 257: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/257.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
now how we do implement this . . . may need to makecompromises
I sequences
list of strings . . . easy
I distance between sequenceslist of lists of integers
0 10 1510 0 2015 20 0
[[0, 10, 15], [10, 0, 20], [15, 20, 0]]
can access individual elements:d [2][0] = 5
the only issue: entries must exist! need to set up matrixat beginning
![Page 258: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/258.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
now how we do implement this . . . may need to makecompromises
I sequenceslist of strings . . . easy
I distance between sequenceslist of lists of integers
0 10 1510 0 2015 20 0
[[0, 10, 15], [10, 0, 20], [15, 20, 0]]
can access individual elements:d [2][0] = 5
the only issue: entries must exist! need to set up matrixat beginning
![Page 259: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/259.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
now how we do implement this . . . may need to makecompromises
I sequenceslist of strings . . . easy
I distance between sequences
list of lists of integers0 10 15
10 0 2015 20 0
[[0, 10, 15], [10, 0, 20], [15, 20, 0]]
can access individual elements:d [2][0] = 5
the only issue: entries must exist! need to set up matrixat beginning
![Page 260: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/260.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
now how we do implement this . . . may need to makecompromises
I sequenceslist of strings . . . easy
I distance between sequenceslist of lists of integers
0 10 1510 0 2015 20 0
[[0, 10, 15], [10, 0, 20], [15, 20, 0]]
can access individual elements:d [2][0] = 5
the only issue: entries must exist! need to set up matrixat beginning
![Page 261: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/261.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
trees are a common data structure and there are many ways torepresent them.
formally a tree is a
I leaf; or
I interior node with one or more children trees
some data structures:
I parent array: for element we keep the index of its parentin the tree
I children array: for each element we keep a list or tuple ofits children
I dynamic structures: using python’s oo features – we’ll seethat later
![Page 262: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/262.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
trees are a common data structure and there are many ways torepresent them.formally a tree is a
I leaf; or
I interior node with one or more children trees
some data structures:
I parent array: for element we keep the index of its parentin the tree
I children array: for each element we keep a list or tuple ofits children
I dynamic structures: using python’s oo features – we’ll seethat later
![Page 263: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/263.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
trees are a common data structure and there are many ways torepresent them.formally a tree is a
I leaf; or
I interior node with one or more children trees
some data structures:
I parent array: for element we keep the index of its parentin the tree
I children array: for each element we keep a list or tuple ofits children
I dynamic structures: using python’s oo features – we’ll seethat later
![Page 264: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/264.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
trees are a common data structure and there are many ways torepresent them.formally a tree is a
I leaf; or
I interior node with one or more children trees
some data structures:
I parent array: for element we keep the index of its parentin the tree
I children array: for each element we keep a list or tuple ofits children
I dynamic structures: using python’s oo features – we’ll seethat later
![Page 265: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/265.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
trees are a common data structure and there are many ways torepresent them.formally a tree is a
I leaf; or
I interior node with one or more children trees
some data structures:
I parent array: for element we keep the index of its parentin the tree
I children array: for each element we keep a list or tuple ofits children
I dynamic structures: using python’s oo features – we’ll seethat later
![Page 266: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/266.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
trees are a common data structure and there are many ways torepresent them.formally a tree is a
I leaf; or
I interior node with one or more children trees
some data structures:
I parent array: for element we keep the index of its parentin the tree
I children array: for each element we keep a list or tuple ofits children
I dynamic structures: using python’s oo features – we’ll seethat later
![Page 267: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/267.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
trees are a common data structure and there are many ways torepresent them.formally a tree is a
I leaf; or
I interior node with one or more children trees
some data structures:
I parent array: for element we keep the index of its parentin the tree
I children array: for each element we keep a list or tuple ofits children
I dynamic structures: using python’s oo features – we’ll seethat later
![Page 268: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/268.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
trees are a common data structure and there are many ways torepresent them.formally a tree is a
I leaf; or
I interior node with one or more children trees
some data structures:
I parent array: for element we keep the index of its parentin the tree
I children array: for each element we keep a list or tuple ofits children
I dynamic structures: using python’s oo features – we’ll seethat later
![Page 269: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/269.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
leaf-descendants of each node:
I keep a list for each element – contains the leafdescendants
I this is redundant
has a sequence been processed:
I could keep a list of processed or unprocessed, or
I keep a boolean list: for each element we record whether ithas been processed
we choose latternote the choices to be made — need to make choices,trade off space, time, ease of programming
![Page 270: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/270.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
leaf-descendants of each node:
I keep a list for each element – contains the leafdescendants
I this is redundant
has a sequence been processed:
I could keep a list of processed or unprocessed, or
I keep a boolean list: for each element we record whether ithas been processed
we choose latternote the choices to be made — need to make choices,trade off space, time, ease of programming
![Page 271: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/271.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
leaf-descendants of each node:
I keep a list for each element – contains the leafdescendants
I this is redundant
has a sequence been processed:
I could keep a list of processed or unprocessed, or
I keep a boolean list: for each element we record whether ithas been processed
we choose latternote the choices to be made — need to make choices,trade off space, time, ease of programming
![Page 272: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/272.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
leaf-descendants of each node:
I keep a list for each element – contains the leafdescendants
I this is redundant
has a sequence been processed:
I could keep a list of processed or unprocessed, or
I keep a boolean list: for each element we record whether ithas been processed
we choose latternote the choices to be made — need to make choices,trade off space, time, ease of programming
![Page 273: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/273.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
leaf-descendants of each node:
I keep a list for each element – contains the leafdescendants
I this is redundant
has a sequence been processed:
I could keep a list of processed or unprocessed, or
I keep a boolean list: for each element we record whether ithas been processed
we choose latter
note the choices to be made — need to make choices,trade off space, time, ease of programming
![Page 274: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/274.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
leaf-descendants of each node:
I keep a list for each element – contains the leafdescendants
I this is redundant
has a sequence been processed:
I could keep a list of processed or unprocessed, or
I keep a boolean list: for each element we record whether ithas been processed
we choose latternote the choices to be made — need to make choices,trade off space, time, ease of programming
![Page 275: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/275.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Outline of program
I start with very abstract view
I focus on critical issuesthink about what is neededfocus on interface
what is the input:
I name of the file of sequences — pass as command lineparameter to the program,
what is the output?
I a nice picture of the tree.
![Page 276: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/276.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Outline of program
I start with very abstract view
I focus on critical issuesthink about what is neededfocus on interface
what is the input:
I name of the file of sequences — pass as command lineparameter to the program,
what is the output?
I a nice picture of the tree.
![Page 277: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/277.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Outline of program
I start with very abstract view
I focus on critical issuesthink about what is neededfocus on interface
what is the input:
I name of the file of sequences — pass as command lineparameter to the program,
what is the output?
I a nice picture of the tree.
![Page 278: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/278.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
High-level program
read(sequences)
dist=compute_distances(sequences)
tree=make_tree(sequences ,dist)
display(tree)
![Page 279: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/279.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
plan:
I implement the read sequences and test
I implement the make tree algorithm build a stub for thecompute distance
I difficult to test two things at once – where is the errorI difficult to make test cases with raw data. easier with
distance matrix.
I implement the compute distance & test
I draw pretty pictures
![Page 280: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/280.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
plan:
I implement the read sequences and test
I implement the make tree algorithm
build a stub for thecompute distance
I difficult to test two things at once – where is the errorI difficult to make test cases with raw data. easier with
distance matrix.
I implement the compute distance & test
I draw pretty pictures
![Page 281: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/281.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
plan:
I implement the read sequences and test
I implement the make tree algorithm build a stub for thecompute distance
I difficult to test two things at once – where is the errorI difficult to make test cases with raw data. easier with
distance matrix.
I implement the compute distance & test
I draw pretty pictures
![Page 282: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/282.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Some revisionWe know how to open a file, read from the file and close thefile.
I file not just something on disk – can be a more abstractobject
I e.g. unix command: wc u393.tex
cat u393.tex | wc
or ls -1 | wcI a pipe connects the output of one program to the input
of another.I in python, we can
I run a commandI open a pipe to that commandI treat the pipe as a file
I we’ll use the simplest case – reading from a pipe.
![Page 283: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/283.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Some revisionWe know how to open a file, read from the file and close thefile.
I file not just something on disk – can be a more abstractobject
I e.g. unix command: wc u393.tex
cat u393.tex | wc
or ls -1 | wcI a pipe connects the output of one program to the input
of another.I in python, we can
I run a commandI open a pipe to that commandI treat the pipe as a file
I we’ll use the simplest case – reading from a pipe.
![Page 284: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/284.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Some revisionWe know how to open a file, read from the file and close thefile.
I file not just something on disk – can be a more abstractobject
I e.g. unix command: wc u393.tex
cat u393.tex | wc
or ls -1 | wcI a pipe connects the output of one program to the input
of another.I in python, we can
I run a commandI open a pipe to that commandI treat the pipe as a file
I we’ll use the simplest case – reading from a pipe.
![Page 285: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/285.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Some revisionWe know how to open a file, read from the file and close thefile.
I file not just something on disk – can be a more abstractobject
I e.g. unix command: wc u393.tex
cat u393.tex | wc
or ls -1 | wcI a pipe connects the output of one program to the input
of another.
I in python, we canI run a commandI open a pipe to that commandI treat the pipe as a file
I we’ll use the simplest case – reading from a pipe.
![Page 286: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/286.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Some revisionWe know how to open a file, read from the file and close thefile.
I file not just something on disk – can be a more abstractobject
I e.g. unix command: wc u393.tex
cat u393.tex | wc
or ls -1 | wcI a pipe connects the output of one program to the input
of another.I in python, we can
I run a command
I open a pipe to that commandI treat the pipe as a file
I we’ll use the simplest case – reading from a pipe.
![Page 287: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/287.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Some revisionWe know how to open a file, read from the file and close thefile.
I file not just something on disk – can be a more abstractobject
I e.g. unix command: wc u393.tex
cat u393.tex | wc
or ls -1 | wcI a pipe connects the output of one program to the input
of another.I in python, we can
I run a commandI open a pipe to that command
I treat the pipe as a fileI we’ll use the simplest case – reading from a pipe.
![Page 288: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/288.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Some revisionWe know how to open a file, read from the file and close thefile.
I file not just something on disk – can be a more abstractobject
I e.g. unix command: wc u393.tex
cat u393.tex | wc
or ls -1 | wcI a pipe connects the output of one program to the input
of another.I in python, we can
I run a commandI open a pipe to that commandI treat the pipe as a file
I we’ll use the simplest case – reading from a pipe.
![Page 289: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/289.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
f = os.popen(cmdname)
I run the command given.
I the output of the command goes to a ‘virtual file’, whichwe refer to as f.
I this is treated in our program as a file.
for example:
dir = popen("ls -1")
count=0
for fname in dir: count=count+1
dir.close ()
![Page 290: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/290.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
I os.system(expression}
ask the shell to execute the given command.return value is the system success code.
I os.environ
python dictionary – can access/manipulate systemenvironment variables.
![Page 291: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/291.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
I os.system(expression}
ask the shell to execute the given command.return value is the system success code.
I os.environ
python dictionary – can access/manipulate systemenvironment variables.
![Page 292: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/292.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Implementation
reading in sequences: use the following assumptions
I read from a file — know the file name
I don’t know upfront how many sequences there’ll be
I each sequence will be on a line by itself
I at the end, when we try to read, we’ll get an empty string
think:
I what about alternatives/if the assumptions don’t hold
I what possible error conditions?
![Page 293: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/293.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Implementation
reading in sequences: use the following assumptions
I read from a file — know the file name
I don’t know upfront how many sequences there’ll be
I each sequence will be on a line by itself
I at the end, when we try to read, we’ll get an empty string
think:
I what about alternatives/if the assumptions don’t hold
I what possible error conditions?
![Page 294: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/294.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Assumptions lead to the use of a while loop.
def read_sequences(fname ):
f = open(fname)
seq = []
curr = f.readline ()
for line in f:
if line [0]=">":
seq.append(curr)
curr=line
else:
curr=curr+line
seq.append(curr)
f.close ()
return seq
after writing, can test!
![Page 295: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/295.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Making the tree
I do initialisationI descendantsI processed
I build treeI find smallest entry in distance matrixI update treeI update distance matrix
![Page 296: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/296.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
def make_tree(n,dist):
descendants = [[] for i in range (2*n-1) ]
for x in range(n): descendants[x] = [x]
children = [(-1,-1)] * (2*n-1)
toprocess = [true ]*(2*n-1) \pause
for x in range(n,2*n-1):
(i, j) = get_min(dist , processed ,x)
toprocess[i]=false
toprocess[j]=false
children[x]=(i,j)
descendants[x] = descendants[i]+ descendants[j]
for k in range(0,x)
if toprocess[k]:
dist[k][x] = dist[x][k] = \
compute_new_dist(k,x,dist ,descendants)
return children
![Page 297: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/297.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Finding the minimum. . .
I m = min (list)
I or . . .
minelt=list [0]
for x in list [1:]
if x<minelt: minelt=x
I or . . .
minelt= sys.maxsize
for x in list:
if x<minelt : minelt=x
![Page 298: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/298.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Finding the minimum. . .
I m = min (list)
I or . . .
minelt=list [0]
for x in list [1:]
if x<minelt: minelt=x
I or . . .
minelt= sys.maxsize
for x in list:
if x<minelt : minelt=x
![Page 299: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/299.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Must find indices of where the min element is, only look atunprocessed rows, cols
def get_min(dist , processed ,x):
the_i = the_j = 0
min = 10000000
for i in range(x-1):
if toprocess[i]:
for j in range(i+1, x):
if toprocess[j]:
if dist[i][j]<min:
min = dist[i][j]
the_i = i
the_j = j
return (the_i ,the_j)
![Page 300: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/300.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Must find indices of where the min element is, only look atunprocessed rows, cols
def get_min(dist , processed ,x):
the_i = the_j = 0
min = 10000000
for i in range(x-1):
if toprocess[i]:
for j in range(i+1, x):
if toprocess[j]:
if dist[i][j]<min:
min = dist[i][j]
the_i = i
the_j = j
return (the_i ,the_j)
![Page 301: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/301.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Computing a new distance
def compute_new_dist(x, y, dist , descendants ):
sum = 0
for a in descendants[x]:
for b in descendants[y]:
sum = sum + dist[a][b]
return sum/(len(descendants[x])* len(descendants[y]))
Only works if x , y not in ancestor/descendant relationship
I but not worth checking for since we never use thedistance if x , y are both in the same branch of the tree
![Page 302: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/302.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Stub Computing distances
Instead of reading the sequences, we read in distance matrix.All that the compute distance function does is extract out thedata
def compute_distance(sequence ):
n = len(sequence)
m = 2*n-1
dist = [[0 for i in range(m)] for j in range(m)]
for i in range(n):
snums = map(int , sequence[i].split ())
for j in range(n): dist[i][j] = dist[j][i] = snums[j]
return dist
Now can test . . .
![Page 303: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/303.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Exercise
I Copy the program upgma0.py.
I Make up test data for the program.
I Run the code on the test data.I NB: there are 2 deliberate bugs in the code
![Page 304: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/304.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Computing real distances
Several ways to compute biological distance. We shall use thed2 measure.
I Based upon word frequencies.For all combinations of words of length k , count the wordsin both sequences. Sum the square of the differences.
I d2(x , y) =∑|w |=6(dw (x)− dw (y)2
(Actually, a little more complicated)
We shall not implement d2 ourselves, but rather use aprogram that already does the computation.
![Page 305: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/305.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Computing real distances
Several ways to compute biological distance. We shall use thed2 measure.
I Based upon word frequencies.For all combinations of words of length k , count the wordsin both sequences. Sum the square of the differences.
I d2(x , y) =∑|w |=6(dw (x)− dw (y)2
(Actually, a little more complicated)
We shall not implement d2 ourselves, but rather use aprogram that already does the computation.
![Page 306: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/306.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Computing real distances
Several ways to compute biological distance. We shall use thed2 measure.
I Based upon word frequencies.For all combinations of words of length k , count the wordsin both sequences. Sum the square of the differences.
I d2(x , y) =∑|w |=6(dw (x)− dw (y)2
(Actually, a little more complicated)
We shall not implement d2 ourselves, but rather use aprogram that already does the computation.
![Page 307: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/307.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Computing real distances
Several ways to compute biological distance. We shall use thed2 measure.
I Based upon word frequencies.For all combinations of words of length k , count the wordsin both sequences. Sum the square of the differences.
I d2(x , y) =∑|w |=6(dw (x)− dw (y)2
(Actually, a little more complicated)
We shall not implement d2 ourselves, but rather use aprogram that already does the computation.
![Page 308: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/308.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
wcd: open source program that clusters sequences.
I Can be used to give d2 score with the right options.
I Correct form: wcd args -p filename i j
e.g. wcd -l 500 -p hiv-db.out 10 30
Computes the d2 score between sequences 10 and 30 ofthe file hiv-db.out
I Compares each region of length 500 of sequence 10, andeach region of length 500 of sequence 30 – compute d2
score.I Choose smallest score of all pairs.
I Result: two numbers separated by space printed tostandard outputFirst number is the d2 score of the two sequences.Second number is the d2 score of the first sequence andthe RC of the second.
![Page 309: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/309.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
wcd: open source program that clusters sequences.
I Can be used to give d2 score with the right options.
I Correct form: wcd args -p filename i j
e.g. wcd -l 500 -p hiv-db.out 10 30
Computes the d2 score between sequences 10 and 30 ofthe file hiv-db.out
I Compares each region of length 500 of sequence 10, andeach region of length 500 of sequence 30 – compute d2
score.I Choose smallest score of all pairs.
I Result: two numbers separated by space printed tostandard outputFirst number is the d2 score of the two sequences.Second number is the d2 score of the first sequence andthe RC of the second.
![Page 310: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/310.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
wcd: open source program that clusters sequences.
I Can be used to give d2 score with the right options.
I Correct form: wcd args -p filename i j
e.g. wcd -l 500 -p hiv-db.out 10 30
Computes the d2 score between sequences 10 and 30 ofthe file hiv-db.out
I Compares each region of length 500 of sequence 10, andeach region of length 500 of sequence 30 – compute d2
score.I Choose smallest score of all pairs.
I Result: two numbers separated by space printed tostandard outputFirst number is the d2 score of the two sequences.Second number is the d2 score of the first sequence andthe RC of the second.
![Page 311: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/311.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
wcd: open source program that clusters sequences.
I Can be used to give d2 score with the right options.
I Correct form: wcd args -p filename i j
e.g. wcd -l 500 -p hiv-db.out 10 30
Computes the d2 score between sequences 10 and 30 ofthe file hiv-db.out
I Compares each region of length 500 of sequence 10, andeach region of length 500 of sequence 30 – compute d2
score.I Choose smallest score of all pairs.
I Result: two numbers separated by space printed tostandard outputFirst number is the d2 score of the two sequences.Second number is the d2 score of the first sequence andthe RC of the second.
![Page 312: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/312.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
def compute_distance(sequence ):
n = len(sequence ); m = 2*n-1
dist = [[0 for i in range(m)] for j in range(m)]
fname = "/tmp/seqs"+environ["USER"]
instruction = "wcd -l 1000 -p "+fname+" 0 1"
for i in range(n-1):
for j in range(i+1,n):
seqf = open(fname ,"w")
seqf.write("> \n"+sequence[i]+"> \n"+sequence[j]+"\n")
seqf.close()
wfile = popen(instruction)
ans = wfile.readline (); res = ans.split ()
dist[i][j] = dist[j][i]= int(res [0])
wfile.close ()
return dist
![Page 313: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/313.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
I What are the performance characteristics?
I What are the alternatives?
I Why do we use the environment variable?
I What happens if the output file exists already?I if we have write permissions?I if we don’t?
![Page 314: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/314.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
I What are the performance characteristics?
I What are the alternatives?
I Why do we use the environment variable?
I What happens if the output file exists already?I if we have write permissions?I if we don’t?
![Page 315: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/315.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Drawing the tree . . .
(Actually about how to do tree traversals)
Drawing trees is a little tricky . . . so let’s use an externalpackage that does drawing:
I convert our tree representation into Newick format(used by a number of phylogenetic packages)
I save the representation to an external file
I run an external tree drawing program — in our case aprogram called tv.
The conversion is an example of tree traversal — process theelements in the tree.
![Page 316: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/316.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Drawing the tree . . .
(Actually about how to do tree traversals)Drawing trees is a little tricky . . . so let’s use an externalpackage that does drawing:
I convert our tree representation into Newick format(used by a number of phylogenetic packages)
I save the representation to an external file
I run an external tree drawing program — in our case aprogram called tv.
The conversion is an example of tree traversal — process theelements in the tree.
![Page 317: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/317.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Drawing the tree . . .
(Actually about how to do tree traversals)Drawing trees is a little tricky . . . so let’s use an externalpackage that does drawing:
I convert our tree representation into Newick format(used by a number of phylogenetic packages)
I save the representation to an external file
I run an external tree drawing program — in our case aprogram called tv.
The conversion is an example of tree traversal — process theelements in the tree.
![Page 318: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/318.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Drawing the tree . . .
(Actually about how to do tree traversals)Drawing trees is a little tricky . . . so let’s use an externalpackage that does drawing:
I convert our tree representation into Newick format(used by a number of phylogenetic packages)
I save the representation to an external file
I run an external tree drawing program — in our case aprogram called tv.
The conversion is an example of tree traversal — process theelements in the tree.
![Page 319: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/319.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Drawing the tree . . .
(Actually about how to do tree traversals)Drawing trees is a little tricky . . . so let’s use an externalpackage that does drawing:
I convert our tree representation into Newick format(used by a number of phylogenetic packages)
I save the representation to an external file
I run an external tree drawing program — in our case aprogram called tv.
The conversion is an example of tree traversal — process theelements in the tree.
![Page 320: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/320.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Recursion as a programming technique
Traversal can be done
I in-order
I pre-order
I post-order
General format of in-order traversal
def inorderTraversal(current)
inorderTraversal(left)
process(current)
inorderTraversal(right)
![Page 321: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/321.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Recursion as a programming technique
Traversal can be done
I in-order
I pre-order
I post-order
General format of in-order traversal
def inorderTraversal(current)
inorderTraversal(left)
process(current)
inorderTraversal(right)
![Page 322: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/322.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Example — find the leaf-descendants of a node
def leaf_descendants(node)
if node is leaf:
return [ID of node]
else:
leftdesc = leaf_descendants(left child of node)
rightdesc = leaf_descendants(right child of node)
return leftdesc+rightdesc
Typical example of recursive algorithm:
I but not completely circular: must be a base case!
![Page 323: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/323.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
def leaf_descendants(tree , curr):
(left ,right) = tree[curr]
if left == -1 and right == -1):
return [curr]
else:
return leaf_descendants(tree ,left )+\
leaf_descendants(tree ,right)
![Page 324: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/324.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
The Newick format
Present the tree as a hierarchically nested list:
I (0,1)
I ((0,1),(2,3))
I (0, (1, (2, 3)))
I ((0,1), (2, ((((3,4),(5,6)),(7,8)),9)))
Also put branch lengths:
I (0:10, 1:10)
I (0:10, (1:7,2:7):3)
I (0:10, (1:7,2:7):3)
I ((0:4,1:4):6, (2:7, (3:5, 4:5):2):3)
![Page 325: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/325.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Algorithm to convert child list into Newick listBranch length:
I height[x]:I for a leaf: 0I for an internal node with children u, v ,
dist(u, v)
2
I Change our make_tree so that we compute height
Conversion: pre-order traversal. At each step
I Convert our left sub-tree to Newick format
I Print distance to left sub-tree
I Convert our right sub-tree to Newick format
I Print distance to right sub-tree
![Page 326: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/326.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
Doing the conversion:
def convert(curr ,children ,height ):
(left ,right) = children[curr]
if left == -1:
ans = str(curr)
else
left_tree = convert(left ,children ,height)
right_tree = convert(right ,children ,height)
left_blen = height[curr]-height[left]
right_blen = height[curr]-height[right]
ans = "("+left_tree+":"+str(left_blen )+\
","+right_tree+":"+str(right_blen )+")"
return ans
![Page 327: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/327.jpg)
Introduction to Programming using the Python Programming Language
Case study : UPGMA phylogenetic tree
The Whole Caboodle
sequences = read_sequences(sys.argv [1])
dist = compute_distance(sequences)
(children ,height) = make_tree(len(sequences),dist)
tree_n = convert(children.length -1,children ,height)
fname = "/tmp/"+environ["USER"]+"tre"
outfile = open(fname ,"w")
outfile.write(tree_n+";")
outfile.close ();
system("tv "+fname)
![Page 328: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/328.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Object orientation
OO Design philosophy:
I Model the ‘world’ as a set of objects
I More precisely as classes of objectsI objects are instances of classesI classes describe what objects are, what they can do
I Class should define for each object its membersI what type of data is stored (data members)I what actions can be performed on the object (functions
members or methods
I Classes can be related through class hierarchy
![Page 329: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/329.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Object orientation
OO Design philosophy:
I Model the ‘world’ as a set of objects
I More precisely as classes of objects
I objects are instances of classesI classes describe what objects are, what they can do
I Class should define for each object its membersI what type of data is stored (data members)I what actions can be performed on the object (functions
members or methods
I Classes can be related through class hierarchy
![Page 330: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/330.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Object orientation
OO Design philosophy:
I Model the ‘world’ as a set of objects
I More precisely as classes of objectsI objects are instances of classesI classes describe what objects are, what they can do
I Class should define for each object its membersI what type of data is stored (data members)I what actions can be performed on the object (functions
members or methods
I Classes can be related through class hierarchy
![Page 331: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/331.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Object orientation
OO Design philosophy:
I Model the ‘world’ as a set of objects
I More precisely as classes of objectsI objects are instances of classesI classes describe what objects are, what they can do
I Class should define for each object its membersI what type of data is stored (data members)I what actions can be performed on the object (functions
members or methods
I Classes can be related through class hierarchy
![Page 332: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/332.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Benefit 1 of OO: Modularity and abstraction
Supports the divide-and-conquer approach.
I Given a problem, decide what the key classes are.
I For each class, decide its data members and methods
I Principle (not always followed)
I set of method declarations are the public interfaceDescribe the what. All that a user of the class needs toknow.
I The how is the data members and the implementation ofthe methods
Principle of abstraction.
![Page 333: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/333.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Benefit 1 of OO: Modularity and abstraction
Supports the divide-and-conquer approach.
I Given a problem, decide what the key classes are.
I For each class, decide its data members and methods
I Principle (not always followed)
I set of method declarations are the public interfaceDescribe the what. All that a user of the class needs toknow.
I The how is the data members and the implementation ofthe methods
Principle of abstraction.
![Page 334: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/334.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Benefit 1 of OO: Modularity and abstraction
Supports the divide-and-conquer approach.
I Given a problem, decide what the key classes are.
I For each class, decide its data members and methods
I Principle (not always followed)
I set of method declarations are the public interfaceDescribe the what. All that a user of the class needs toknow.
I The how is the data members and the implementation ofthe methods
Principle of abstraction.
![Page 335: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/335.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Benefit 1 of OO: Modularity and abstraction
Supports the divide-and-conquer approach.
I Given a problem, decide what the key classes are.
I For each class, decide its data members and methods
I Principle (not always followed)
I set of method declarations are the public interfaceDescribe the what. All that a user of the class needs toknow.
I The how is the data members and the implementation ofthe methods
Principle of abstraction.
![Page 336: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/336.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Benefit 1 of OO: Modularity and abstraction
Supports the divide-and-conquer approach.
I Given a problem, decide what the key classes are.
I For each class, decide its data members and methods
I Principle (not always followed)
I set of method declarations are the public interfaceDescribe the what. All that a user of the class needs toknow.
I The how is the data members and the implementation ofthe methods
Principle of abstraction.
![Page 337: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/337.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Benefit 1 of OO: Modularity and abstraction
Supports the divide-and-conquer approach.
I Given a problem, decide what the key classes are.
I For each class, decide its data members and methods
I Principle (not always followed)
I set of method declarations are the public interfaceDescribe the what. All that a user of the class needs toknow.
I The how is the data members and the implementation ofthe methods
Principle of abstraction.
![Page 338: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/338.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Benefit 2 of OO: Inheritance
Classes can be organised in class hierarchies(super-class/sub-class)
I Super-class is more abstract – carries information,behaviour common to sub-classes
Example: Animal Class
I Mammal classI Primate classI Cat class
I Fish classI big fish classI goldfish class
![Page 339: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/339.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Benefit 2 of OO: Inheritance
Classes can be organised in class hierarchies(super-class/sub-class)
I Super-class is more abstract – carries information,behaviour common to sub-classes
Example: Animal Class
I Mammal classI Primate classI Cat class
I Fish classI big fish classI goldfish class
![Page 340: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/340.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Sub-classes inherits all data/behaviour from its super-classes.
I can add new members/behaviour
I can redefine members tooif you access a member of an object, python startssearches the class hierarchy from the bottom
Benefits of inheritance
I code re-use
I promotes abstraction
I mainly seen when have large programs, or code re-use
![Page 341: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/341.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Sub-classes inherits all data/behaviour from its super-classes.
I can add new members/behaviour
I can redefine members tooif you access a member of an object, python startssearches the class hierarchy from the bottom
Benefits of inheritance
I code re-use
I promotes abstraction
I mainly seen when have large programs, or code re-use
![Page 342: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/342.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Sub-classes inherits all data/behaviour from its super-classes.
I can add new members/behaviour
I can redefine members tooif you access a member of an object, python startssearches the class hierarchy from the bottom
Benefits of inheritance
I code re-use
I promotes abstraction
I mainly seen when have large programs, or code re-use
![Page 343: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/343.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Scope and existence
Scope and Existence
General issue in Python (and any programming language):
I ScopeWhere an identifier can be seen.Usually syntactic issue — determined at compile time.Should always be the same– not in python.
I ExistenceWhen a variable/object exists.Determined at run-time – dynamic, often different forevery run
![Page 344: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/344.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Scope and existence
Scope and Existence
General issue in Python (and any programming language):
I ScopeWhere an identifier can be seen.Usually syntactic issue — determined at compile time.Should always be the same– not in python.
I ExistenceWhen a variable/object exists.Determined at run-time – dynamic, often different forevery run
![Page 345: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/345.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Scope and existence
Scope & name spaces. . .
Very simplified rule:
I Variable can be accessed if it’s in a current namespace.
I Name space is a collection of variables.
I Name spaces can be determined staticallyNested: e.g. functions inside functionsScope: textual region where a namespace exists.
I The contents of a namespace is determined dynamically.Not common in programming languages.
Also be aware of the Python reference model: variables forcomplex types do not contain the variable itself, but containreferences to the variable.
![Page 346: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/346.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
d = 10
x = 20
def fun1(a, b):
a = a+x
c = 20; m = 30
def fun2(x,a):
c = 30
x = 10
x = x + 30
d = 2*x+d
m = 100; n = 200
![Page 347: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/347.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
d = 10
x = 20
def fun1(a, b):
a = a+x
def fun2(b):
s = a+3; t = s+b
return t
c = 20+fun2(a+10)
m = 30
def fun2(x,a):
c = 30
x = 10
x = x + 30; d = 2*x+d
![Page 348: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/348.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
Object-oriented language supports object-oriented design.
In Python:
I use class name like a function to instantiate or create anobjectd = Animal()
New animal object is created. The variable name is d
I use dot notation to refer to membersd.setName("Samson")
d.height = 200
x=d.getAge()
x=changeMass(delta)
![Page 349: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/349.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
Object-oriented language supports object-oriented design.In Python:
I use class name like a function to instantiate or create anobjectd = Animal()
New animal object is created. The variable name is d
I use dot notation to refer to membersd.setName("Samson")
d.height = 200
x=d.getAge()
x=changeMass(delta)
![Page 350: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/350.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
Object-oriented language supports object-oriented design.In Python:
I use class name like a function to instantiate or create anobjectd = Animal()
New animal object is created. The variable name is d
I use dot notation to refer to membersd.setName("Samson")
d.height = 200
x=d.getAge()
x=changeMass(delta)
![Page 351: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/351.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
Principle of information hiding
Good idea not to access data members directly –access through methods.
![Page 352: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/352.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
Class implementation
In the class:
I methods are declared — first parameter of each methodis the actual object
I there can be other statements
I create data items (but not necessary in Python)I initialising codeI other execution (but rare)
![Page 353: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/353.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
Class implementation
In the class:
I methods are declared — first parameter of each methodis the actual object
I there can be other statements
I create data items (but not necessary in Python)I initialising codeI other execution (but rare)
![Page 354: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/354.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
class Sequence:
def setSeq(self , newseq ):
self.seq = newseq
def setID(self ,id):
self.id = id
def showSeq(self):
print ">"+self.id+"\n"+self.seq
def getID(self): return self.id
![Page 355: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/355.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
I Class is a generic description for all objects
I NB: parameter self refers to actual object being actedupon
I The use of the word self is convention
I NB: Different to C++, Java where this is passedimplicitly. In Python, self must be explicitly include.
![Page 356: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/356.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
How used:
s1 = Sequence ()
s1.setSeq("ACCATTG")
s1.setID("A766671")
s1.showSeq ()
s2 = Sequence ()
Can think of the dot-notation as a short-hand. The followingtwo are equivalent:
I s1.showSeq()
I Sequence.showSeq(s1)
![Page 357: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/357.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
Initialiser method: __init__ is a special method that will becalled automatically when an object is instantiated.
I can give it parameters
def __init__(self ,id, newseq ):
self.data = newseq
self.id = id
Called thus:
s1=Sequence("A23321","CCTTGGTTA")
![Page 358: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/358.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
Can have some data members which belong to the class ratherthan the object
I static data members
Example: suppose we want to keep track of how manysequences we have created.
class Sequence:
numseqs =0
def __init__(self ,id, newseq ):
self.data = newseq
self.id = id
self.serialnum = Sequence.numseqs
Sequence.numseqs = Sequence.numseqs +1
Referred to through the class name
![Page 359: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/359.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
The Python reference model
Can have some data members which belong to the class ratherthan the object
I static data members
Example: suppose we want to keep track of how manysequences we have created.
class Sequence:
numseqs =0
def __init__(self ,id, newseq ):
self.data = newseq
self.id = id
self.serialnum = Sequence.numseqs
Sequence.numseqs = Sequence.numseqs +1
Referred to through the class name
![Page 360: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/360.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Sub-classes
Declaring sub-classesIndicate which sub-classes are inherited from when declared.
class NucleotideSeq(Sequence):
def count_base(self,base):
....
def setID(self,id):
self.id = "N"+id
Objects of class NucleotideSeq inherit from Sequence. Allmembers are inherited, but –
I new method: count_base
I redefined method setID
![Page 361: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/361.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Sub-classes
Python has dynamic dispatch: assume we have a ProteinSeqclass in which setID is defined:
s1 = Sequence("1","GGJHKPOHHH")
s2 = ProteinSeq("2","RARRTTT")
s3 = NucleotideSeq("3","ACTG")
seqs = [s1,s2,s3]
for s in seqs:
s.setID(s.getID()+"db_NBN")
I same getID is called each time – defined in Sequence
I different setID is called each time, depending on class
![Page 362: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/362.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Classes for non-OO purposes
Uses of classes for non OO purposesClasses can be used, esp in simple programs for aggregatingdata
I cf. records/structs in Pascal, C
If a number of variables logically belong to each other, or areassociated with each other, can bundle them up into oneobject:
I conceptually cleanerI shows relationship of componentsI Pragmatically easier (e.g. in passing of parameters)
Example:I list of of students, each with name, number, mark, etc.I have one array, rather than 5I each item is an object that records the information
![Page 363: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/363.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Classes for non-OO purposes
class TreeNode:
pass
for i in range(n):
newelt = TreeNode()
newelt.children = (-1,-1)
newelt.height = 0
newelt.processed = False
tree.append(newelt)
I pass is just a ‘do-nothing’
I usually at least have an initialiser
![Page 364: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/364.jpg)
Introduction to Programming using the Python Programming Language
Object Orientation
Classes for non-OO purposes
But why not use some OO:
class TreeNode:
def __init__(self,left,right):
self.children = (left,right)
self.height = 0
self.processed=False
def setHeight(self,height):
self.height = height
for i in range(n):
newelt = TreeNode(-1,-1)
tree.append(newelt)
newelt = TreeNode(0,1)
tree.append(newelt)
![Page 365: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/365.jpg)
Introduction to Programming using the Python Programming Language
Exceptions
Exceptions
An exception is an event or operation that disrupts the normalflow of the program.
I Commonly associated with something going wrong
Examples:
I Dividing by zero: x=4/0
Gives a ZeroDivisionError
I Opening a file for reading that doesn’t exist\f=open("utopia")IOError
Exceptions raised when detected (hardware or software).
I it must be caught, or the program terminates
![Page 366: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/366.jpg)
Introduction to Programming using the Python Programming Language
Exceptions
Example use 1:
I Section of code which does lots of I/O.
I If problem, want to detect, print error message, terminate
I To check after each line, makes the code klunky, hideslogic;
I Protect the whole section with try
![Page 367: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/367.jpg)
Introduction to Programming using the Python Programming Language
Exceptions
try:
op1
op2
op3
except IOError as err:
print("I/O error: %s\n",err)
![Page 368: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/368.jpg)
Introduction to Programming using the Python Programming Language
Exceptions
Example use 2:
I Method A calls method B calls method C calls method D.
I C detects a problem: What do do?
I Exit program? may be too extreme
I Write error handling code in D, C, B, A – lot’s of work
I Use exceptions
![Page 369: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/369.jpg)
Introduction to Programming using the Python Programming Language
Exceptions
Example use 2:
I Method A calls method B calls method C calls method D.
I C detects a problem: What do do?
I Exit program? may be too extreme
I Write error handling code in D, C, B, A – lot’s of work
I Use exceptions
![Page 370: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/370.jpg)
Introduction to Programming using the Python Programming Language
Exceptions
Example use 2:
I Method A calls method B calls method C calls method D.
I C detects a problem: What do do?
I Exit program? may be too extreme
I Write error handling code in D, C, B, A – lot’s of work
I Use exceptions
![Page 371: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/371.jpg)
Introduction to Programming using the Python Programming Language
Exceptions
Example use 2:
I Method A calls method B calls method C calls method D.
I C detects a problem: What do do?
I Exit program? may be too extreme
I Write error handling code in D, C, B, A – lot’s of work
I Use exceptions
![Page 372: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/372.jpg)
Introduction to Programming using the Python Programming Language
Exceptions
def read_sequence () : .....
def read_file () : ....
def read_directory () : ...
def process_data () :
for dir in dirs:
try:
read_directory(dir)
except:
IOError as err:
print("I/O error: %s\n",err)
![Page 373: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/373.jpg)
Introduction to Programming using the Python Programming Language
Exceptions
Creating your own exceptions
class IllegalData(Exception):
def __init__(self, val):
self.val=val
try:
do_ops
if (problem): raise IllegalData(v)
....
except IllegalData, val:
....
![Page 374: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/374.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Case study: DNA layout
Small case study to show
I use of OO
I use of exceptions
I use of new data structures
Problem: Given, a set of short DNA sequences that come froma long sequence:
I find the layout of the sequences
![Page 375: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/375.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Given the fragments with an overlap of 3
A00 cacgcatgt
A01 cccgacggg
A02 tgtttggtg
A03 aaatcgccc
A04 gtgacaccc
A05 ccctatccac
The originating sequence is
I aaatcgccc︸ ︷︷ ︸3
tatccac︸ ︷︷ ︸5
gcatgt︸ ︷︷ ︸0
ttggtg︸ ︷︷ ︸2
acaccc︸ ︷︷ ︸4
gacggg︸ ︷︷ ︸1
![Page 376: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/376.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Given the fragments with an overlap of 3
A00 cacgcatgt
A01 cccgacggg
A02 tgtttggtg
A03 aaatcgccc
A04 gtgacaccc
A05 ccctatccac
The originating sequence is
I aaatcgccc︸ ︷︷ ︸3
tatccac︸ ︷︷ ︸5
gcatgt︸ ︷︷ ︸0
ttggtg︸ ︷︷ ︸2
acaccc︸ ︷︷ ︸4
gacggg︸ ︷︷ ︸1
![Page 377: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/377.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Real world much more complex
I longer overlapping areas
I approximate match, not exact match, varying length
I errors!
I but simple problem gives a flavour
For an overlap of 3, there are 64 possible overlaps:
I call them connections
![Page 378: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/378.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Real world much more complex
I longer overlapping areas
I approximate match, not exact match, varying length
I errors!
I but simple problem gives a flavour
For an overlap of 3, there are 64 possible overlaps:
I call them connections
![Page 379: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/379.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Some background — graph theory
Graphs are very useful structures — good abstractions formany real world problems:
I lots of bioinformatic problems cast as graph problems
Definitions:
I A graph is a set of vertices (nodes) and edges
I Graphically represented by blobs and lines
I Edges can be directed or undirected.Use lines / lines with arrows to represent
I degree of a vertex number of edges going from a vertex
I in-degree of a vertex is the number of edges coming intoa vertex
![Page 380: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/380.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Some background — graph theory
Graphs are very useful structures — good abstractions formany real world problems:
I lots of bioinformatic problems cast as graph problems
Definitions:
I A graph is a set of vertices (nodes) and edges
I Graphically represented by blobs and lines
I Edges can be directed or undirected.Use lines / lines with arrows to represent
I degree of a vertex number of edges going from a vertex
I in-degree of a vertex is the number of edges coming intoa vertex
![Page 381: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/381.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Some background — graph theory
Graphs are very useful structures — good abstractions formany real world problems:
I lots of bioinformatic problems cast as graph problems
Definitions:
I A graph is a set of vertices (nodes) and edges
I Graphically represented by blobs and lines
I Edges can be directed or undirected.Use lines / lines with arrows to represent
I degree of a vertex number of edges going from a vertex
I in-degree of a vertex is the number of edges coming intoa vertex
![Page 382: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/382.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Some background — graph theory
Graphs are very useful structures — good abstractions formany real world problems:
I lots of bioinformatic problems cast as graph problems
Definitions:
I A graph is a set of vertices (nodes) and edges
I Graphically represented by blobs and lines
I Edges can be directed or undirected.Use lines / lines with arrows to represent
I degree of a vertex number of edges going from a vertex
I in-degree of a vertex is the number of edges coming intoa vertex
![Page 383: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/383.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Path between x and y is a sequence of adjacent edges goingfrom x to y
Computer representation of graph:
I list of vertices (number them from 0 . . . )
I edges – many ways – we use an adjacency list:
I for each vertex, have a list of the edges that leave thevertex
I maybe other auxiliary information
Graph is a complex object — ideal for an OO representation.
![Page 384: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/384.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Path between x and y is a sequence of adjacent edges goingfrom x to y
Computer representation of graph:
I list of vertices (number them from 0 . . . )
I edges – many ways – we use an adjacency list:
I for each vertex, have a list of the edges that leave thevertex
I maybe other auxiliary information
Graph is a complex object — ideal for an OO representation.
![Page 385: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/385.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Path between x and y is a sequence of adjacent edges goingfrom x to y
Computer representation of graph:
I list of vertices (number them from 0 . . . )
I edges – many ways – we use an adjacency list:
I for each vertex, have a list of the edges that leave thevertex
I maybe other auxiliary information
Graph is a complex object — ideal for an OO representation.
![Page 386: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/386.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
DNA layout as a graph problem
Build a graph as follows:
I The connections are vertices.e.g. AAA, AAC, AAT, AAG, ACA, . . .
I For each DNA fragment, create a directed edge
I starts at the left-hand connectionI finishes at the right-hand connecttion
e.g. for ATATTGTACCCTAGAAGCG: edge (ATA, GCG)
![Page 387: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/387.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
DNA layout as a graph problem
Build a graph as follows:
I The connections are vertices.e.g. AAA, AAC, AAT, AAG, ACA, . . .
I For each DNA fragment, create a directed edge
I starts at the left-hand connectionI finishes at the right-hand connecttion
e.g. for ATATTGTACCCTAGAAGCG: edge (ATA, GCG)
![Page 388: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/388.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
DNA layout as a graph problem
Build a graph as follows:
I The connections are vertices.e.g. AAA, AAC, AAT, AAG, ACA, . . .
I For each DNA fragment, create a directed edge
I starts at the left-hand connectionI finishes at the right-hand connecttion
e.g. for ATATTGTACCCTAGAAGCG: edge (ATA, GCG)
![Page 389: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/389.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
AAA
GTG
CAC TGT
GAT
CCC
GGG
GTA
GAG GCG GTG
GTT
AAATCGCCCTGTTTGGTGCCCGACGGGCCCTATCAC
GTGACACCCCACGCATGT
![Page 390: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/390.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
AAA
GTG
CAC TGT
GAT
CCC
GGG
GTA
GAG GCG GTG
GTT
AAATCGCCC
TGTTTGGTGCCCGACGGGCCCTATCAC
GTGACACCCCACGCATGT
![Page 391: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/391.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
AAA
GTG
CAC TGT
GAT
CCC
GGG
GTA
GAG GCG GTG
GTT
AAATCGCCCTGTTTGGTG
CCCGACGGGCCCTATCAC
GTGACACCCCACGCATGT
![Page 392: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/392.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
AAA
GTG
CAC TGT
GAT
CCC
GGG
GTA
GAG GCG GTG
GTT
AAATCGCCCTGTTTGGTGCCCGACGGG
CCCTATCAC
GTGACACCCCACGCATGT
![Page 393: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/393.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
AAA
GTG
CAC TGT
GAT
CCC
GGG
GTA
GAG GCG GTG
GTT
AAATCGCCCTGTTTGGTGCCCGACGGGCCCTATCAC
GTGACACCCCACGCATGT
![Page 394: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/394.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
AAA
GTG
CAC TGT
GAT
CCC
GGG
GTA
GAG GCG GTG
GTT
AAATCGCCCTGTTTGGTGCCCGACGGGCCCTATCAC
GTGACACCCCACGCATGT
![Page 395: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/395.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
Solution to the problem is an Euler path:
I Path in the graph that goes through each edge exactlyonce.
I Exists ifI all vertices have same in-degree as out-degree;
in which case any vertex could be the start; or
I if one vertex has in-degree 1 greater than out-degree andone vertex has out-degree 1 greater than in-degreeStart is vertex with a vertex with out-degree 1 greaterin-degree
![Page 396: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/396.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
Solution to the problem is an Euler path:
I Path in the graph that goes through each edge exactlyonce.
I Exists ifI all vertices have same in-degree as out-degree;
in which case any vertex could be the start; orI if one vertex has in-degree 1 greater than out-degree and
one vertex has out-degree 1 greater than in-degreeStart is vertex with a vertex with out-degree 1 greaterin-degree
![Page 397: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/397.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
Euler algorithm:
I If you follow an edge mark it.
I Pick start vertex.
I Repeat: follow any umarked edge out and go to the nextvertex.Mark the edge as processed.
I Stop when you can go no further.
I If the path created contains all the edges in the graph,you can stop.
I Otherwise, repeat until all edges processedI there must be a vertex in the path with an unprocessed
outgoing edgeI find a path from that pointI insert into the path found already
![Page 398: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/398.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
Euler algorithm:
I If you follow an edge mark it.
I Pick start vertex.
I Repeat: follow any umarked edge out and go to the nextvertex.Mark the edge as processed.
I Stop when you can go no further.
I If the path created contains all the edges in the graph,you can stop.
I Otherwise, repeat until all edges processedI there must be a vertex in the path with an unprocessed
outgoing edgeI find a path from that pointI insert into the path found already
![Page 399: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/399.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
DNA layout as a graph problem
Euler algorithm:
I If you follow an edge mark it.
I Pick start vertex.
I Repeat: follow any umarked edge out and go to the nextvertex.Mark the edge as processed.
I Stop when you can go no further.
I If the path created contains all the edges in the graph,you can stop.
I Otherwise, repeat until all edges processedI there must be a vertex in the path with an unprocessed
outgoing edgeI find a path from that pointI insert into the path found already
![Page 400: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/400.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Python solution
Python solution
I Create a sequence class
I Create a graph class (general) — this can be used infuture applications.
I Create a SeqGraph class for representing sequence graphs
I Put everything together.
![Page 401: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/401.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Python solution
class FileFinished(Exception):
pass
class Sequence:
def __init__(self,accid,seq,quality):
self.accid = accid
self.data = seq
self.quality = quality
def getAccID(self):
return self.accid
def getSeq(self):
return self.data
def readSeq(inpfile):
idline = inpfile.readline()
if len(idline)==0: raise FileFinished
match = re.search("> (\w+) *",idline)
if (match == None):
raise Exception("No match found on line "+idline)
acc = match.group(1)
txt = inpfile.readline()
return Sequence(acc,txt.rstrip(),100)
![Page 402: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/402.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Python solution
class Graph:
def __init__(self,n,directed=False):
self.numedges = 0
self.numv = n
self.adj = {}
self.indeg = {}
self.directed = directed
def vertexOf(self,edge):
# return the dest vertex of the edge
# default is we just have the vertex
return edge
![Page 403: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/403.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Python solution
def numEdgesOf(self):
return self.numedges
def addEdge(self,i,edge):
j = self.vertexOf(edge)
if not self.adj.has_key(i): self.adj[i] = []
if not self.indeg.has_key(j): self.indeg[j] = 0
self.adj[i].append(edge)
self.indeg[j] = self.indeg[j]+1
self.numedges = self.numedges+1
def isEdge(self,i,j):
return self.degree(i)>0 and (j in map(vertexOf,self.adj[i]))
![Page 404: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/404.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Python solution
def degree(self,i):
if not self.adj.has_key(i):
return 0
else:
return len(self.adj[i])
def indegreeOf(self,i):
if not self.indeg.has_key(i): return 0
else: return self.indeg[i]
def vertexList(self):
return self.adj.keys()
![Page 405: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/405.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Python solution
Now we derive the SeqGraph sub-class
class SeqGraph(Graph):
def __init__(self,n):
Graph.__init__(self,n,True)
self.vertexInfo = []
def addEdge(self,i,j,seq):
Graph.addEdge(self,i,(j,seq))
def vertexOf(self,edge):
(j,info) = edge
return j
![Page 406: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/406.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Python solution
def seqOf(self,edge):
(j,info) = edge
return info
def findStart(self):
for v in self.vertexList():
if self.indegreeOf(v) < self.degree(v):
return v
return 0
![Page 407: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/407.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Python solution
def subPath(self,start):
path = []
curr = start
# provided there’s somewhere to go
while (self.degree(curr) > 0):
# go to first elt in adj list
(next,edge) = self.adj[curr][0]
# delete from adj list
del self.adj[curr][0]
path.append(edge)
curr = next
return path
![Page 408: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/408.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Python solution
def eulerPath(self):
start = self.findStart()
path = self.subPath(start)
while len(path) < self.numEdgesOf():
i = 0
for edge in path:
v = edge.getSeq()[0:3]
if self.degree(v) > 0:
newpath = self.subPath(v)
path = path[:i]+newpath+path[i:]
break
i=i+1
return map(Sequence.getAccID,path)
![Page 409: Introduction to Programming using the Python …Introduction to Programming using the Python Programming Language Objectives 26 Computer There is no signiÞcant difference between](https://reader030.vdocuments.net/reader030/viewer/2022021601/5e3fec9653008a4f093e6ca5/html5/thumbnails/409.jpg)
Introduction to Programming using the Python Programming Language
Case Study: DNA Layout
Python solution
Main program
sgraph = SeqGraph(64)
# Now read in the graph vertices
inpfile = open(argv[1])
try:
while (True):
s = readSeq(inpfile)
the_seq = s.getSeq()
first = the_seq[0:3]
last = the_seq[-3:]
sgraph.addEdge(first,last,s)
except FileFinished:
pass