Reference no: EM132356197
INTRODUCTION
The goal of this programming project is to enable students practice solving a problem that uses the Python features of functions and lists.
PROBLEM
Write a program that inputs names of personal expenses and a corresponding amount for each expense. The program should store all input data in lists. The program should then allow the user to select how the information will be displayed from the list of (a) pie chart (b) bar chart (c) table. The program should achieve this in functions described below. To ensure good programming and modularity, none of the functions should call itself and the only function calls should be in the main function. Functions should not be defined inside other functions. At the bottom, there should be a statement that calls the main function.
Here are the descriptions of what should be in the functions:
1. main
This function will have statements to call the other functions. The first function called will input names of the expenses into a list and assign the list to a list object. The second call will pass the expense items list to a function that inputs expense amounts into a second list that is then assigned to a list object. The third call passes the two lists to a function that will display the contents on the two lists. Here are the Python statements:
expense_items_list = inputExpenseNames()
expense_amounts_list = inputExpenseAmounts(expense_items_list)
displayExpenseReport(expense_items_list, expense_amounts_list)
2. inputExpenseNames
First create an empty list for expense items. Next, enter a loop that iterates for as long as the user responds that there are more item names to enter. In the loop, display a message asking the user to input the name of an expense item, then input the name and append it to the list. Then input a response to the question whether there are more item names. After the loop ends, return the expense items list.
3. inputExpenseAmounts
Create an empty list for expense amounts. Enter a loop that uses the size (you may use the len function) of the expense_items_list to determine number of iterations. For each iteration, display a message that says:
How much was spent on xxxxxxxxxx expense item?
where xxxxxxxxxx is replaced by the name from the expense_items_list corresponding to the current iteration. The amount should then be input and appended to the expense amounts list. Input validation should be done including using try ... except ... to ensure a number was entered.
After the loop ends, return the expense amounts list.
4. displayExpenseReport
Parameters to this function will be the expense items and expense amounts lists. Your program should offer the user the menu of (a) table display (b) pie chart (c) bar chart. When the user selects option (a), the program should output column headings and then enters a loop that iterates as many times as the size of the expense items list and outputs the contents of the lists. The total of the amounts in the expense amounts list should be computed. After exiting the loop, the program should display the totals line of the report. Use the format function and format strings. Here is an example of what the output may look like.
EXPENSE ITEM AMOUNT
------------------- ------------
Rent 450.00
Car loan payment 375.50
Food and groceries 250.00
Electricity 75.00
Water 35.68
TOTALS 1,186.18
When the user selects option (b), the program should output a pie chart of the data in the lists using matplotlib.
When the user selects option (c), the program should output a bar chart of the data in the lists using matplotlib.
PROGRAM STYLE REQUIREMENTS
Your program should start with several comment lines that state your name and the purpose of the program as well as the date the program was written.
There should be a comment just before each function to state the purpose of the function and what parameters it takes as well as what it returns. Furthermore, there should be a comment to the right of each variable declaration (no comment inside parameter list) to briefly state what the variable will store. There should be a comment before every loop and every if statement to state what the loop/if is doing.