Lecture 2
Lecture 3 (functional programming)
"The quality of our thoughts is bordered on all sides
by our facility with language."
--J. Michael Straczynski
# How to comment? # What is a data type? ''' 1. Variables, assignments and expressions - Neither a variable type declaration nor an end-of-line delimiter is necessary. - The line is ended by the end of the line. - Variables are created automatically when they're first assigned. - A new assignment overrides any previous assignments. - Assignment do not return value. ''' x = "Hello" print x del x # print x and read the traceback # Expressions return values x = 3 y = 5 z = (x + y) / 2 """ 2. Indentation and block structuring Python doesn't use braces to indicate code structure; instead, the indentation itself is used. - It's impossible to have missing or extra braces. - Easy to grasp the skeleton of code just by looking at it. - Python coding styles are mostly uniform – no flavour wars! """ # NOTE: With assignment you include time! # You say: "That is the value at *this* moment". This is dangerous - SICP for more details. n = 9 r = 1 while n > 0: r = r * n n = n - 1 """ 3. Strings Like most other programming languages, indicates strings through the use of " or ' - You can't split a normal string across lines - use triple-quoted strings. """ # Backslashes can be used to escape characters, to give them special meanings. # # \n means the newline character # \t means the tab character # \\ means a single normal backslash character # \" is a plain double-quote character # Use 'print x' do not type only x x = "\tDon't need a backslash\n" x = 'Can\'t get by without a backslash' x = "Backslash your \" character!" x = 'You can leave the " alone' """ 4. Numbers - Python offers four kinds of numbers: integers, floats, complex numbers, and Booleans. - Integers can be arbitrarily large - The division of two integers results in a float - Built-in numeric functions: abs, divmod, cmp, coerce, float, hex, int, long, max, min, oct, pow, round """ # This is impossible integer in Java x = 30000000000 x = x / 2.3 # Build in numeric functions round(2.3) # Booleans: True, False # Most Python objects can be used as Booleans! # The numbers 0, 0.0, and 0+0j are all False; any other number is True. # The empty string "" is False; any other string is True. # The empty list [] is False; any other list is True. # The empty dictionary {} is False; any other dictionary is True. # The empty set set() is False; any other set is True. # The special Python value None is always False. """ 5. 'None' value - Like zero in arithmetic This is enough for now. """ """ 6. Lists are like arrays - Ordered collection of objects - Lists can contain different types of elements NOTE: Lists are recursive structure - list = element | list """ # Note that you don't have to worry about declaring the list # or fixing its size ahead of time. Following example creates the list # as well as assigns it, and a list automatically grows or shrinks in size as needed. # empty one x = [] # This assigns a three-element list to x x = [1, 2, 3] # First element is a number, second is a string, third is another list. x = [2, "two", [1, 2, 3]] # Python indexing is more flexible than C indexing; if indices are negative # numbers, they indicate positions counting from the end of the list, # with –1 being the last position in the list, –2 being the second-to-last position, # and so forth. x = ["first", "second", "third", "fourth"] a = x[-1] b = x[-2] help([]) # or help(list) """ 7. List slicing """ # Can extract or assign to an entire sublist at once, an operation known as slicing. # Instead of entering list[index] to extract the item just after index, # enter list[index1:index2] to extract all items including index1 # and up to (but not including) index2 into a new list. x = ["first", "second", "third", "fourth"] x[1:-1] x[0:3] x[-2:-1] # When slicing a list, it's also possible to leave out index1 or index2. # Leaving out index1 means "go from the beginning of the list," # and leaving out index2 means "go to the end of the list": x[:3] x[2:] # What about x[:]? """ 8. Modifying lists - You can use list index notation to modify a list as well as to extract an element from it. - You can also use slicing """ x = [1, 2, 3, 4] x[1] = "two" # slicing x = [1, 2, 3, 4] x[len(x):] = [5, 6, 7] # NOTE: len() is generic function for all type of sequences # append at the beginning x[:0] # append at the end x = [1, 2, 3] x.append("four") # if append list? y = [5, 6, 7] x.append(y) x = [1, 2, 3] x.extend(y) # or use '+' z = [1, 2, 3] + [4, 5] # insertion x = [1, 2, 3] x.insert(2, "hello") x.insert(0, "start") # The 'del' statement is the *preferred* method of deleting list items or slices x = ['a', 2, 'c', 7, 9, 11] del x[1] del x[:2] # As a homework read about 'remove' """ 9. List membership with the in operator - To test if a value is in a list using the 'in' operator, which returns a Boolean value. """ 3 in [1, 3, 4, 5] 3 not in [1, 3, 4, 5] 3 not in ["one", "two", "three"] """ 10. List initialization with the * operator """ z = [None] * 4 z = [3, 1] * 2 # list multiplication operator """ 11. Tuples Tuples are data structures that are very similar to lists, but they can't be modified. They can only be created. - The main difference between tuples and lists is that tuples are immutable. """ x = ('a', 'b', 'c') # REMEMBER: One-element tuples need a comma! x = 3 y = 4 (x+y) # adds x and y (x + y,) # Including a comma indicates the parentheses denote a tuple """ 12. Packing and unpacking tuples """ (one, two, three, four) = (1, 2, 3, 4) # even simpler one, two, three, four = 1, 2, 3, 4 """ 13. Converting between lists and tuples It is important to stay immutable! """ list((1, 2, 3, 4)) tuple([1, 2, 3, 4]) # 'list' is a convenient way to break a string into characters list("Hello") """ 14. Sets A set in Python is an unordered collection of objects used in situations where member- ship and uniqueness in the set are main things you need to know about that object. ATTENTION: Just as with dictionary keys (as you'll see later), the items in a set must be immutable and hashable. This means that ints, floats, strings, and tuples can be members of a set, but lists, dictionaries, and sets themselves can't """ # sets also have several set-specific operations x = set([1, 2, 3, 1, 3, 5]) y = set([1, 7, 8, 9]) # union x|y # intersection x&y # not in both - symmetric difference x^y # Frozensets - Because frozensets are immutable and hashable, they can be members of other # sets: x = set([1, 2, 3, 1, 3, 5]) z = frozenset(x) x.add(z) """ 15. Strings Strings can be considered sequences of characters, which means you can use index or slice notation. REMEMBER: Strings are immutable! """ x = "Hello" x[0] len(x) 8 * "Победа! " """ 16. String methods """ " ".join(["join", "puts", "spaces", "between", "elements"]) x = "You\t\t can have tabs\t\n \t and newlines \n\n mixed in" x.split() help(split) # error help("".split()) # something different help("".split) # Legacy code: string.split(text) # Converting strings to numbers float('123.456') # Getting rid of extra whitespace x = " Hello, World\t\t " x.strip() x.lstrip() x.rstrip() # String searching x = "Mississippi" # 'find' takes one required argument: the substring being searched for. 'find' returns the # position of the first character of the first instance of substring in the string object, # or –1 if substring doesn't occur in the string x.find("ss") help("".find) # with optional parameter x.find("ss", 3) # count is used identically to any of the previous four functions but returns the number # of non-overlapping times the given substring occurs in the given string x.count("ss") x.startswith("Miss") x.endswith("pi") """ 17. Modifying strings?! Strings are immutable, but string objects have a number of methods that can operate on that string and return a new string that's a modified version of the original string. """ x.replace("ss", "+++") # Cool - Modifying strings with list manipulations text = "Hello, World" # Make it mutable list wordList = list(text) wordList[6:] = [] wordList.reverse() text = "".join(wordList) print text """ 18. Using the format method The format command is a powerful string-formatting mini-language and offers almost endless possibilities for manipulating string formatting. """ # The format method and positional parameters "{0} is the {1} of {2}".format("Ambrosia", "food", "the gods") # The format method and named parameters "{food} is the food of {user}".format(food="Ambrosia", user="the gods") # ... it is powerful "{0} is the food of {user[1]}".format("Ambrosia", user=["men", "the gods", "others"]) # The format specifier lets you control the fill character, alignment, sign, width, # precision, and type of the data when it's substituted for the replacement field. # will skip format specifiers... # Formatting strings with % "%s is the %s of %s" % ("Ambrosia", "food", "the gods") """ 19. Dictionaries Dictionaries are also called associative arrays or hashtables in other languages. """ # Empty dictionary is created much like an empty list, but with curly braces instead of # square brackets x_list = [] y_dict = {} help(dict) # Keys x = {0: 'zero', 1: 'one'} # Whereas list indices must be integers, dictionary keys are much less restricted - # they may be numbers, strings, or one of a wide range of other Python objects. y = {} y["two"] = 2 y["pi"] = 3.14 y["two"] * y["pi"] len(y) english_to_french = {'red': 'rouge', 'blue': 'bleu', 'green': 'vert'} # keys in a list list(english_to_french.keys()) # values in a list list(english_to_french.values()) # both list(english_to_french.items()) # 'in' checks in keys 'red' in english_to_french # Attempting to access a key that isn't in a dictionary is an error in Python! # Alternatively, you can use the 'get' function. It returns the value associated with a key, # if the dictionary contains that key, but returns its second argument if the dictionary # doesn't contain the key: print english_to_french.get('chartreuse', 'No translation') # The difference between 'get' and 'setdefault' is that after the setdefault call, there # is a key in the dictionary 'chartreuse' with the value 'No translation'. print english_to_french.setdefault('chartreuse', 'No translation') # What can be used as a key? # Any Python object that is immutable and hashable can be used as a key to a dictionary! """ 20. Control flow """ # WHILE LOOP # while condition: <-- : means that control structure continues # body # else: <-- difference is here (optional) # post-code # 'condition' is an expression that evaluates to a true or false value. As long as it's # True, the 'body' will be executed repeatedly. If it evaluates to False, the while loop # will execute the 'post-code' section and then terminate. # The break and continue statements in body or pass # The IF-ELIF-ELSE statement # if condition1: # body1 # elif condition2: # body2 # elif condition3: # body3 # . # . # elif condition(n-1): # body(n-1) # else: # body(n) # The FOR loop # for item in sequence: # body # else: # post-code <-- optional x = [1, 3, -7, 4, 9, -5, 4] for i in range(len(x)): # range function if x[i] < 0: print "Found a negative number at index: %s" % i # enumerate function to loop over both the items and their index x = [1, 3, -7, 4, 9, -5, 4] for i, n in enumerate(x): # enumerate if n < 0: print "Found a negative number at index: %s " % i # Comparison and Boolean operators: <, <=, >, >=, ==, !=, <>, or, and # The big example :) def contains_even_number(l): "Prints whether or not the list l contains an even number." for elt in l: if elt % 2 == 0: print "list contains an even number" break else: print "list does not contain an even number"
No comments:
Post a Comment