CSC 8000 in Python Lillian N Cassel Department of Computing Sciences Villanova University Course purpose • This course is intended to prepare incoming graduate students for the programming expectations of masters level courses in computer science and software engineering. • Official Description: – Programming in Java or another object-oriented language. Program design with an emphasis on the object paradigm. Classic algorithms and data structures. Significant programming assignments are required. • This semester: Programming in Python Why Python? • Python is an object-oriented language, so satisfies the basic requirements of the course. • Python is a very powerful language with much less overhead than Java. It is easier to get to writing significant programs in Python than it is in Java. • Learning more than one language is very important for computing professionals. We don’t teach Python in any other class, so we will learn it in this one. Resources and Expectations • Textbook: – Object-oriented programming in Python. Goldwasser and Letscher. Pearson/Prentice Hall publisher. 2008 – Note that it is about both Python and the object paradigm. We will study both in depth. • Computers: – Does everyone have a laptop? • Expectations: – We will write and demonstrate programs of increasing significance during the semester. Each program will be demonstrated and described. A small class gives us the luxury of doing this regularly. Schedule notes • Class meets on Wednesday evenings. Attendance is required except for extraordinary reasons. • I have some travel that will take me away some weeks during the semester. On each occasion, there will be a class, generally in distance learning mode. There will be no missed classes due to my travel. Grading • Most weeks will include a brief quiz on the previous material. This should take about 10 – 15 minutes. Quiz grades will count for 25% of the course grade. I hope to have no other exams. • Most of the grade (65%) will come from programming projects. Early in the semester, there will be a small program due each week. Later, the programs will be a bit larger and the time allowed a bit longer. – Submitted programs must run, and must produce correct results, must use meaningful variable names and include appropriate comments. – Programs with errors will be returned. There will be one opportunity to correct and resubmit with a penalty. The penalty will depend on the severity of the error. • 10% of the grade will come from active participation in class. Slides -- sources • The textbook comes with a set of slides. I will use some of them, make some others, modify some of the ones from the book, adapt others that I find elsewhere. The slides that come with the book were developed by – Terry Scott – University of Northern Colorado – 2007 Prentice Hall • Slides from other sources will always be acknowledged with a suitable reference. Finding a starting point • To make the best use of our time, I would like to know something about you and your programming experience. The purpose of the questions is to establish where we are starting so that I can tell what we need to cover in the class. Please answer fully and honestly: – Have you done any programming, in any language? If so, what language(s)? About how long was your longest program? (10, 100, 300, 500, 1000, >1000 lines?) Are you familiar with/ comfortable with the object paradigm? – If no, what is your computer use experience? Basics (continued) A very simplified block diagram of a computer (numbers vary, but these are available now) External storage (CDs, DVDs, USB drives) 2–8 full CPUs Inside the box 8 - 12 MB 3 – 64 GB Central Processing Unit Memory Cache Battery, fan, various connections Keyboard, mouse, touchpad, printer, scanner … Internal Hard Drive Some now have flash drives GB to TB sizes Starting, or reviewing • The CPU contains all the processing components of the computer, as well as some very special, very accessible memory for temporary storage • The internal memory of the computer contains all instructions to be executed and all data to be used during program execution. • Other links and connectors allow communication with external storage, and I/O devices. Example specification – the July 2011 version of the Apple MacBook Pro Note references to dual core and quad core processors. This has important implications for application development. Program development • The processor in a computer is hard wired to execute a small set of basic commands – Add, multiply, change sign, logical operations (and, or, not). Not much more than that. • Any problem that a computer can solve can be solved using these simple commands, but the process is very tedious and subject to human error. Programming languages • Machine code is too difficult for most purposes • Assembly language provides human friendly representations of the machine code, but still closely related to the machine code • Higher level languages are – Oriented toward problem domains or solution approaches – Transferrable among different types of computers with different underlying architectures and codes Language examples • Fortran (Formula Translator), designed for ease in representing mathematical computations • COBOL (COmmon Business Oriented Language) – good for simple manipulation of data fields and production of reports • C – invented for use in systems programming, providing the control of the computer that comes from assembly code, but more human readable. • Pascal – developed specifically for teaching programming • APL – very concise, special characters, designed for manipulating matrices • Algol, PL/1, Ada – many more • Java – Object oriented, virtual machine concept • Python – also object oriented, different characteristics, less overhead than Java Compilers and Interpreters • All code from high level languages must be translated to machine code for execution on a specific type of processor. • Two basic approaches – Interpreter • Read an instruction, interpret it, convert it, execute it • Next run of the program must do all the interpreting again. – Compiler • Read the entire program, convert it to machine code, usually doing some optimization. Prepare a file of executable code. • The executable code can be rerun without re-compiling Data and Types • All data is stored as zeros and ones. – So are all instructions! • A collection of bits can represent anything – – – – An integer A picture A sound An instruction • To be meaningful, a collection of bits must be interpreted correctly and used as intended. – If data that represents an integer is interpreted as an alphabetic character, the result may be nonsense. – Some operations only make sense when a particular type of data is used. We multiply numbers, not names, for example. Data and Types • Some types of data are common and programming languages are designed to work with them naturally – Integers, real numbers, alphanumeric characters, etc. • Other types of data are specific to a particular context or problem domain and are created when needed. – Account number, shopping cart, blog post, etc. Operations, Control, Functions • Programming languages allow the programmer to specify the operations to be carried out. • Control structures allow specification of repetition, ordering of operations, etc. – Conditionals: do this only under these conditions – Looping: repeat this sequence of instructions while this condition holds – Sub code: execute this other set of instructions, then return here for the next instruction. Libraries • Some operations are so common that there are libraries of code to call on when they are needed, so that they do not have to be reinvented by each programmer. • These libraries have operations around a common theme or type of environment or problem. For example: system calls, or text processing, or graphics Abstraction An abstraction Modeling and Planning • Programming begins with a problem to solve, and a plan for solving it. • Starting with code usually means missing something. • Various tools for planning a problem solution – Flow charts show the steps in the code. Much like programming, but language independent – UML (Unified Modeling Language) • Higher level planning tool The Object Paradigm • Think of a problem in terms of objects, properties of those objects, actions carried out by or on those objects. • A problem solution becomes a collection of objects and interactions among the objects. • Objects are further characterized by type – Objects of the same type form a class • For example, we could have a class car and a particular car would be an object of that class. UML Class Diagrams • Define the classes – types of objects – in a system, and the relationships among them. Class name Attributes Operations Class diagram example generalization Many orders for 1 customer (many to 1 relationship) Corporate customer and personal customer inherit characteristics from customer http://atlas.kennesaw.edu/~dbraun/csis4650/A%26D/UML_tutorial/class.htm Algorithms • An algorithm is a step by step process for solving a class of problems. • A useful algorithm must be correct, but also efficient. • The book example of finding the greatest common divisor illustrates that the obvious solution is not always the right approach to take. GCD: Algorithm Book slide 27 GCD Algorithm (Euclid) Book slide 28 Euclid's GCD Values for u, v, and r starting with u = 54 and v = 42. Answer is ? u v 54 42 12 6 0 42 12 6 Book slide, modified r 12 6 0 29 Try another u v 85 15 10 5 0 15 10 5 r 10 5 0 Why does Euclid’s GCD algorithm work? • Let r = remainder of u/v • Then u = k*v + r for some k (all values integer) • r = u – k*v – Anything that divides evenly into both u and v must also divide evenly into r – Similarly, any divisor of v and r must also divide into u – Therefore, the gcd of v and r is the gcd of u and v • Algorithm terminates: r<v. Each successive value of v is smaller, but not negative and so must reach 0. Algorithm to program • An algorithm is encoded as a program in a specific programming language. • Languages have syntax – The requirements of form – punctuation, spacing, spelling, etc. • Languages have semantics – What happens as a result of an instruction – values replaced, computations done, comparisons made, etc. • Programs encode logic – If the language is used perfectly, but the logic is faulty, the results will be wrong. – Computers do exactly what you tell them to do, not necessarily what you intended for them to do! Again, The Object Paradigm • In some programming models, there is an emphasis on what is done – Procedural languages, functional languages • In the Object Paradigm, there is an emphasis on the objects that are defined and manipulated in a program. – An object is an entity that has properties and for which certain operations or actions are relevant – A class is a category of objects, of which a specific object is an instance. Classes • Data and operations on that data are encapsulated to form a class. • The data within a class are called attributes • All the values of the attributes (data) for an instance (object) comprise the state of the object. • The operations within a class are called methods. Examples • There are some examples in the chapter. • Let’s do something different, to provide another example. • Imagine a class of objects that are DVDs – What are the attributes? – What methods (operations) would be relevant? Work with one or two others and devise a set of DVD objects. Show sample attributes and methods. Beginning with Python • Python interpreter – If installed, just type python at the prompt • Enter python instruction and get results – Also, create a file of type .py with python code • Type python <filename.py> • Whole program run • The advantage of a file of python code is that you do not have to keep entering the same instructions over and over again. However, the code is still interpreted – reconverted to machine language each time it is run. • Python compiler available, but we will not bother now. Hello world! • Traditional first program in a new language prints the message “Hello, world!” • This establishes that you can invoke the interpreter and get a program to run. • It is also a measure of the complexity of the language at some level. How hard can it be to make a program print “Hello, world!”? – You might be surprised! • Python program: – print “Hello, world!” – That’s it! Now, on to bigger and better things. Class: list • • • • We will have many occasions to use a list. list() creates an empty list movies = list() makes an empty list with the name (identifier) movies What can we do to a list? – – – – – – – – – append(x) – add an item, x, to the end of the list extend(L) – Extend the list by appending all the items of list L Insert(i,x) – insert item x at position i of the list remove(x) – remove the first item in the list with value = x (error if none exist) pop(i) – return item at location i (and remove it from the list) If no index (i) is provided, remove and return the last item of the list. index(x) – return the index value for the first occurrence of x count(x) – return the number of occurrences of x in the list sort() – sort the list, in place reverse() – reverse the order of the elements in the list List behaviors • See Figure 2.2 page 42 for further list behaviors – Mutators change an existing list – Accessors return information about a list – Generators create a new list Special list from range • We use a lot of lists. • The instruction range creates a list of numbers with specified attributes • range(start,stop,inc) – Creates a lists of numbers starting with start, up to the last value less than stop (not including stop), incrementing by inc – range(3,20,2) = [3, 5, 7, 9, 11, 13, 15, 17, 19] – If only one number given, the list will go from 0 to one less than the number, incrementing by one – If two numbers are given, they are assumed to be start and stop, and the increment is 1. Getting Documentation • Note that you can get documentation about python from several places – Within the python interpreter: help(<topic>) • Ex. help(list.sort) – From the Python main website • www.python.org – Many online tutorials and reference sites List attributes • What attributes does a list have? – len – length of the list; number of entries – sizeof – size of the list in bytes – count – number of occurrences of a particular value in the list • A list item has – index value (position in the list) • The position counting starts with 0 – value Basic I/O • Programs are really limited if you cannot get information into and out of them. – Basic input: • raw_input(<text string to display>) • Ex: raw_input(“Enter your name: “) • Real use: – name=raw_input(“Enter your name: “) – Basic output: • print <list of items to print> • Ex: print “The name you entered is “, name Practice problems • Work on Practice problems 2.1, 2.3, 2.4 from the text page 82