Difference between revisions of "CSC111 Homework 10 Solution 2014"

From dftwiki3
Jump to: navigation, search
(Created page with "--~~~~ ---- <onlydft> =Program 1= <source lang="python"> class Cat: def __init__( self, name, age, vac, neut, breed ): self.name = name self.age ...")
 
 
Line 113: Line 113:
 
=Problem #2 =
 
=Problem #2 =
 
<source lang="python">
 
<source lang="python">
 +
class Person:
 +
    # a class containing 4 private member variables:
 +
    # - name of the person (string)
 +
    # - age (integer)
 +
    # - gpa (float)
 +
    # - major (string, uppercase)
 +
    # methods:
 +
    # getName(): returns the name of the person (string)
 +
    # getAge(): returns the age of the person (int)
 +
    # setAge(x): sets the age of the person to x (int)
  
 +
    # constructor: intializes a person with all fields
 +
    def __init__(self, n, a ):
 +
        self._name = n
 +
        self._age  = a
 +
 +
    # returns a string with the name and age.
 +
    def __str__( self ):
 +
        return "%s, %d years old" % ( self._name, self._age )
 +
 +
    # returns the name
 +
    def getName( self ):
 +
        return self._name
 +
 +
    # set the age to a new value x
 +
    def setAge( self, x ):
 +
        self._age = x
 +
 +
    # returns the age of the person
 +
    def getAge( self ):
 +
        return self._age
 +
 +
 +
class Dog:
 +
    # a class containing 2 private member variables:
 +
    # - name-tag of the dog (string)
 +
    # - whether the dog is vaccinated or not (boolean)
 +
    # methods:
 +
    # isVaccinated(): returns True if the dog is vaccinated, False otherwise
 +
    # getName(): returns the name-tag of the dog
 +
    # setName(x): sets the name-tag of the dog
 +
    # constructor
 +
    def __init__( self, tag, vaccinated ):
 +
        self._tag = tag
 +
        self._vaccinated = vaccinated
 +
 +
    # default string representation for the dog
 +
    def __str__( self ):
 +
        if self._vaccinated==True:
 +
            return "%s (vaccinated)" % self._tag
 +
        return "%s (not vaccinated)" % self._tag
 +
 +
    # isVaccinated: returns True if the dog is vaccinated, False otherwise
 +
    def isVaccinated( self ):
 +
        return self._vaccinated
 +
 +
    # returns the name of the dog
 +
    def getNameTag( self ):
 +
        return self._tag
 +
 +
    # changes the name-tag
 +
    def setNameTag( self, tag ):
 +
        self._tag = tag
 +
 +
 +
class ListPeopleDog:
 +
    # a class that maintains a list of pairs.  The first
 +
    # element of a pair is a Person object, the second a Dog object
 +
    # if the person doesn't have a dog, the second element of the pair is None
 +
    # Methods supported:
 +
    # isEmpty(): returns True if the list is empty, False othewise
 +
    # append( p, d ): appends a pair( person, dog) to the list
 +
    # getDogOf( name ): returns the dog object associated with the given person's name
 +
    # getOwnerOf( tag ): returns the person object associated with the given dog tag
 +
    # size( ): returns the number of pairs in the list
 +
    # getPersonDogAt( i ): returns the person object and the dog object located
 +
    # at Index i in the list.
 +
 +
    # constructor
 +
    def __init__( self ):
 +
        self._L = []
 +
 +
    # returns a string formatted as several lines, each representing
 +
    # a person and his/her dog.
 +
    def __str__( self ):
 +
        s = ""
 +
        for person, dog in self._L:
 +
            if dog==None:
 +
                s = s + str( person )+ " [No dogs]\n"
 +
            else:
 +
                s = s + str( person )+ " ["+str( dog ) +"]\n"
 +
        return s
 +
   
 +
    # returns True if the list is empty.  False otherwise.
 +
    def isEmpty( self ):
 +
        return len( self._L )==0
 +
 +
    # add a new pair to the list
 +
    def append( self, person, dog ):
 +
        self._L.append( (person, dog) )
 +
 +
    # returns the dog associated with the first person who's name is passed.
 +
    def getDogOf( self, name ):
 +
        name = name.strip().lower()
 +
        for person, dog in self._L:
 +
            if dog==None:
 +
                continue
 +
            if person.getName().lower() == name:
 +
                return dog
 +
        return None
 +
 +
    # returns the person object associated with the first dog in the list with the
 +
    # tag passed as a parameter.
 +
    def getOwnerOf( self, name ):
 +
        name = name.strip().lower()
 +
        for person, dog in self._L:
 +
            if dog==None:
 +
                continue
 +
            if dog.getNameTag()==name:
 +
                return person
 +
        return None
 +
 +
    # returns the number of pairs in the list.
 +
    def size( self ):
 +
        return len( self._L )
 +
 +
    # returns the person and dog located at Index i in the list.
 +
    def getPersonDogAt( self, i ):
 +
        if i < len( self._L ):
 +
            return self._L[i][0], self._L[i][1]
 +
        return None, None
 +
 +
# ================================================
 +
#                    main
 +
# ================================================
 +
def main():
 +
    text = """Joe, 23, Fido, vaccinated
 +
              Debra, 30, Rex, not vaccinated
 +
              Frida, 10, Ralph, vaccinated
 +
              Maria, 21, Gizmo, vaccinated
 +
              Frank, 31, ,
 +
              Millie, 25, Maxi, not vaccinated"""
 +
   
 +
    # create a new ListPeopleDog object   
 +
    L = ListPeopleDog()
 +
   
 +
    # parse the text and add it as people-dog pairs in the list
 +
    for line in text.split( "\n" ):
 +
        if len( line.split(',') ) != 4:
 +
            continue
 +
        name, age, tag, vacc = line.split(',')
 +
        name = name.strip()
 +
        age  = int( age.strip() )
 +
        tag  = tag.strip()
 +
        vacc = "not" not in vacc.lower()
 +
 +
        if len( tag )==0:
 +
            L.append( Person(name, age), None  )
 +
        else:
 +
            L.append( Person(name, age), Dog( tag, vacc )  )
 +
 +
    # Display the list
 +
    for i in range( L.size() ):
 +
        p, d = L.getPersonDogAt( i )
 +
        if d != None:
 +
            print( p, "has a dog: ", d )
 +
        else:
 +
            print( p, "does not have a dog" )
 +
 +
    #list of unvaccinated dogs
 +
    print( "\nUnvaccinated dogs: " )
 +
    for i in range( L.size() ):
 +
        p, d = L.getPersonDogAt( i )
 +
        if d != None and d.isVaccinated():
 +
            print( p, d )
 +
 +
    # people without dogs
 +
    print( "\nPeople without dogs" )
 +
    for i in range( L.size() ):
 +
        p, d = L.getPersonDogAt( i )
 +
        if d == None:
 +
            print( p, "does not have a dog" )
 +
 +
    # oldest person who has a dog
 +
    print( "\nOldest person with a dog" )
 +
    maxi = 0
 +
    maxAge = 0
 +
    for i in range( L.size() ):
 +
        p, d = L.getPersonDogAt( i )
 +
        if d == None:
 +
            continue
 +
        if p.getAge() > maxAge:
 +
            #print("updating maxi=",maxi,p, d)
 +
            maxi = i
 +
            maxAge = p.getAge()
 +
    p, d = L.getPersonDogAt( maxi )
 +
    print( p, "with dog", d )
 +
           
 +
main()
 
</source>
 
</source>
 
</onlydft>
 
</onlydft>

Latest revision as of 14:59, 10 April 2014

--D. Thiebaut (talk) 15:32, 10 April 2014 (EDT)



...