## Description

In this programming assignment you will create the DooDad and DooDadX classes. These

are classes of fictitious objects whose behavior is defined below. Each DooDad object has a

color, weight, value, and serialNumber. Serial numbers are assigned sequentially starting

with a base value of 1000. Getters should be provided for each of the four instance

attributes. No setters are to be provided. Only the colors “red”, “green”, and “blue” are

possible. The weight and value are floating point values.

When two DooDads are combined with an arithmetic operator, the resulting new DooDad

has the following characteristics:

+ operator: if the two serial numbers differ by one, multiply the two values to get the new

value, otherwise add the values. The new DooDad has the color of the left Doodad and the

maximum of the two weights.

– operator: the new DooDad should use the color of the left Doodad, the weight of the right

DooDad and the minimum of the two values.

* operator: use the maximum of the two weights, the average of the two values and the

color selected by the following rule: if the colors are the same, use that color, otherwise

choose the color that is different than either.

/ operator: the same as * except use the minimum of the two weights.

% operator: create a new DooDad whose color is “red”, with a weight that is the sum of

both weights and whose value is the weight of the right DooDad

It is recommended that you used a “private” method (one whose name begins with an

underscore character ) as a helper method to do the color selection for * and / operations.

DooDads should provide a __repr__ to provide the string format in the example below.

The DooDadX class inherits from the DooDad class and differs from it in the following

ways:

• serial numbers are negative integers (see output below).

• The % operator (when the left operand is a DooDadX) will produce a green

DooDadX whose weight is the maximum of the two weights. Value is computed the

same as for the % operator in the DooDad class

• The fact that this is a DooDadX instead of a DooDad is noted when you print a

DooDadX

The following testing code is provided on D2L and should be included at the bottom of the

PA6.py file that you submit. Don’t change this code because I will likely also import your

classes from another program and they must be named and work as specified.

if __name__ == “__main__”:

doodads = [] # will hold both DooDad’s and DooDadX’s

doodads.append(DooDad(“red”,5,10))

doodads.append(DooDad(“red”,8,9))

doodads.append(DooDad(“blue”,20,15))

doodads.append(DooDad(“green”,2,5))

doodads.append(DooDadX(“blue”,10,12))

doodads.append(doodads[0] + doodads[1])

doodads.append(doodads[2] + doodads[0])

doodads.append(doodads[3] – doodads[1])

doodads.append(doodads[1] – doodads[3])

doodads.append(doodads[0] * doodads[1])

doodads.append(doodads[0] * doodads[2])

doodads.append(doodads[0] / doodads[3])

doodads.append(doodads[2] % doodads[4])

doodads.append(doodads[4] % doodads[2])

for doodad in doodads:

print(doodad)

Output from the above:

red DooDad weighing 5 grams. Value = 10 points. S/N=1001

red DooDad weighing 8 grams. Value = 9 points. S/N=1002

blue DooDad weighing 20 grams. Value = 15 points. S/N=1003

green DooDad weighing 2 grams. Value = 5 points. S/N=1004

blue DooDadX weighing 10 grams. Value = 12 points. S/N=-1005

red DooDad weighing 8 grams. Value = 90 points. S/N=1006

blue DooDad weighing 20 grams. Value = 25 points. S/N=1007

green DooDad weighing 8 grams. Value = 5 points. S/N=1008

red DooDad weighing 2 grams. Value = 5 points. S/N=1009

red DooDad weighing 8 grams. Value = 9.5 points. S/N=1010

green DooDad weighing 20 grams. Value = 12.5 points. S/N=1011

blue DooDad weighing 2 grams. Value = 7.5 points. S/N=1012

red DooDad weighing 30 grams. Value = 10 points. S/N=1013

green DooDadX weighing 20 grams. Value = 20 points. S/N=-1014

Submit your program to the designated D2L dropbox. Your program should be named

PA6.py Remember that early submissions gain a bonus percent: 1 day early à 10%; 3 or

more days early à 20%.