Py: Lesson 2

For the second lesson, we looked at:

  • Dictionaries
    • Dictionary literal: {"Shreya": 55, "Nandini": 72}
    • Dictionary variable: a = {"Shreya": 55, "Nandini": 72}
    • Dictionary read/access: a["Shreya"]
    • Dictionary write/assignment: a["Shreya"] = 22
    • Dictionary has-key test: "Shreya" in a => (read “yields” or “outputs” or “returns”) True, "Fred" in a => False
  • Functions
    • Defining a function: def functionName(parameter1, p2, p3 = "default value"):
      • The “body” of the function needs to be indented.
      • Default values can be provided when defining function parameters, but if a parameter has a default value, then all parameters after it must also have default values, so that there is an easy rule for matching arguments to a function with the right parameter/container/variable name.
    • Aside: Any line following a colon (:) must be indented. When the indentation stops, this signifies the end of that “body” of code. E.g. if-then-else statements looks like this:
      • if a["Shreya"] > a["Fred"]:
        • print("Give cane to Shreya")
      • else:
        • print("Give cane to Fred")
  • Classes
    • Classes provide a nice way to organize programming code. Intuitively, they match concepts and words that we use in real life, like Person, Car, Address, Phone Number, etc.
    • Classes usually define both a set of variables that each “instance” of the class will have and a set of functions that can be used to get information about or change information about an instance of that class.
      • Variables: E.g. all Persons shall have a name and password, and all Cars shall have a position and a heading/direction, etc.
      • Functions (called “methods”): E.g. all Persons shall have a function that combines their first name and last name using the rule lastName + “,” + firstName, and all Cars shall have a function that moves it in the direction it is facing by 10 steps.
    • Classes in Python are defined as follows:
      • def Person:
        • def __init__(self, firstName, lastName):
          • self.firstName = firstName
          • self.lastName = lastName
        • def lastNameCommaFirst(self):
          • return self.lastName + ", " + self.firstName
      • This is really shorthand for:
        • Define a class type called “Person”, and define a “constructor” function that does something like this function:
        • def Person(firstName, lastName):
          • person = new Person()
          • Person.__init__(person, firstName, lastName)
          • return person
        • Where Person.__init__ is the full name of the __init__ function we defined.
        • If we create a Person and assign them to a variable called myFriend, myFriend = Person("Bunny", "Hopscotch"), then we could get the string "Hopscotch, Bunny" from myFriend by typing myFriend.lastNameCommaFirst().
          • Note that myFriend.lastNameCommaFirst() gets converted internally to Person.lastNameCommaFirst(myFriend), hence the “self” in the definition. People just prefer to type myFriend.lastNameCommaFirst() over Person.lastNameCommaFirst(myFriend).