Difference between revisions of "CSC111 Lab 5 2015b Part 2"

From dftwiki3
Jump to: navigation, search
(Created page with "--~~~~ ---- =Preparation For Processing Files= <br /> * Copy paste the program below in a new Idle window, and call it '''lab5Companion.py'''. * Save your new program to you...")
 
(Splitting Long Strings (Optional: Skip it if you do not have time))
 
(One intermediate revision by the same user not shown)
Line 82: Line 82:
 
|
 
|
  
===Challenge #3===
+
===Challenge #4===
 
|}
 
|}
 
[[Image:QuestionMark5.jpg|right|120px]]
 
[[Image:QuestionMark5.jpg|right|120px]]
Line 99: Line 99:
 
|
 
|
  
===Challenge #4===
+
===Challenge #5===
 
|}
 
|}
 
[[Image:QuestionMark6.jpg|right|120px]]
 
[[Image:QuestionMark6.jpg|right|120px]]
Line 152: Line 152:
 
|
 
|
  
===Challenge #5===
+
===Challenge #6===
 
|}
 
|}
 
[[Image:QuestionMark7.jpg|right|120px]]
 
[[Image:QuestionMark7.jpg|right|120px]]
Line 164: Line 164:
 
==Moodle Submission==
 
==Moodle Submission==
 
<br />
 
<br />
Rename your program '''lab5_5.py''', and submit your solution program for Challenge #5 to Moodle, in the Lab 5 PB 5 section.
+
Rename your program '''lab5_6.py''', and submit your solution program for Challenge #5 to Moodle, in the Lab 5 PB 5 section.
 
<br />
 
<br />
 
<br />
 
<br />
=Splitting Long Strings (Optional: Skip it if you do not have time)=
+
=Splitting Long Strings=
 
<br />
 
<br />
 
<tanbox>
 
<tanbox>
Line 211: Line 211:
 
|
 
|
  
===Challenge #6===
+
===Challenge #7===
 
|}
 
|}
 
[[Image:QuestionMark1.jpg|right|120px]]
 
[[Image:QuestionMark1.jpg|right|120px]]
Line 235: Line 235:
 
|
 
|
  
===Challenge #7===
+
===Challenge #8===
 
|}
 
|}
 
[[Image:QuestionMark2.jpg|right|120px]]
 
[[Image:QuestionMark2.jpg|right|120px]]
Line 264: Line 264:
 
|
 
|
  
===Challenge #8===
+
===Challenge #9===
 
|}
 
|}
 
[[Image:QuestionMark3.jpg|right|120px]]
 
[[Image:QuestionMark3.jpg|right|120px]]
Line 293: Line 293:
 
|
 
|
  
===Challenge #9===
+
===Challenge #10===
 
|}
 
|}
 
[[Image:QuestionMark4.jpg|right|120px]]
 
[[Image:QuestionMark4.jpg|right|120px]]
Line 316: Line 316:
 
<br />
 
<br />
 
<br />
 
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
<br />
 +
[[Category:CSC111]][[Category:Python]][[Category:Labs]]

Latest revision as of 15:47, 6 October 2015

--D. Thiebaut (talk) 16:10, 6 October 2015 (EDT)


Preparation For Processing Files


  • Copy paste the program below in a new Idle window, and call it lab5Companion.py.
  • Save your new program to your working directory, where you normally save your lab programs.
  • Run the program. It should create 3 text files in your folder. You will be using them in this lab. The files are called:
    • chocoQuotes.txt
    • hargitay.txt
    • joanneHarris.txt


[19:14:51] ~/Desktop/temp$: cat lab5prep.py
# lab5Companion.py
# D. Thiebaut
# This program will create several files in the directory
# where you will run it.
# The files are retrieved from a Web server, stored temporarily
# in a string, and stored in a local file on your disk.
# The 3 files are very, very short.
# Their names are:
# - chocoQuotes.txt
# - hargitay.txt
# - joanneHarris.txt

import urllib.request  # the lib that handles the url stuff

# main program
def main():

    # list of files to retrieve 
    URLs = [ "http://cs.smith.edu/~dthiebaut/111/files/chocoQuotes.txt", 
             "http://cs.smith.edu/~dthiebaut/111/files/hargitay.txt", 
             "http://cs.smith.edu/~dthiebaut/111/files/joanneHarris.txt" ]

    # get each file, one at a time
    for url in URLs:
        # fetch the file and put its contents in the
        # string text.
        response = urllib.request.urlopen( url )
        text     = response.read().decode( 'UTF-8' )
        
        # write text to file, in the same directory as this program.
        fileName  = url.split( "/" )[-1]
        file      = open( fileName, "w" )
        file.write( text + "\n" )
        file.close()

        # give feedback to user.
        print( "File {0:1} created in your folder".format( fileName ) )


main()


Reading Text From File


  • Open Finder or Windows Explorer and go to the folder that contains your lab5.py program, as well as your lab5Companion.py programs. Make sure the folder contains the 3 text files you created earlier.
  • Open the file name hargitay.txt. Verify that it contains the same poem we have been playing with.
  • Either create a new program or add a new main() function to your existing program (rename the original main, main2(), maybe?), and put the code below in the new function:


def main():
    fileName = "hargitay.txt"
    file = open( fileName, "r" )
    lines = file.readlines()
    file.close()

    for line in lines:
        print( line )
  • Run the program. Observe its output.
  • The reason for the double-spacing is that each line read from the file contains a '\n' at the end of it. And when you print such a line, the print() function adds its own \n at the end. This is why you get a blank line in between lines.
  • One way to remove the '\n' at the end of each line is to print the line as follows: print( line.rstrip() ). The rstrip() method right-strips the string of all white-space characters, which include spaces, tabs, and '\n'-characters.



Challenge #4

QuestionMark5.jpg
  • Make your program get the name of the file from the user, with an input() statement.
  • Then, make your program output the contents of the file in a box.
  • Test your program by providing it with different file names:
    • hargitay.txt
    • joanneHarris.txt
    • chocoQuotes.txt
  • Adjust the width of the box if necessary.



Challenge #5

QuestionMark6.jpg
  • Exact same challenge as Challenge 3, but this time start with this program, where I have replaced the .readlines() method with .read().


def main():
    fileName = input( "File name? " )
    file = open( fileName, "r" )
    text = file.read()
    file.close()

    print( "The type of text is", type( text ) )
    print( "text = ", text )


Note
when Python says that something is of type <class 'str'>, it means that it is a string.



Writing Text to File


  • Try this new version of main:


def main():
    fileName = "hargitay.txt"
    file = open( fileName, "r" )
    text = file.read()
    file.close()
    
    text = text.replace( "chocolate", "carrot" )
    text = text.replace( "Chocolate", "Carrot" )

    file = open( fileName, "w" )
    file.write( text + "\n" )
    file.close()


  • Open Finder or Windows Explorer, and take a look at the file "hargitay.txt", either with TextEdit or with Notepad. See anything different?
  • BTW, You can recreate the original file by running the lab5Companion.py program again.




Challenge #6

QuestionMark7.jpg
  • Modify the program so that it prompts the user for
    • The name of the file to read from and write to, and
    • a word
and make the program read the file, replace the word chocolate in it with the word the user picked, and save the resulting text back to the file.
  • Verify that your program works correctly, and that it modifies the file you select and replaces chocolate with the word you choose.


Moodle Submission


Rename your program lab5_6.py, and submit your solution program for Challenge #5 to Moodle, in the Lab 5 PB 5 section.

Splitting Long Strings


In this section you will see how to take text represented as a multi-line string, and process it various ways.


  • Long strings that span several lines can be created by enclosing them in triple quotes; either triple single-quotes (), or triple double-quotes (""").
  • Copy/paste the program below in a new program. You may call it lab5.py


# lab5.py

text = """Chocolate
Chocolate is the first luxury.
It has so many things wrapped up in it:
Deliciousness in the moment,
childhood memories,
and that grin-inducing
feeling of getting a reward for being good.
--Mariska Hargitay"""

def main():
    # make sure main knows that this variable exists
    global text
    
    # split the long string into individual lines
    lines = text.split( "\n" )

    # print each line
    for line in lines:
        print( line )

main()


  • Run the program. Verify that it outputs the entirety of the text.
  • Just to make sure we understand what the variable lines contain, make your program print lines, with a simple print( lines ) statement.
  • Observe that it's just a regular Python list.



Challenge #7

QuestionMark1.jpg
  • Modify your program, and make it print the poem so that each line is centered in a field of 60 spaces. You must use the text variable, and print its line. Do not create a new version of the poem!
  • Expected output


                         Chocolate                          
               Chocolate is the first luxury.               
          It has so many things wrapped up in it:           
                Deliciousness in the moment,                 
                    childhood memories,                     
                   and that grin-inducing                   
        feeling of getting a reward for being good.         
                     --Mariska Hargitay




Challenge #8

QuestionMark2.jpg
  • Make your program print the first line of the poem, centered, but also in uppercase.
  • If you need to review the string methods, you may want to go to this page.
  • Print a blank line after the title.
  • Make it display the other lines centered, without changing their case.
  • Print a blank line before the last line.
  • Expected output


                         CHOCOLATE             
             
               Chocolate is the first luxury.               
          It has so many things wrapped up in it:           
                Deliciousness in the moment,                 
                    childhood memories,                     
                   and that grin-inducing                   
        feeling of getting a reward for being good.         

                     --Mariska Hargitay



Challenge #9

QuestionMark3.jpg
  • One more modification. Now make your program print the last line right-justified in a field of 60 spaces.
  • The first line is still in upper-case.
  • Make it display the other lines centered, without changing their case.
  • If you need to review the string methods, you may want to go to this page.
  • Expected output


                         CHOCOLATE         
                 
               Chocolate is the first luxury.               
          It has so many things wrapped up in it:           
                Deliciousness in the moment,                 
                    childhood memories,                     
                   and that grin-inducing                   
        feeling of getting a reward for being good. 
        
                                          --Mariska Hargitay



Challenge #10

QuestionMark4.jpg
  • Make your program print the poem in a box. The top and bottom lines have 50 dashes in them.
  • Expected output


+--------------------------------------------------+
|                    CHOCOLATE                     |
|                                                  |
|          Chocolate is the first luxury.          |
|     It has so many things wrapped up in it:      |
|           Deliciousness in the moment,           |
|               childhood memories,                |
|              and that grin-inducing              |
|   feeling of getting a reward for being good.    |
|                                                  |
|                                --Mariska Hargitay|
+--------------------------------------------------+