CSc 110 - Short PA - Shaper

In this programming assignment, you will be writing a program that prints out several shapes via text. In this PA, you will be required to use functions and parameters. This is both to reduce redundancy and to make your code clean and well-structured. Name your program shaper.py.

Your program should have the capability to print out three different shapes: An hourglass, a plumbbob, or a house. Below is a table that shows examples of each of these shapes.

hourglass plumbbob house
|---------|
***********
 *********
  *******
   *****
    ***
     *
     *
    ***
   *****
  *******
 *********
***********
|---------|
     !
    !!!
   !!!!!
  !!!!!!!
 !!!!!!!!!
!!!!!!!!!!!
|---------|
|---------|
|---------|
|---------|
!!!!!!!!!!!
 !!!!!!!!!
  !!!!!!!
   !!!!!
    !!!
     !
     ^
    ^^^
   ^^^^^
  ^^^^^^^
 ^^^^^^^^^
^^^^^^^^^^^
|---------|
|---------|
|---------|

Notice that there are some common shapes within these larger shapes. All three utilize the |---------| line. All three utilize an upward-facing arrow. Both the hourglass and the plumbbob Have a downward-facing arrow. The characters in the arrows may differ, but the overall shapes are the same (other than the two directions).

Input Values

Your program should accept two values as input. The first should be a selection of the shape to print. It should check for hourglass, plumbbob, and house. After asking for the shape, the program should ask for a single character, which should be used for the arrow(s). It should also ask for an integer, which will determine the number of |---------| rows to print out at one or more location(s) in the shape.

If a supported shape is entered, the program should print out that shape utilizing the character for the arrow(s). If none of the three valid shapes are entered, the program should print out a message and then the program can end, or you can ask the user for the input repeatedly until a valid one is entered. You do not need to validate the single-character or integer input. See the examples to determine what the prompts and message should be.

Program Structure

In your program, you should write a function that allows you to print out these three sub-shapes. You should write one function for the upward-facing arrow, one for the downward-facing arrow, and one to print any number of rows of |---------|. Each of these functions should take one parameter. The two arrow functions should take the character that the arrow should be made up of as a parameter. The row function should accept an integer, which will determine the number of rows to print.

Restrictions

Examples

Enter shape to display:
house
Enter arrow character:
#
Enter row-area height:
3

     #
    ###
   #####
  #######
 #########
###########
|---------|
|---------|
|---------|
Enter shape to display:
plumbbob
Enter arrow character:
5
Enter row-area height:
4

     5
    555
   55555
  5555555
 555555555
55555555555
|---------|
|---------|
|---------|
|---------|
55555555555
 555555555
  5555555
   55555
    555
     5
Enter shape to display:
Enter shape to display:
house
Enter arrow character:
^
Enter row-area height:
3

     ^
    ^^^
   ^^^^^
  ^^^^^^^
 ^^^^^^^^^
^^^^^^^^^^^
|---------|
|---------|
|---------|

There will be additional test cases on Gradescope.

Turning it In

This program is due Saturday, October 3rd at 7:00pm. Turn it in on Gradescope. You should get your submission to pass as many of the test cases as possible. Also, ensure that your code conforms to the code style requirements.