Difference between revisions of "CSC111 Homework 8 2018"

From dftwiki3
Jump to: navigation, search
(Example Outputs for Different CSV Files)
 
Line 1: Line 1:
 
[[User:Thiebaut|D. Thiebaut]] ([[User talk:Thiebaut|talk]]) 10:44, 1 April 2018 (EDT)
 
[[User:Thiebaut|D. Thiebaut]] ([[User talk:Thiebaut|talk]]) 10:44, 1 April 2018 (EDT)
 
----
 
----
 +
<onlydft>
 
<br />
 
<br />
 
<bluebox>
 
<bluebox>
Line 427: Line 428:
 
<br />
 
<br />
  
 
+
</onlydft>
  
 
<!-- =================================================================== -->
 
<!-- =================================================================== -->

Latest revision as of 12:44, 1 June 2018

D. Thiebaut (talk) 10:44, 1 April 2018 (EDT)



...




<showafterdate after="20180414 00:00" before="20180601 00:00">

Solution Programs


Part 1


# hw9_1sol.py
# Originally by Joyce Xue ( aa )
# (slightly edited by D. Thiebaut)
# 
#
# This program contains a class Cat that describe a cat with its name, age,
# being vaccinated or not, being neutered or not and breed
#
# To create an object of this type, simply use the constructor, as follows:
#
#        cat = Cat(name, age, vaccinated, neutered, breed)
#
# The methods supported are:
#
# isVaccinated(): returns if the cat is vaccinated
#
# isNeutered(): returns the  name of the planet with the largest diameter
#
# __str__(): convert the object to a string
# ------------------------------------------------------------------------------------------------------
class Cat:
    # contructor. Initialize all memebers.
    def __init__( self,name, age, vaccinated, neutered, breed):
        self._name=name
        self._age=age
        self._vac=vaccinated
        self._neu=neutered
        self._breed=breed

    #==================================================================
    # __str__() : When call print(cat), this function
    #                      automatically converts the cat to a string
    #==================================================================
    def __str__(self):
        # make up the return string by following the required format
        temp = "Cat: "+self._name+","+" age: "+str(self._age)+", "

        # convert boolean value to string
        if self._vac: temp=temp+"vaccinated, "
        else: temp=temp+"not vaccinated, "

        if self._neu: temp=temp+"neutered "
        else: temp=temp+"not neutered "

        temp=temp+"("+self._breed+")"
        
        return temp

    #==================================================================
    # isVaccinated(): return if the cat is vaccinated
    #==================================================================
    def isVaccinated(self):
        return self._vac

    #==================================================================
    # isNeutered(): return if the cat is neutered
    #==================================================================
    def isNeutered(self):
        return self._neu


#==================================================================
# getNewCat(): ask for user input to create a new
#                       cat and return it
#==================================================================
def getNewCat():
    # user input for name, age, if vaccinated, if neutered and breed
    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 )

#==================================================================
# display(): print each cat in a Cat collection
# L       - a list of cats
# caption - the subject of the list to be printed
#==================================================================
def display( L, caption ):
    # print the subject
    print( "\n\n"+caption )
    print( "=" * len( caption ) )
    # go over the list and print each cat's info
    for cat in L:
        print( cat )

#==================================================================
# main(): 
#  * creates a list of cat objects, displays it.
# 
#==================================================================
def main():
    # get the contents of cats.csv
    file = open( "cats2.csv", "r" )
    text = file.read()
    file.close()
    
    # use the text as the initial data, generate cats
    for line in text.split( "\n" ):
        # split each line into items
        words = line.strip().split( "," )
        # if data is not exactly 5, skip
        if len( words ) != 5:
            continue
        
        # set items to variables
        name, age, vaccinated, neutered, breed = words
        # convert age to int
        age = int( age.strip() )
        # convert user inputs to booleans
        if vaccinated.strip().lower() == "yes":
            vaccinated = True
        else:
            vaccinated = False

        neutered = neutered.strip().lower() == "yes"

        # construct a cat
        cat = Cat( name.strip(), age, vaccinated, neutered, breed.strip() )

        try:
            # add the cat to the list
            cats.append( cat )
        except NameError:
            # if the cats list is not initialized, initialize it and append the first cat
            cats = []
            cats.append( cat )

    # output the cat list
    display( cats, "List of cats:" )


    # Go through each cat and add those who is both vaccinated and neutered into a list
    vaccinatedNeuteredCats = []
    for cat in cats:
        if cat.isVaccinated() and cat.isNeutered():
            vaccinatedNeuteredCats.append( cat )

    # output the cats in this new list (both vaccinated and neutered)
    display( vaccinatedNeuteredCats, "Vaccinated and neutered cats:" )

    
# Main entry point for the program
main()


Part 2


# hw9_2start.py
# your name here
# This program maintains 2 classes, one for a person
# and the other for a dog. 
# A person object is defined by a name, an age, and a dog.
# If a person does not own a dog, then that person's dog field is set to None.
# A dog is defined by a tag (its name) and a boolean indicating if it is
# vaccinated or not.
# The main program outputs various lists of people.
#

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, dg ):
        self.name = n
        self.age  = a
        self.dog  = dg

    def getDog( self ):
        return self.dog
    
    # returns a string with the name and age.
    def __str__( self ):
        return "{0:1}, {1:1} years old".format( 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 "{0:1} (vaccinated)".format( self.tag )
        return "{0:1} (not vaccinated)".format( 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

# readCSVFile.  Reads the contents of a CSV file and return
# a list of strings containing all the lines.
def readCSVFile( fileName ):
    file = open( fileName, "r" )
    lines = file.readlines()
    file.close()
    return lines

         
# ================================================
#                     main
# ================================================
def main():
    # get the contents of the file
    lines = readCSVFile( "peopledog.csv" )
    
    # create a list of people, and their dog (if they own one)
    people = []
    
    # parse the text and add it as people-dog pairs in the list
    for line in lines:
        
        # reject lines that are not formatted correctly
        if len( line.split(',') ) != 4:
            continue

        # parse line
        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:
            p = Person(name, age, None  )
        else:
            p = Person(name, age, Dog( tag, vacc ) )

        # add this new person to the list
        people.append( p )

    # Display the list
    for person in people:
        
        if person.getDog() != None:
            print( person, ", has a dog: ", person.getDog(), sep="" )
        else:
            print( person, ", does not have a dog", sep="" )

    print()
    
    # Display the list of people with unvaccinated dogs
    for person in people:
        if person.getDog() != None and person.getDog().isVaccinated()==False:
            print( person, ", has a dog: ", person.getDog(), sep="" )

    print()

    # Display the list of people without dogs
    for person in people:
        if person.getDog() == None:
            print( person, ", does not have a dog", sep="" )

    print()

    # display the oldest person who has a dog
    oldest = None
    oldestAge = 0
    for person in people:
        if person.getAge() > oldestAge:
            oldestAge = person.getAge()
            oldest = person

    if oldest.getDog()==None:
        print( "Nobody in the list has dogs." )
    else:
        print( oldest, ", is the oldest person owning a dog." )

main()


</showafterdate>


...