Difference between revisions of "CSC111 Homework 10 2014"

From dftwiki3
Jump to: navigation, search
(Your Assignement)
(Your Assignment)
Line 334: Line 334:
 
</source>
 
</source>
 
<br />
 
<br />
Submit your program to the same URL as for the other programs.
+
Store your program in a file called ''' hw10c.py''' and submit it [http://cs.smith.edu/~thiebaut/111b/submit10.php| here].
 
<br />
 
<br />
 
<br />
 
<br />

Revision as of 16:23, 9 April 2014

--D. Thiebaut (talk) 10:30, 8 April 2014 (EDT)


Page under construction!

UnderConstruction.jpg

Problem #1


The program below is missing its class! And it is also missing its documentation! It used to contain a class defined, with methods and member variables, and a fully developped documentation, but unfortunately all of them got erased.

We do have the output of a run of the program, though, when it still had its class definition. Both the incomplete code and the output are shown below.


def getNewCat():
    print( "\nPlease enter the information for the new cat:")
    name = input(       "Cat name?         " )
    age  = int( input(  "Age, in years?    " ) )
    vac  = input(       "Vaccinated (Y/N)? " ).strip().lower()
    vac  = vac in ['y', 'yes']
    neut = input(       "Neutered (Y/N)?   " ).strip().lower()
    neut = neut in ['y', 'yes' ]
    breed= input(       "Breed?            " ).strip()
    
    return Cat( name, age, vac, neut, breed )

def main():
    text="""Minou, 3, Yes, Yes, stray
            Max, 1, Yes, No, Burmese
            Gizmo, 2, No, No, Bengal
            Garfield, 4, Yes, Yes, Orange Tabby"""

    for line in text.split( "\n" ):
        words = line.strip().split( "," )
        if len( words ) != 5:
            continue
        name, age, vaccinated, neutered, breed = words
        age = int( age.strip() )
        if vaccinated.strip().lower() == "yes":
            vaccinated = True
        else:
            vaccinated = False

        neutered = neutered.strip().lower() == "yes":
        
        cat = Cat( name.strip(), age, vaccinated, neutered, breed.strip() )
        try:
            cats.append( cat )
        except NameError:
            cats = []
            cats.append( cat )

    display( cats, "List of cats:" )

    cats.append( getNewCat() )

    display( cats, "List of cats with new addition:" )

    vaccinatedNeuteredCats = []
    for cat in cats:
        if cat.isVaccinated() and cat.isNeutered():
            vaccinatedNeuteredCats.append( cat )

    display( vaccinatedNeuteredCats, "Vaccinated and neutered cats" )
    
    
main()


Output


List of cats:
=============
Cat: Minou, age: 3, vaccinated, neutered (stray)
Cat: Max, age: 1, vaccinated, not neutered (Burmese)
Cat: Gizmo, age: 2, not vaccinated, not neutered (Bengal)
Cat: Garfield, age: 4, vaccinated, neutered (Orange Tabby)

Please enter the information for the new cat:
Cat name?         Ralph
Age, in years?    4
Vaccinated (Y/N)? y
Neutered (Y/N)?   y
Breed?            Angora


List of cats with new addition:
===============================
Cat: Minou, age: 3, vaccinated, neutered (stray)
Cat: Max, age: 1, vaccinated, not neutered (Burmese)
Cat: Gizmo, age: 2, not vaccinated, not neutered (Bengal)
Cat: Garfield, age: 4, vaccinated, neutered (Orange Tabby)
Cat: Ralph, age: 4, vaccinated, neutered (Angora)


Vaccinated and neutered cats
============================
Cat: Minou, age: 3, vaccinated, neutered (stray)
Cat: Garfield, age: 4, vaccinated, neutered (Orange Tabby)
Cat: Ralph, age: 4, vaccinated, neutered (Angora)


Question

Recreate the original program with its Cat class. Make sure that it will generate the same output show above if fed the same cat information.

Document your code well, including the main and getNewCat functions. Document the class using the same approach as in this file: Planets.py.
Store your program in a file called hw10a.py and submit it here.

Problem #2


This problem was originally part of Lab #10.
Copy the code in this page and store it in a new Python file called Planets.py. Save it in your current working directory (where your other Python programs are).

Create a new program called hw10b.pyand add the code below to it.

from Planets import PlanetList

def playWithPlanets():
    planets = PlanetList()
    print( planets )


def main():
    playWithPlanets()

main()


  • Run your program to see how it behaves.
  • Study the class PlanetList, and figure out how each method works.


Your assignment


  • Add code to your hw10b.py program so that it will
    1. display the name of the smallest planet
    2. display the name of the largest planet
    3. display the number of planets
    4. get the user to input a new planet that will be added to the list of planets (this page has good information on planets)
    5. display the new list of names of planets


NOTE: you cannot modify the code inside the class!


Store your program in a file called hw10b.py and submit it here.

Problem #3


Create a new program with the code below. Call it hw10c.py.

# 
class Person:
    # a class containing 4 fields:
    # - name of the person (string)
    # - age (integer)
    # - gpa (float)
    # - major (string, uppercase)

    # 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:

    # 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

    def isVaccinated( self ):
        return self._vaccinated

    def getNameTag( self ):
        return self._tag

    def setNameTag( self, tag ):
        self._tag = tag


class ListPeopleDog:

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

    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
    
    def isEmpty( self ):
        return len( self._L )==0

    def append( self, person, dog ):
        self._L.append( (person, dog) )

    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

    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

    def size( self ):
        return len( self._L )

    def getPersonDogAt( self, i ):
        if i < len( self._L ):
            return self._L[i][0], self._L[i][1]
        return None, None
        
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, no vaccinated"""
    
    L = ListPeopleDog()
    
    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()
        #print( name, age, vacc, tag )

        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 )

    # display the people who have unvaccinated dogs
    for i in range( L.size() ):
        p, d = L.getPersonDogAt( i )
        if d == None:
            continue
        if d.isVaccinated():
            continue
        print( p, "has a non vaccinated dog called", d.getNameTag() )


    # display the people without dogs
    for i in range( L.size() ):
        p, d = L.getPersonDogAt( i )
        if d == None:
            print( p, "doesn't have a dog" )

    # find the oldest person who has a dog
    maxAge  = 0
    maxp    = None
    maxd    = None
    for i in range( L.size() ):
        p, d = L.getPersonDogAt( i )
        if p.getAge() > maxAge and d != None:
            maxAge = p.getAge()
            maxp   = p
            maxd   = d
    print( "The oldest person to own a dog is", maxp, "and the dog is", maxd )

main()


Your Assignment


  • Without modifying any of the classes, make your program output
    1. the list of people who have unvaccinated dogs
    2. the list of people without dogs
    3. the oldest person who has a dog


An example of the output of the solution program is shown below:

Joe, 23 years old has a dog:  Fido (vaccinated)
Debra, 30 years old has a dog:  Rex (not vaccinated)
Frida, 10 years old has a dog:  Ralph (vaccinated)
Maria, 21 years old has a dog:  Gizmo (vaccinated)
Millie, 25 years old has a dog:  Maxi (vaccinated)
Debra, 30 years old has a non vaccinated dog called Rex
Frank, 31 years old doesn't have a dog
The oldest person to own a dog is Debra, 30 years old and the dog is Rex (not vaccinated)


Store your program in a file called hw10c.py and submit it here.