Difference between revisions of "CSC11 Homework 10 Solution Programs 2014"
(Created page with "--~~~~ ---- =Program 1= <br /> <source lang="python"> # hw10a.py # Joyce Xue ( aa ) # (slightly edited by D. Thiebaut) # 04.15.2014 # # This program contains a class Cat that ...") |
(→Program 2) |
||
Line 168: | Line 168: | ||
<br /> | <br /> | ||
<source lang="python"> | <source lang="python"> | ||
+ | # hw10b.py | ||
+ | # Katerina Popova ( af ) | ||
+ | # (Slightly edited by D. Thiebaut) | ||
+ | # 04.15.2014 | ||
+ | # ===================================================================== | ||
+ | # A program containing 3 classes: Person, Dog, and ListPeopleDog | ||
+ | # Descpription of each class and its method is found within each class. | ||
+ | # This program creates a list object of people and their dog (if they have one). | ||
+ | # Only 1 dog per person, at most, is allowed in this program. | ||
+ | # The program gets the data from a string provided in main() | ||
+ | # An example of the output generated by the 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) | ||
+ | # Frank, 31 years old does not have a dog | ||
+ | # Millie, 25 years old has a dog: Maxi (not vaccinated) | ||
+ | # | ||
+ | # Debra, 30 years old has a non vaccinated dog called Rex | ||
+ | # Millie, 25 years old has a non vaccinated dog called Maxi | ||
+ | # | ||
+ | # 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) | ||
+ | # | ||
+ | # ===================================================================== | ||
+ | |||
+ | class Person: | ||
+ | # a class containing 2 private member variables: | ||
+ | # - name of the person (string) | ||
+ | # - age (integer) | ||
+ | # 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" ) | ||
+ | print () | ||
+ | |||
+ | # ===================================================== | ||
+ | # Challenge 1 | ||
+ | # Prints the list of people who have unvaccinated dogs. | ||
+ | # ===================================================== | ||
+ | |||
+ | # for every item in the L list | ||
+ | # get the person-dog binome | ||
+ | for i in range( L.size()): | ||
+ | p, d = L.getPersonDogAt( i ) | ||
+ | |||
+ | # if a person does not own a dog | ||
+ | # continue (skip) | ||
+ | if d == None: | ||
+ | continue | ||
+ | |||
+ | # if dog is not vaccinated | ||
+ | # output the owner with the name of the dog | ||
+ | if d.isVaccinated() == False: | ||
+ | print ( "%s has a non vaccinated dog called %s." | ||
+ | % (p, d.getNameTag())) | ||
+ | print() | ||
+ | |||
+ | # ======================================= | ||
+ | # Challenge 2 | ||
+ | # Prints the list of people without dogs. | ||
+ | # ======================================= | ||
+ | for i in range( L.size()): | ||
+ | p, d = L.getPersonDogAt( i ) | ||
+ | |||
+ | # if a person does not own a dog | ||
+ | # output their name | ||
+ | if d == None: | ||
+ | print ( p, "doesn't have a dog." ) | ||
+ | |||
+ | print() | ||
+ | |||
+ | # ======================================== | ||
+ | # Challenge 3 | ||
+ | # Displays the oldest person who has a dog. | ||
+ | # ======================================== | ||
+ | |||
+ | # initializing a maxAge to 0 | ||
+ | maxAge = 0 | ||
+ | |||
+ | for i in range( L.size()): | ||
+ | p, d = L.getPersonDogAt( i ) | ||
+ | |||
+ | # if person does own a dog | ||
+ | if d != None: | ||
+ | |||
+ | # if the age of a person is | ||
+ | # bigger than maxAge | ||
+ | # the new maxAge is reset | ||
+ | # and this person and his dog | ||
+ | # are initialized in new variables | ||
+ | if p.getAge() > maxAge: | ||
+ | maxAge = p.getAge() | ||
+ | oldestPerson = p | ||
+ | dogOldestPerson = d | ||
+ | |||
+ | # desired output | ||
+ | print( "The oldest person to own a dog is %s and the dog is %s." | ||
+ | % (oldestPerson, dogOldestPerson)) | ||
+ | |||
+ | |||
+ | # main entry point for the program | ||
+ | main() | ||
</source> | </source> | ||
<br /> | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | [[Category:CSC111]][[Category:Python]][[Category:Homework]] |
Revision as of 05:59, 23 April 2014
--D. Thiebaut (talk) 06:53, 23 April 2014 (EDT)
Program 1
# hw10a.py
# Joyce Xue ( aa )
# (slightly edited by D. Thiebaut)
# 04.15.2014
#
# 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():
# inital cats' info
text="""Minou, 3, Yes, Yes, stray
Max, 1, Yes, No, Burmese
Gizmo, 2, No, No, Bengal
Garfield, 4, Yes, Yes, Orange Tabby"""
# 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:" )
# let user input a new cat's info and append it into the list
cats.append( getNewCat() )
# output the list again
display( cats, "List of cats with new addition:" )
# -------------------------------------------------------------------
# Code Addition
# -------------------------------------------------------------------
# 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()
Program 2
# hw10b.py
# Katerina Popova ( af )
# (Slightly edited by D. Thiebaut)
# 04.15.2014
# =====================================================================
# A program containing 3 classes: Person, Dog, and ListPeopleDog
# Descpription of each class and its method is found within each class.
# This program creates a list object of people and their dog (if they have one).
# Only 1 dog per person, at most, is allowed in this program.
# The program gets the data from a string provided in main()
# An example of the output generated by the 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)
# Frank, 31 years old does not have a dog
# Millie, 25 years old has a dog: Maxi (not vaccinated)
#
# Debra, 30 years old has a non vaccinated dog called Rex
# Millie, 25 years old has a non vaccinated dog called Maxi
#
# 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)
#
# =====================================================================
class Person:
# a class containing 2 private member variables:
# - name of the person (string)
# - age (integer)
# 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" )
print ()
# =====================================================
# Challenge 1
# Prints the list of people who have unvaccinated dogs.
# =====================================================
# for every item in the L list
# get the person-dog binome
for i in range( L.size()):
p, d = L.getPersonDogAt( i )
# if a person does not own a dog
# continue (skip)
if d == None:
continue
# if dog is not vaccinated
# output the owner with the name of the dog
if d.isVaccinated() == False:
print ( "%s has a non vaccinated dog called %s."
% (p, d.getNameTag()))
print()
# =======================================
# Challenge 2
# Prints the list of people without dogs.
# =======================================
for i in range( L.size()):
p, d = L.getPersonDogAt( i )
# if a person does not own a dog
# output their name
if d == None:
print ( p, "doesn't have a dog." )
print()
# ========================================
# Challenge 3
# Displays the oldest person who has a dog.
# ========================================
# initializing a maxAge to 0
maxAge = 0
for i in range( L.size()):
p, d = L.getPersonDogAt( i )
# if person does own a dog
if d != None:
# if the age of a person is
# bigger than maxAge
# the new maxAge is reset
# and this person and his dog
# are initialized in new variables
if p.getAge() > maxAge:
maxAge = p.getAge()
oldestPerson = p
dogOldestPerson = d
# desired output
print( "The oldest person to own a dog is %s and the dog is %s."
% (oldestPerson, dogOldestPerson))
# main entry point for the program
main()