Bioinformatics Programming in Python - Ruediger-Marcus Flaig - E-Book

Bioinformatics Programming in Python E-Book

Ruediger-Marcus Flaig

4,9
66,99 €

oder
-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

This first introductory book designed to train novice programmers is based on a student course taught by the author, and has been optimized for biology students without previous experience in programming. By interspersing theory chapters with numerous small and large programming exercises, the author quickly shows readers how to do their own programming, and throughout uses anecdotes and real-life examples from the biosciences to 'spice up' the text. This practical book thus teaches essential programming skills for life scientists who want -- or need -- to write their own bioinformatics software tools.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern

Seitenzahl: 654

Veröffentlichungsjahr: 2011

Bewertungen
4,9 (16 Bewertungen)
14
2
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Contents

Chapter 1. Preface

1.1 An axe in the house is worth a carpenter: why computers matter in the life sciences

1.2 What this book is (not) about

1.3 A few practical hints

1.4 From the heart

1.5 Structure of the book

1.6 Sources

1.7 Author and acknowledgements

1.8 Somebody special...

Part 1. EARTH

Chapter 2. A Classification of Programming Languages

2.1 Assembler: the language of the machine

2.2 Interpreter vs compiler

2.3 Human, all too human...

2.4 Imperative languages

2.5 Procedural languages

2.6 Stack languages

2.7 Functional languages: the λ calculus

2.8 Intermission: tó még sýmbolon

2.9 Array languages

2.10 Object-oriented languages

2.11 Reflective languages

2.12 Declarative = logic languages: the π calculus

2.13 Concurrency-oriented languages

2.14 Scripting languages

2.15 Markup languages

2.16 Overdose kids

2.17 Strong vs weak typing

2.18 Choose wisely. . .

2.19 Why PYTHON?

Chapter 3. ◊ Propedeutics

Chapter 4. Getting the Materials

4.1 Getting the PYTHON interpreter

4.2 The editor

4.3 sys.argv, redirection, and pipelines: don’t fear the command line

Chapter 5. Variables, Data Types, and Assignments

5.1 Relevance and purpose

5.2 Simple or “scalar” data types

5.3 Intermission: 0x07 – the hexcode never dies

5.4 Homogeneous groupings

5.5 Intermission: a note on assignment

5.6 Heterogeneous groupings

5.7 Strings

5.8 Assignments and unary operators

5.9 Overview

5.10 Digression: orthogonality

Chapter 6. Flow Control

6.1 Comments

6.2 Docstrings

6.3 Blocks

6.4 The IF... THEN... ELSE... construct

6.5 Modifiers

6.6 Multiple branching: SWITCH vs ELIF

6.7 Applying code to piles of data: FOR, MAP, FILTER and friends

6.8 The REDUCE function

6.9 What about the locals?

6.10 Gimme annather try: WHILE... loops

6.11 Take the short cut – to be continued

6.12 Endless pain

6.13 Timer-driven loops

6.14 One Loop To Rule Them All...

6.15 “Go to” statements

6.16 Pattern matching

6.17 Choosing a functional variable

6.18 Thou Mayst Pass

Chapter 7. ◊ Application: Full Impact

7.1 The problem

7.2 Approach

7.3 Rough and ready

7.4 Refinements

Chapter 8. Functions and Procedures

8.1 Subroutines – the foundation of all higher programming

8.2 The importance of not getting trapped between two mirrors: recursive programming

8.3 Iterative programming

8.4 Digression: the joy of stacks

8.5 Digression: a trick of the tail

8.6 The Travelling Salesman problem

8.7 ◊ Application: cytometry (I)

Chapter 9. Application: Your Most Expensive Pocket Calculator

Chapter 10. The Object-oriented World

10.1 What happened so far

10.2 Class and instance

10.3 Constructors and destructors

10.4 Self vs non-self

10.5 The serpent and the crystal: PYTHONvs RUBY

10.6 Primitive types vs objects

10.7 Modules and statics

10.8 Inheritance

10.9 Ram It Down!

10.10 Inheritance, abstractness, and privacy

10.11 A different point of view: a look at SMALLTALK

10.12 The coffee machine: a visual example

10.13 Tracking and banking

10.14 Generatio spontanea

10.15 The octopus and the coffee mug: C++vs JAVA

10.16 Strings as objects

10.17 None and object in PYTHON

10.18 Paster of Muppets

10.19 Meyer’s Principles: a look at EIFFEL

10.20 Application: cytometry (II)

10.21 And then. . .

Chapter 11. ◊ Exercise: Prime Numbers

Chapter 12. The Cathedral and the Bazaar: Rivalling Strategies

12.1 The TOP-DOWN strategy

12.2 The BOTTOM-UP strategy

12.3 A few notes on style

12.4 Splitting a large project

Chapter 13. Ordo Ab Chao: Sorting and Searching

13.1 When is a group of data ordered?

13.2 Bubblesort

13.3 Insertsort

13.4 Quicksort

13.5 Comparison

13.6 Others

Chapter 14. Welcome to the Library

Part 2. WATER

Chapter 15. ♣ A Very Short Project: Trithemizing a File

15.1 A brief history of coding

15.2 Johannes von Trittheim (Trithemius) and his method of steganography

15.3 Tools of the trade

15.4 Your task

15.5 Professional cryptography now – random remarks

Chapter 16. Some Thoughts on Compression and Checksums

16.1 Introduction

16.2 A simple lossless compression algorithm

16.3 The LZW compression algorithm

16.4 Digression: prototyping and extending

16.5 Preventing unnoticed tainting of data

Chapter 17. Dealing with Errors

17.1 What are errors good for?

17.2 When the walls come tumbling down: errors leading to program termination

17.3 Error signalling by return value

17.4 Error signalling by exceptions

17.5 Assertions

17.6 Crash & Burn

Chapter 18. ♣ A Real-life Project: Generating a Restriction Map and Making Simple Predictions

18.1 Meet Micro-Willy

18.2 What is a restriction map?

18.3 Extracting data from a file

18.4 Finding palindromes

18.5 Naming the sites

18.6 Generating the protein translations

18.7 Making the map

18.8 An artificial digest

18.9 Predicting problems with star activity

18.10 Profit motives – motive profit

18.11 A glance at transmembrane regions

18.12 Addressing a project

Chapter 19. Advanced Techniques in Python

19.1 Escape processing and prettyprinting

19.2 Regular expressions

19.3 File handling

19.4 More file handling: persistent dictionaries

19.5 String handling

19.6 Raising exceptions

19.7 “Curses”: the functions for advanced text output

19.8 Module “os”: the interface to all operating systems

19.9 Utile et iucundum

Chapter 20. ♣ The Third Project: Python goes PCR

20.1 Monkey business

20.2 Polymerase chain reaction: the boiling hell of Dr. Mullis

20.3 Determining the melting point of DNA

20.4 . . . and still my PCR doesn’t work yet!

20.5 Is there a hairpin structure?

20.6 Addressing a project

Chapter 21. The Wizards’ Sabbath: A Gathering of Languages

21.1 Considerable considerations

21.2 FORTRAN

21.3 OBERON

21.4 LISP

21.5 ERLANG

21.6 RUBY

21.7 LUA

21.8 C++

21.9 JAVA

Chapter 22. Facing up to Python-3000

22.1 Functional “print”

22.2 Standardized unicode support

22.3 Goodbye λ, it was nice to know you

22.4 Number representations, arithmetics, &c.

22.5 Function annotations

22.6 String formatting and I/O

22.7 Classes – as you’ve never seen them before

22.8 Class and function decorators

22.9 Miscellaneous

Chapter 23. Anna will Return

Glossary

Index

Related Titles

Hu, X., Pan, Y. (eds.)

Knowledge Discovery in Bioinformatics

approx 364 pages

2007

Hardcover

ISBN: 978-0-471-77796-0

Holmes, R.M.

A Cell Biologist’s Guide to Modeling and Bioinformatics

256 pages

2007

Hardcover

ISBN: 978-0-471-16420-3

Lengauer, T.

Bioinformatics – From Genomes to Therapies

2007

1814 pages, 355 figures, 56 tables

Hardcover

ISBN: 978-3-527-31278-8

Baxevanis, A.D., Ouellette, B.F.F. (eds.)

Bioinformatics

A Practical Guide to the Analysis of Genes and Proteins

560 pages

2004

Hardcover

ISBN: 978-0-471-47878-2

The Author

Dr. Dr. Ruediger-Marcus FlaigRingstr. 2282223 EichenauGermany

Cover illustration

designed byIrén Judit Lange–Flaig

All books published byWiley-VCH are carefully produced. Nevertheless, authors, editors, and publisher do not warrant the information contained in these books, including this book, to be free of errors. Readers are advised to keep in mind that statements, data, illustrations, procedural details or other items may inadvertently be inaccurate.

Library of Congress Card No.:applied for

British Library Cataloguing-in-Publication Data:A catalogue record for this book is available from the British Library.

Bibliographic information published by the Deutsche NationalibliothekDie Deutsche Nationalbibliothek lists this publication in the Deutsche Nationalbibliografie; detailed bibliographic data are available in the Internet at <http://dnb.d-nb.de>

© 2008 WILEY-VCH Verlag GmbH & Co KGaA, Weinheim

All rights reserved (including those of translation into other languages). No part of this book may be reproduced in any form – by photoprinting, microfilm, or any other means – nor transmitted or translated into a machine language without written permission from the publishers. Registered names, trademarks, etc. used in this book, even when not specifically marked as such, are not to be considered unprotected by law.

ISBN: 978-3-527-32094-3

CHAPTER 1

Preface

The science of bioinformatics or computational biology is increasingly being used to improve the quality of life as we know it.

Bioinformatics has developed out of the need to understand the code of life, DNA. Massive DNA sequencing projects have evolved and added to the growth of the science of bioinformatics. DNA the basic molecule of life directly controls the fundamental biology of life. It codes for genes which code for proteins which determine the biological makeup of humans or any other living organism. It is variations and errors in the genomic DNA which ultimately define the likelihood of developing diseases or resistance to these same disorders.

The ultimate goal of bioinformatics is to uncover the wealth of biological information hidden in the mass of sequence data and to obtain a clearer insight into the fundamental biology of organisms and then to use this information to enhance the standard of life for mankind. It is being used now and in the foreseeable future in the areas of molecular medicine to help produce better and more customised medicines to prevent or cure diseases, it has environmental benefits in identifying waste cleanup bacteria and in agriculture where it can be used for producing high-yield low-maintenance crops. These are just a few of the many benefits bioinformatics will help to develop.

— taken from the EBI home page at http://www.ebi.ac.uk/2can

1.1 An axe in the house is worth a carpenter: why computers matter in the life sciences

Goethe once wrote: “May the Lord save us from the curse of a talent which we fail to develop to masterhood! For in the end we will achieve nothing and regret the waste of time and energy.” I fail to agree, for my own notion, justified by everything that has occurred to me in my professional life, is that all things are intricately connected, and even a little bit of knowledge in one field may greatly help in another. Our schools make it all too easy to develop a certain gimlet mentality, encouraging people to know as many facts as possible about as few things as possible, right to the point where they are stalled for good because further progress would require input from a different field.

Computers are extremely powerful tools, or rather, can be used as such, if one only knows how to get them to do the job. Lots of tedious and costly experimental work might be avoided if people were capable of doing a few computer-based estimations beforehand. We all know the “20–80 rule”: 20% of input accounts for 80% of output. That is to say, even superficial knowledge of computer science may be useful in solving real world problems. At least it will enable a life scientist to talk to a computer scientist and thus get the work done.

Let me tell you something from my own practical experience.

Not so long ago, I had to do a PCR. I selected suitable primers, used the dan program from the EMBOSS molecular biology suite to calculate melting temperatures (60°C), ordered the primers and did the experiment. It failed – no product was visible. My guess was that the annealing temperature, which I had set to 59°C (slightly lower than the theoretical value, according to a rule of thumb), was too high, and I reduced the annealing temperature to 57°C. Still it failed. 55°C, 53°C, 51°C, even 48°C – nothing. I began to fiddle around with Mg++ concentrations, various enzymes – nothing. Finally one possibility occured to me: I suspected that the primers might be able to anneal to each other. I fed them into dan and supermatcher – still nothing. At that point I hacked a program that did a somewhat refined comparison, based on the assumption that there might be “hotspots” of complementarity which might cause the primers to stick together, though they might escape a common matching program. And behold! there was indeed one such hotspot, comprising just a handful of nucleotides but amounting to a melting temperature of 62°C. After I had finished banging my head against the wall, I set the PCR machine to an annealing temperature of exactly 62° C... and this time I got so much product that the agarose gel was overloaded!

This made me wonder what I might have done if I had not, by chance, been quite skilled in programming. Probably fooled around with the PCR for several weeks more, wasted costly enzyme on reactions which I would never have known just could not work. In the end maybe, by sheer luck, might have found the correct parameters and done the cloning without ever knowing what was up. Is that smart?

Anybody should be given the possibility of learning how to solve such problems. Tackling this one will be the subject of a later book. (Please begin at the beginning, though!)

However, the main problem is that most people who know about computers do not know about researchers’ needs and indulge in abstract theory where none is needed, as in the following brillant definition of an array: “A function whose domains are isomorphic to contiguous subsets of integers”. Intellectually certainly excellent – but who would guess from that what an array is, and what it may be used for? Now here’s my own explanation: “An ordered sequence of values, each of which has a number (‘index’) so that the values in an array x of n elements may be referred to by its index, as x1, x2, ..., xn–1, xn. It can be thought of as a street with a single name but separate houses for different pieces of data, which can be addressed by their number. For example, when measuring gene expression on the single-cell level in a cytometer (p. 177), wedetermine the fluorescence of 10 000 cells one by one and store the values in fl1 ... fll0 000.”

Theory is hard to put into practice, and practice is theoretically unnecessary. Both are only inadequate substitutes for understanding.

I am only too well aware that in some academic circles a certain singlemindedness is très chic these days. Quite a number of scientists believe in the “pure teachings” of their own all-important field and the inviolable sanctity of the test tube. Computing, by contrast, has the image of being “nerdy” and a matter for asexual fifteen-year-olds. The truth, however, is that computers are just as important to scientists as pipettes and test tubes, since they offer a unique possibility to simulate things that are too big, too small, too fast, too slow, too dangerous or too complex for conventional experimental study; “too complex” here meaning that they involve amounts of data that would overwhelm any human “experimental genius”.

1.2 What this book is (not) about

This book is about programming in bioinformatics .

My goal is not to demonstrate the intellectual beauty of information theory, nor to discuss the most advanced techniques in software development, but to teach students with little or no computing experience how to use computers to become more efficient in their scientific work, by demonstrating the way towards solving everyday problems, such as the PCR business which I just mentioned. If you are looking for an introduction to Bayesian statistics, or to neural networking, or to X-ray diffraction analysis, this book is definitely not for you; nor is this going to be about EMBOSS, Husar or other molecular biology software packages. It is also not going to be about basics such as producing smart diagrams with a spreadsheet program, writing emails or backing up the contents of your hard disk. It is about programming in bioinformatics. You will acquire general proficiency in algorithmic thinking, not skill in mechanically applying tools which other people have designed.

Contrary to a widespread sentiment that details are more important than overviews, I encourage you to as wide a perspective as possible. You ought to get an idea of what is generally possible, of how many different concepts of information processing there are and of how it “feels” to develop a program. Do not waste your time with learning library functions by heart; rather toy around with the different languages touched on here. In perfect accordance with Whorf’s theorem that language shapes minds, people who have learned only one programming language are in danger of having this language’s structures forced upon their way of thinking – a thing which will seriously hamper their creativity. Of course, this taking things for granted is a general problem: being trained according to one line of thought only leads to mental inbreeding. Maybe you will find this book rather revitalizing in this respect.

Necessarily I had to focus on one language – a choice which was far from easy. After some consideration, I selected PYTHON as the “official language” for this book because it is easy to learn, powerful and freely available1, but my emphasis is not on PYTHON as such but on the elementary concepts of programming languages in general and the way to use them; therefore you will find quite a number of comparisons between different languages here but little about the bells and whistles inside PYTHON . Ideally, after completing this book it will take you little effort to learn any programming language.

The aim of this book is not to serve as a reference guide for PYTHON ; it is highly recommended to have the official PYTHON documentation and tutorial at hand when working on the exercises (download them from http://www.python.org). This way you can also make sure that your documentation is always up date, PYTHON being a swiftly evolving language. By the way, did I happen to tell you that this book is not about PYTHON but about programming in bioinformatics?

Furthermore, it is designed not for going-to-be computer scientists but for future life scientists (who are also expected to have a basic understanding of molecular biology and fundamental things like transcription, translation, the gentic code and the double helix). The contents of this are purely non scholae sed vitae – you will not be asked for this in any exam you are ever going to take, but it may help you as soon as you assume work on your first thesis. Therefore, please take the time to read carefully, and pay attention to the sign. Be aware that not all these questions are really to be answered – some are just intended to make you think; whet your own judgement by this. Feedback is always welcome.

Finally, my apologies if some parts of this book are found to be redundant. In the interest of accessibility I have repeated things where necessary and tried to present them in the respective context, rather than just using cross references to excess. On the other hand, I love to occasionally throw in things which have not been discussed yet but which may be deduced from the context, and ask you to think about that. Maybe I have exaggerated the Socratic method here and there, but it is the proper method for this task. You will also come across several chapters named “Application” describing the way to write a specific program; they are intended both to illustrate what has been described so far and to introduce what is to come next. Now and then, I could not restrain from giving you some really personal advice, which is then marked with a sign. Of course, you may always feel free to disagree.

“Computer science is no more about computers than astronomy is about telescopes”, Dijkstra (one of the really great gurus of the field) once said. To be more specific: “Computer programming is not about writing programs; it’s about understanding a problem thoroughly and devising a strategy to its solution.” That given, writing the actual program is a minor task. Someone who is capable of that kind of analytical thinking will benefit in other sciences as well. Another famous quotation by Dijkstra reads: A programming language which does not change the way you think is not worth learning.

1.3 A few practical hints

Now and then you will find boxes comprising summaries, labelled with a capital sigma. Moreover, important “paradigms” will be noted in the margin. A large in the margin is to direct your attention to particular keywords and to the importance of the section, in particular with regard to bioinformatics. As in every field, for the beginner it is not always obvious why the path should wind through some particular thicket!

In addition, there are a few sections marked with special signs. Those with a comprise exercises which are not “mainstream”, but which I advise you strongly to do, since they may help you to understand (or maybe ask the correct questions). Feel free to discuss them with your friends. Those marked with a on the contrary, are the projects which you should do at all costs – and for yourself. Exemplary solutions will be found at the end of the second volume.

1.4 From the heart

Perhaps the most famous Japanese ever was 17th century Shinmen Miyamoto Musashi, surnamed ken-sei, “Enlightened Sword-Master” – a title he certainly deserved. Wandering about without home or aim for the major part of his life, he did not miss any occasion for quarreling and emerged victorious from more than 60 duels, many of them fought against renowned warriors; the ni t (Two Swords) way of fencing he devised is regarded as the highest accomplishment of swordsmanship. When he finally retired, he surprised everyone by immediately becoming a notable painter and sculptor, some of his works are still considered as classics today. Upon the request of his friend and liege he also wrote a book on the subject of sword fighting, named “The Book of the Five Rings” (Go Rin no Sho). In this book, he gave some very interesting bits of advice:

By following no particular School I defeated followers of all Schools: A hint which pertains especially to going-to-be professionals. You will constantly have to face situations you are not prepared for, and coping with this is essential. This, however, can only be done when you study different approaches instead of yielding to the temptation to considering a single one as The Way.The best technique is no technique, the best stance is no stance: This was not meant as a justification for bungling or amateurishness but to express the fact that when you become really proficient in any art or ability, at a certain point formal structures will lose their helpfulness and in fact become an impediment. To Musashi, fencing was, and ought to be, as natural as walking or talking. You do not form your words according to a conscious pattern, nor do you care about the rules of grammar or phonetics when talking in your mother language – you just talk, free from formal structures. When learning a new language, you will nevertheless first have to learn the rules, before you grow beyond them. But you do not begin to learn a language with the intention to remain glued to the grammar reference for good.Masterhood in one field will entail masterhood in all: A corollary of the former. Attaining true proficiency and mental flexibility by learning will facilitate further learning. Speaking for myself, it took me about two hours two learn Python, and about a week to get into my current field of research.

The Book of the Five Rings became very popular in the West, most recently in the 1990s among managers, who grotesquely abused the “no technique” idea as an excuse for any act of sloppiness or manifestation of incompetence2. This is as far from Musashi’s intentions as can be. He is reported to have given the following answer to a lazy student who wanted to know how much practice he still needed. “Just as much practice as will enable you to do this, mind you”, Musashi replied. Then he had a grain of rice placed on the top of the student’s head and aimed a violent shomen-uchi (a vertically descending blow) at him. Down fell the two halves of the grain, cut asunder cleanly without as much as scratching the student’s skin.

Do yourself a favour and think about this man’s advice.

1.5 Structure of the book

It should be noted that there is no “entry level” qualification required. You can start without knowing anything about programming before. However, basic skills in handling a computer are expected, as it would be tedious to begin with these fundamentals (which are taught in more elementary books anyway). For example, you should know the the meaning of terms such as “processor”, “memory”, “persistent storage” and “file system”. If some terms should seem unfamiliar to you, the glossary at the end of this book (p. 401) may be helpful.

This book is designed in two parts; according to the natural structure but also in reverence to Musashi (place smile here), it has been divided into five sections (two for the first, three for the second part):

(1) Earth – a classification of programming languages; data types; control structures; functions; objects; software project organization; iteration vs recursion; tips for getting started with PYTHON.

(2) Water – the three projects for the first term (cryptography, sequence analysis, oligonucleotide design); advanced techniques in PYTHON; a comparison of languages.

(3) Fire – a gentle introduction to geometry and simulations; the BIOPYTHON package; tools for professional development; understanding data processing by building an interpreter for the programming language LISP; two intermediate projects.

(4) Air – Graphical user interfaces; multithreading; three-dimensional graphics; bottom-up simulations; a complete virtual machine with assembler and BASIC compiler included; the two highest projects.

(5) Void – Networking basics; real-life applications; algorithms in bioinformatics; summary (exemplary solutions, glossary and index).

Much care was spent on arranging “presentation” and “practice” chapters in an alternating fashion in order to enable students to switch to learning by doing as soon as possible – without getting too focused on a single language, however.

For those who are interesting in delving deeper into algorithms applied in molecular biology, the book “Genomic PERL” by Rex A. Dwyer (Cambridge University Press, 2003) is highly recommended, as it describes the approaches with exceptional clarity and furnishes examplary solutions. However, these examples are implemented in PERL, a language which is not suitable for teaching purposes, so this book requires a solid background in the basics of programming.

1.6 Sources

There is no bibliography at the end of this book. The knowledge compressed into these approximately four hundred pages was collected over the course of more than twenty years from all kinds of sources – books, journal articles, internet postings, personal discussions and, above all, the dearly-bought experience gained by lots of personal work on real-life problems which had to be solved somehow. A few selected titles can be found at the end of the second volume.

“By all accepted standards, Musashi was not a great sword technician. Schools, styles, theories, traditions – none of these meant anything to him.. His way of fighting was completely pragmatic. What he knew was only what he had learned, from experience, living as an ascetic in the mountains, exposing himself to the dangers presented by nature as often as to those presented by man. He was not putting theory into practice; he fought first and theorized later.”

– EIJI YOSHIKAWA.

1.7 Author and acknowledgements

Rdiger Marcus Flaig (a.k.a. Don Rodrigo) was born in 1971 in Mannheim, Baden. In 1994, he received his Master’s degree in biology from the University of Heidelberg and subsequently obtained the degrees of Dr. sci. hum. (medicine) in 1997 and of Dr. rer. nat. (pharmaceutics, with summa cum laude ) in 2001. In the course of his adventurous life, he has worked in almost all fields of the life sciences (and also in law, languages,. .. → ∞). From 2003 to 2005, while in Heidelberg as a postdoctoral researcher in immunology, he taught “Programming in Bioformatics” in cooperation with Roland Eils of the “Intelligent Bioinformatics Systems” (IBIOS) division of the German Cancer Research Centre. For his scientific and humanitarian endeavours he has received a number of decorations, including the Imperial Order of the Ethiopian Lion and the title of a Knight of the Collar of St. Agatha of Paternò.

The author gratefully acknowledges the help of many of his past and present colleagues as well as the students in his course, whose critical feedback greatly improved the quality and made him realize the unmet need for a comprehensive textbook. But above all, he would like to recognize the support he has received from his family, in particular his beloved wife, M.A. Irén Judit Lange-Flaig, without whose invaluable contributions all this would not have been possible.

1.8 Somebody special...

Meet our mascot:

1 Please refer to “Why PYTHON?” on p. 57 for a more detailed explanation of this choice, and to “The Wizards’ Sabbath” (p. 359) for a comparison of languages.

2 As happens frequently to Eastern ways when brought to Euro-America: O mani padme hum; o mani padme hum; wow, now I’m enlightened!

Part 1

EARTH

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!

Lesen Sie weiter in der vollständigen Ausgabe!