CSC111 Lab 5 2015

From dftwiki3
Revision as of 17:34, 23 February 2015 by Thiebaut (talk | contribs) (Challenge #6)
Jump to: navigation, search

--D. Thiebaut (talk) 12:17, 22 February 2015 (EST)


<showafterdate after="20150225 11:00" before="20150601 00:00">

Preparation


  • 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


# 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 
    fileNames = [ "chocoQuotes.txt", "hargitay.txt", "joanneHarris.txt" ]

    # get each file, one at a time
    for fileName in fileNames:

        # url where the files are located
        url = "http://cs.smith.edu/~dthiebaut/111/files/" + fileName

        # fetch the file and put its contents in the
        # strign text.
        response = urllib.request.urlopen( url )
        text     = response.read().decode( 'UTF-8' )
        
        # write text to file, in the same directory as this program.
        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()


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:
Deliciusness 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 #1

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:           
                Deliciusness in the moment,                 
                    childhood memories,                     
                   and that grin-inducing                   
        feeling of getting a reward for being good.         
                     --Mariska Hargitay




Challenge #2

QuestionMark2.jpg
  • Make your program print the first line of the poem, centered, but also in uppercase.
  • Make it display the other lines centered, without changing their case.
  • Expected output


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



Challenge #3

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.
  • Expected output


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



Challenge #4

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:      |
|           Deliciusness in the moment,            |
|               childhood memories,                |
|              and that grin-inducing              |
|   feeling of getting a reward for being good.    |
|                                --Mariska Hargitay|
+--------------------------------------------------+



Reading Text From Files


  • 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 )

</showafterdate>

  • 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 #5

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, as you did in Challenge 4.
  • 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 #6

QuestionMark6.jpg
  • Exact same challenge as Challenge 5, 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()

    lines = text.split( "\n" )
    for line in lines:
        print( line.strip() )