$30
1
CIS 122 Project 6 read files
Briefly
This entire project focuses on reading .txt files into lists and
working with those lists.
You'll discover that it takes surprisingly little effort to convert a
program from handling a list of 20-some items to a list of 200,000-
some items.
For files with several data items per line, you'll use a list of little
"sub-lists".
P6_read_words1.py
10 points
Copy the sowpods_short.txt file to your program folder.
Open the text file, read each line into a list;
If the filename contains the word "short", print
the list of words.
Repeatedly:
Ask user for a word
Tell whether the word was in your list of words
P6_read_words2.py
7 points
Use the same logic exactly as P6_read_words1.py
except, copy the sowpods.txt file to your program
folder.
Change the filename to sowpods.txt, but leave
everything else the same.
You now have a program that lets you see if the word
you entered is in the 267,751 word British list
of legal scrabble words.
Notice that you needed almost no change except for
filename to handle about 10 thousand times the
data volume.
The fancy term for this is scaling.
Your program "scales well" when you only need to
change the filename to handle thousands of times more
data.
P6-read_words_bonus.py
3 bonus points
Change your P6_read_program to allow 2 options
M Match the word the user typed exactly
S Starts with – Match all words
Start first with the sowpods_short.txt file.
Starts with will have issues – selecting all words that
start with "m" works well on the short file and
overwhelms on the long file.
One strategy is to break up selecting matching words
from printing matching words into 2 distinct steps.
Before printing in detail, inform your user about how
many matching words were found, and ask whether to
proceed.
It's also a good idea to ask periodically whether to keep
printing.
P6_read_states1.py
5 points
You will copy the state_data.txt file to your program
folder.
Each line in this file has several data items:
State name followed by a comma
Capital city followed by a comma
Area in square kilometers followed by a comma
Population in millions such as 3.9 followed by a comma
Your program will read the data into a list of states; each
item in the list is a details list somewhat like this
['oregon','salem',345678,3.8]
Once your program has read the data into the states list,
it repeatedly asks the user to type the start of a state
name or 'quit'.
It then displays each state or states that start with the
letters the user provided.
Your data must line up nicely in neat columns for more
than 2 points credit.
1 point bonus
Display the computed density of people per square
kilometer in your state display of data.
P6_read_states2.py
5 points
Also reads and processes the states_data.txt file and
its comma separated list of values.
User search options are extended to include
S State name Starts with
C State name Contains
E State name Ends with
Q Quit
You also will need to line up the data neatly in columns
for full credit.
Bonus 2 _ 1 point
Display density (people per square km) and
select on density greater than a user-supplied number.
The week 6 module has an example program with several
functions that should prove useful to writing and debugging these
programs.
The next page shows some example output from the programs.
2
P6_read1.py
Sample results
10 points:
2 point Your program reads each word, strips newlines
and skips any line starting with #
1 point Display list of words read in to a word list
1 point Display number of words in word list
2 points User interaction includes a way to quit that does not
use a word (for example, "$" to quit).
2 points User-entered word correctly found in list
2 points User-entered word (albania for example) not found in
list.
P6_read2.py 5 points
Sample results
5 points
-2 points printing all words
3 points Program is same as P6_read1.py except for filename.
1 point Program correctly finds words in large word list
1 point Program quits, but not using any specific word to quit
P6_read_states1.py
Sample results
5 points
1 point Read state data into a states list of sublists.
1 point Select states starting with specified letters
1 point Program converts area and population data into
integer and float values
1 point Display state name and capital titled (Oregon, not oregon)
in neat uniform width columns
1 point Display area in square kilometers with numbers lining
up as shown, with commas in number
and population figures line up nicely too as float numbers
with one digit after decimal point.
Bonus available only if all prior points in read_states1.py met:
1 point
Display population density per square kilometer
correctly:
P6_read_states2.py
5 points
Also reads and processes the states_data.txt file and
its comma separated list of values.
User search options are extended to include
S State name Starts with
C State name Contains
E State name Ends with
Q Quit
1 point Display menu of options
1 point Display states whose name starts with user-supplied
letters
1 point Display states whose name contain the user-supplied
letters
1 point Displays states whose name ends with the user-supplied
letters
1 point Data lines up in neat columns for good readability
Starts with example
3
Contains example
This example shows that after you finish each selection, your
program re-displays the options.
Ends with example
Bonus 2 - 1 point
Note that you could display density (people per square kilometer);
you could see if you can select states based on population density
greater than a given number.
Here's an example of displaying density
If your programs selects based on density, it must also display
density.