Assignment Overview1 This assignment focuses on the design, implementation and testing of a Python program which uses file processing, lists and strings to solve the problem described below. Program Specifications: The New York Times newspaper has published “best seller” lists since 1942. Book sales are tracked nationwide, leading to a list of those books which have recently sold the most copies. You will design, implement and test a program which allows the user to search a subset of the books which have appeared in the New York Times best seller lists. For simplicity, the data set will only contain those books which have reached #1 on either the fiction or nonfiction list since 1942.
The file named bestsellers.txt contains the data set. Each line of the file contains the information for a separate book, which includes: title, author, publisher, date it first reached #1 on one of the best seller lists, and category (fiction or nonfiction). There is a tab character between fields.
The program will input the data set and construct a list of books. Code for reading the contents of a text file into a list and splitting this list into a list of lines is provided in the helper.py file.
After constructing the list of books, the program will prompt the user for two years (a starting year and an ending year), then display all books which reached the #1 spot between those two years (inclusive). For example, if the user entered “1970” and “1973”, it will display all books which reached #1 in 1970, 1971, 1972 or 1973.
Input validation should be performed on user inputs. The only valid inputs are the beginning year, ending year (range 1942-2014) and ‘q’ or ‘Q’ for quit. User should be prompted until a valid input is received.
So far this is what I've gotten:
openBook = open('bestsellers.txt')
Lst = openBook.read()
list1 = Lst.split('\n')
global beginYear
global endYear
def validateYear():
while True:
try:
# User inputs beginning and ending year and also validates the input
beginYear = input("Enter a beginning year (enter 'q' or 'Q' to quit): ")
if beginYear == 'q' or beginYear == 'Q':
print("Thank you!")
break
beginYear = int(beginYear)
except ValueError:
continue
if beginYear < 1942 or beginYear > 2014:
print("Year must be in the range 1942-2014.")
continue
endYear = input("Enter an ending year: ")
endYear = int(endYear)
if endYear < 1942 or endYear > 2014:
print("Year must be in the range 1942-2014.")
continue
return(beginYear, endYear)
I had a code to try and print the list I wanted it to search for but instead it printed the whole text file instead of the lines within the 2 years.
I want the program to acknowledge the begin and end year, search for those years in the text file, and print the lines within the two years the user had input.
Here is a pseudocode:
Algorithm in pseudocode :
Open bestseller file as inputFile
Read inputFile data into list bookList
Split bookList into a list of strings with each string storing one line of bestseller file
Loop
Prompt user for beginning year
If input is equal to ‘q’ or ‘Q’
Terminate loop
Validate beginning year
Prompt user for ending year
Validate ending year
For each string in list bookList do
Split string into words using tab as the delimiter
For each word in string do If word contains ‘/’ then
Split word into month, day and year using ‘/’ as the delimiter
If year in the range start year to end year inclusive then
Display string
End loop
And here is an example:
Enter beginning year (‘q’ or ‘Q’ for quit): 1960
Enter ending year: 1962
All Titles between 1960 and 1962
A Shade of Difference Allen Drury Doubleday 10/28/1962 Fiction
Hawaii James Michener Random House 1/17/1960 Fiction
Seven Days in May Fletcher Knebel Harper 11/18/1962 Fiction
Ship of Fools Katherine Anne Porter Little, Brown 4/29/1962 Fiction
The Agony and the Ecstasy Irving Stone Doubleday 4/23/1961 Fiction
The Last of the Just Andre Schwarz-Bart Atheneum 3/26/1961 Fiction
Born Free Joy Adamson Pantheon 8/7/1960 Nonfiction
Calories Don't Count Herman Taller Simon & Schuster 3/25/1962 Nonfiction
May This House Be Safe from Tigers Alexander King Simon & Schuster 3/13/1960 Nonfiction
Silent Spring Rachel Carson Houghton Mifflin 10/28/1962 Nonfiction
The Making of the President - 1964 Theodore H. White Atheneum 8/1/1965 Nonfiction
The New English Bible Oxford University Press (Editor) Oxford University Press 5/28/1961 Nonfiction
The Rise and Fall of the Third Reich William Shirer Simon & Schuster 12/4/1960 Nonfiction
The Rothchilds Frederic Morton Atheneum 6/24/1962 Nonfiction
The Waste Makers Vance Packard McKay 11/6/1960 Nonfiction
Travels with Charley John Steinbeck Viking 10/21/1962 Nonfiction
Enter beginning year (‘q’ or ‘Q’ for quit): Q
I've been trying this for a couple days now and still my mind is still blank.
Thank you for your co-operation.