CSC111 Exercises on Classes and Objects

From dftwiki3
Jump to: navigation, search

--D. Thiebaut (talk) 13:05, 13 April 2014 (EDT)


Exercise 1


class Bob:
   def __init__( self ):
        self._a = None

   def setA( self, x ):
        self._a = x

   def getA( self ):
       return self._a


Question 1
Create an object of type Bob, call it x, and set its member variable to 4
Question 2
Add 10 to the member variable of x.
Question 3
print the object contents of Object x. First by getting _a from x and printing it, then by adding a new method to Bob so that we can print objects just by passing them to print()


Exercise 2


This exercise is very similar to Exercise 1, but the definition of self._a is now self.a. Answer the same 3 questions.



Exercise 3


Go back to Bob containing a private member variable.

Question 1
Create 2 objects of type Bob, each containing the values 45 and 70, respectively, and save them in a list called L. Verify that the list contains these 2 objects.


Question 2
Change the value of the first element of the list to 10, and the value of the second one to 20. Verify that the change was made.


Question 3
Create 20 objects of type Bob, each containing 1, 2, 3,... 20, respectively, and save them in a list called L2. Display the contents of the list.


Question 4
Reset the values in all 20 objects in L2 to 0. Verify that the reset operation was successful.


Exercise 4


This exercise is very similar to Exercise 3, but we construct a new class that contains a list of objects of type Bob. Answer the same questions as in Exercise 3.




Cleaned-Up Solution


class Bob:
   def __init__( self ):
        self._a = None

   def setA( self, x ):
        self._a = x

   def getA( self ):
       return self._a

   def __str__( self ):
       return "*** %d ***" % self._a

class Bobs:
   def __init__( self ):
       self._L = []

   def myAppend( self, bob ):
       self._L.append( bob )

   def __str__( self ):
       s = "Bobs List"
       for x in self._L:
           s = s + x.__str__() + "\n"
       return s

   def display( self ):
       for x in self._L:
           print( x )

   def clear( self ):
       self._L = []

   def resetAll( self ):
       for x in self._L:
           x.setA( 0 )
           
def Exercise1():
    # this works independently of what the member variable
    # of Bob is called.
    x = Bob( )
    x.setA( 4 )

    x.setA( x.getA() + 10 )

    print( "x contains: ", x.getA() )
    print( x )

def Exercise2():
    # this works only if the self.a member variable
    # of Bob is defined!
    x = Bob()
    x.a = 4
    
    x.a = x.a + 10
    
    print( "x contains: ", x.a )
    print( x )

def Exercise3():
    x = Bob()
    x.setA( 45 )
    y = Bob()
    y.setA( 70 )
    L = [x, y]

    x = None
    y = None
    
    for z in L:
        print( z )
    
    L = []
    for i in range( 1,21 ):
        x = Bob()
        x.setA( i )
        L.append( x )
        
    for z in L:
       print( "z = ", z ) 

    for z in L:
        z.setA( 0 )
        
    for z in L:
       print( "z = ", z ) 

def Exercise4():
    print( "create 2 Bob objects" )
    L2 = Bobs()
    x = Bob()
    x.setA( 45 )
    y = Bob()
    y.setA( 70 )
    L2.myAppend( x )
    L2.myAppend( y )

    x = None
    y = None

    L2.display()

    print( "create 20 Bob objects in L2" )
    L2.clear()
    for i in range( 1,21 ):
        x = Bob()
        x.setA( i )
        L2.myAppend( x )
    L2.display()

    print( "Set all Bob objects to contain 0" )
    L2.resetAll()

    L2.display()
    
def main():
    # Exercise1()
    # Exercise2()
    # Exercise3()
    Exercise4()
       
main()


Solution Put Together in Class


class Bob:
   def __init__( self ):
        self._a = None

   def setA( self, x ):
        self._a = x

   def getA( self ):
       return self._a

   def __str__( self ):
       return "*** %d ***" % self._a

class Bobs:
    def __init__( self ):
        self._L = []

    def myAppend( self, bobObject ):
        self._L.append( bobObject )

    def __str__( self ):
        s = "Bobs List:\n"
        for x in self._L:
            s = s + x.__str__() + "\n"
        return s
        
def main():

    L3 = Bobs()
    for i in range( 1, 21 ):
        z = Bob()
        z.setA( i )
        L3.myAppend( z )

    print( L3 )
    
def firstPart():
        # Exercise 1
    """
    x = Bob()
    x.setA( 4 )
    print( x.getA() )
    #print( x )
    #x.setA( x.getA() + 10 )
    value = x.getA()
    x.setA( value + 10 )
    
    print( x )
    """
    # Exercise 2
    """
    x = Bob()
    x.a = 4
    print( x )
    x.a += 10
    #x.a = x.a + 10
    print( x )
    """

    # Exercise 3
    """
    x = Bob()
    y = Bob()
    x.setA( 45 )
    y.setA( 70 )
    L = [ x, y ]
    
    for z in L:
        print( z )

    x = None
    y = None

    #L[0].setA( 10 )
    #L[1].setA( 20 )
    z = L[0]
    z.setA( 10 )
    z = L[1]
    z.setA( 20 )
    """
    """
    L2 = []
    for i in range( 1, 21 ):
        
        #print( "i=", i )
        z = Bob()
        z.setA( i )
        L2.append( z )

    for z in L2:
        print( "z = ", z )
    """
main()