Question: I'm posting this again because I still can't find a viable answer. This is my code I got a 10 out of 17. # function
I'm posting this again because I still can't find a viable answer.
This is my code I got a 10 out of 17.
# function to check commas def checkCommas(dataPoint): # to check if there is comma or not if ',' not in dataPoint: # Display an error message "No comma in string" print('Error: No comma in string.') return False # to check if the datapoint has more than one comma elif dataPoint.count(",") > 1: # Display an error message "Too many commas in input" print('Error: Too many commas in input.') return False # to check if there an integer after comma else: # find index. index = dataPoint.find(",") # split the datapoint name = dataPoint.split(",")[0] integer = (dataPoint.split(",")[1]).strip() # to check if the number is integer or not. if not (integer.isdigit()): # Display an error message "Comma not followed by an integer" print('Error: Comma not followed by an integer.') return False else: return True # function definition of table() which prints the information in a formatted table def table(title, header1, header2, nameList, numberList): # to print the title print(" %33s" %(title)) # to print the header print("%-19s %-7s %-10s" %(header1, "|", header2)) print("--------------------------------------------") # to print the list in formatted table for i in range(0, len( nameList)): print("%-19s %-7s %-10d " %(nameList[i], "|", numberList[i])) print(" ") # function definition of histogram() which prints the information as a formatted histogram def histogram( nameList, numberList): # to print the list as a formatted histogram for i in range(0, len( nameList)): print(" %20s %-5s " %( nameList[i], " "), end = "") for j in range(0, numberList[i]): print("*", end="") print(" ") # main function def main(): nameList = [] # to hold the string part of the data points. numberList = [] # to hold the integer part of the data points. # Prompt the user to enter a title for data title = input('Enter a title for the data: ') print("You entered: " + title) # Prompt the user to enter the header for column 1 of a table header1 = input(' Enter the column 1 header: ') print("You entered: " + header1) # Prompt the user to enter the header for column 1 of a table header2 = input(' Enter the column 2 header: ') print("You entered: " + header2) # Prompt the user to enter data points dataPoint = input(" Enter a data point (-1 to stop input): ") while dataPoint != "-1": # Call to the function to check for commas commas = checkCommas(dataPoint) #if there is only one comma and data entered is correct,split the data if commas: name = dataPoint.split(",")[0] integer = int((dataPoint.split(",")[1]).strip()) # Print the datapoint on console print("Data string: " + name) print("Data integer: " + str(integer)) # Store data in the list nameList.append(name) numberList.append(integer) # Prompt the user to enter data points dataPoint = input(" Enter a data point (-1 to stop input): ") # to output the information in a formatted table, call the function table() table(title, header1, header2, nameList, numberList) # to output the information as a formatted histogram, call the function histogram() histogram(nameList, numberList) # Call the main function. main()My output for the columns are wrong.
.
And this is what is expected.

7.7 Ch 7 Program: Data visualization (Python 3)
(1) Prompt the user for a title for data. Output the title. (1 pt) Ex:
Enter a title for the data: Number of Novels Authored You entered: Number of Novels Authored
(2) Prompt the user for the headers of two columns of a table. Output the column headers. (1 pt) Ex:
Enter the column 1 header: Author name You entered: Author name Enter the column 2 header: Number of novels You entered: Number of novels
(3) Prompt the user for data points. Data points must be in this format: string, int. Store the information before the comma into a string variable and the information after the comma into an integer. The user will enter -1 when they have finished entering data points. Output the data points. Store the string components of the data points in a list of strings. Store the integer components of the data points in a list of integers. (4 pts) Ex:
Enter a data point (-1 to stop input): Jane Austen, 6 Data string: Jane Austen Data integer: 6
(4) Perform error checking for the data point entries. If any of the following errors occurs, output the appropriate error message and prompt again for a valid data point.
If entry has no comma
Output: Error: No comma in string. (1 pt)
If entry has more than one comma
Output: Error: Too many commas in input. (1 pt)
If entry after the comma is not an integer
Output: Error: Comma not followed by an integer. (2 pts)
Ex:
Enter a data point (-1 to stop input): Ernest Hemingway 9 Error: No comma in string. Enter a data point (-1 to stop input): Ernest, Hemingway, 9 Error: Too many commas in input. Enter a data point (-1 to stop input): Ernest Hemingway, nine Error: Comma not followed by an integer. Enter a valid data point: Ernest Hemingway, 9 Data string: Ernest Hemingway Data integer: 9
(5) Output the information in a formatted table. The title is right justified with a minimum field width value of 33. Column 1 has a minimum field width value of 20. Column 2 has a minimum field width value of 23. (3 pts) Ex:
Number of Novels Authored Author name | Number of novels -------------------------------------------- Jane Austen | 6 Charles Dickens | 20 Ernest Hemingway | 9 Jack Kerouac | 22 F. Scott Fitzgerald | 8 Mary Shelley | 7 Charlotte Bronte | 5 Mark Twain | 11 Agatha Christie | 73 Ian Flemming | 14 J.K. Rowling | 14 Stephen King | 54 Oscar Wilde | 1
(6) Output the information as a formatted histogram. Each name is right justified with a minimum field width value of 20. (4 pts) Ex:
Jane Austen ****** Charles Dickens ******************** Ernest Hemingway ********* Jack Kerouac ********************** F. Scott Fitzgerald ******** Mary Shelley ******* Charlotte Bronte ***** Mark Twain *********** Agatha Christie ************************************************************************* Ian Flemming ************** J.K. Rowling ************** Stephen King ****************************************************** Oscar Wilde *
Number of Novels Authored Author name Number of novels ane Austen Charles Dickens Ernest Hemingway Jack Kerouac F. Scott Fitzgerald I Mary Shelley Charlotte Bronte Mark Twain Agatha Christie Ian Flemming J.K. Rowling Stephen King OscarWilde 20 73 14 14 5 4 1 ane AUsten Charles Dickens Ernest Hemingway Jack Kerouac F. Scott Fitzgerald Charlotte Bronte Mark Number of Novels Authored Author name Number of novels ane Austen Charles Dickens Ernest Hemingway Jack Kerouac F. Scott Fitzgerald I Mary Shelley Charlotte Bronte Mark Twain Agatha Christie Ian Flemming J.K. Rowling Stephen King OscarWilde 20 73 14 14 5 4 1 ane AUsten Charles Dickens Ernest Hemingway Jack Kerouac F. Scott Fitzgerald Charlotte Bronte Mark
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
