OPS435 Python Lab 2

From CDOT Wiki
Revision as of 08:10, 26 May 2017 by Msaul (talk | contribs) (PART 1 - Using IF Statements)
Jump to: navigation, search

LAB OBJECTIVES

This lab will cover the necessary methods to allow a user to interact with a running Python script.
Objectives
Write Python code in order to:
  • Accept information from users that run a Python script, such as a username or password.
  • Process the inputted information using Logic Statements.
This means that the program will completely change how it works based on the input given, an example would be, providing the correct password or providing the wrong password.
  • Process the inputted information using Looping Statements.
Looping (iteration) is the ability for your program to repeatedly run the same code over and over. An example of this, could be found when you provide the incorrect password to a login page and it responds with, 3 attempts to login remaining.



INVESTIGATION 1: USER INPUT

PART 1 - User Input

In this section, you will learn how to prompt (ask) the user running the program for input or data. Although you will not be immediately be using the information that the user provided, you will use that information later in this lab to change how a Python script works under different situations.

Storing User Input In Variables

Perform the following steps:
  1. Launch your Centos VM, open a shell terminal (as a regular user) and start a new ipython3 session:
    ipython3
  2. To begin, let's start out with a very basic script. This script will use variables that will display specific information to your terminal. Move to your ~/ops435/lab2 directory, create the file lab2a.py with a text editor containing the following content:
    #!/usr/bin/env python3
    
    name = 'Jon'
    age = 20
    print('Hi ' + name + ', you are ' + str(age) + ' years old.')
  3. Try running this script inside ipython3 and study the output:
    run lab2a.py
    This Python script is not very useful: it displays the same output regardless of the number of times that the Python script is run.
    The input() function is used to obtain information from the user and store it into a variable. It is recommended to place a question (or hint) as a argument in the input() function: this will aid the user in typing in the correct information.

  4. Return to your ipython3 shell and type the following code (do NOT edit the lab2a.py file, just issue from the shell):
    colour = input("Type in a colour and press enter: ")
  5. When prompted, type the text: red and press ENTER. Did anything display? Why not?
  6. Issue the following in the ipython3 shell:
    print(colour)
    What was displayed?
  7. Issue the following in the ipython3 shell:
    print('The colour I typed in is: ' + colour)
    Note what was displayed.
  8. Exit the ipython3 shell, download the checking script and check your work. Enter the following commands from the bash shell.
    cd ~/ops435/lab2/
    pwd #confirm that you are in the right directory
    ls CheckLab2.py || wget matrix.senecac.on.ca/~acoatley-willis/CheckLab2.py
    python3 ./CheckLab2.py -f -v lab2a
  9. Before proceeding, make certain that you identify any and all errors in lab2a.py. When the check script tells you everything is ok before proceeding to the next step.

Practice Storing User Input

Now it's time to create a new script to prompt the user to enter data and display that data on their terminal. Refer to variable name and prompt text information when creating your Python script. Refer to Sample Runs displayed below for exact prompt and output requirements.
Perform the following Instructions:
  1. Make a copy of lab2a.py and call it lab2b.py.
  2. Modify lab2b.py so that it prompts the user for both the user's name and age.
Input / Output Requirements
  • The script should have a Shebang line
  • The script should use a variable called name
  • The script should use a variable called age
  • The script should prompt the user for "Name: "
  • The script should prompt the user for "Age: "
  • The script should store the values in the correctly spelled variables (case sensitivity counts)
  • The script should print the EXACT OUTPUT as shown (case sensitivity counts)
Sample run 1:
run lab2b.py
Name: Jon
Age: 20
Hi Jon, you are 20 years old.
Sample run 2:
run lab2b.py
Name: Jen
Age: 25
Hi Jen, you are 25 years old.
3. Download the checking script and check your work. Enter the following commands from the bash shell.
cd ~/ops435/lab2/
pwd #confirm that you are in the right directory
ls CheckLab2.py || wget matrix.senecac.on.ca/~acoatley-willis/CheckLab2.py
python3 ./CheckLab2.py -f -v lab2b
4. Before proceeding, make certain that you identify any and all errors in lab2b.py. When the check script tells you everything is OK, you may procede to the next step.

PART 2 - Arguments

An argument is a value that is passed to a program or passed to a function that can be used for processing within that program or function. In the previous section, you passed an argument to the input() function. In this section, you will learn how to pass an argument to your Python script, but this time, this argument will be passed when we execute your Python script from the bash shell.

Perform the following steps:

  1. Access your ipython3 shell:
    ipython3
    In order to read arguments in Python, we will need to import special variables from the system. This is a standard 'library' of code provided by the developers of Python. By issuing import sys, you have loaded code written by another person, each 'library' that gets loaded will give us extra functionality in our program. This is done by issuing the import sys function within your ipython3 shell.

  2. Issue following to access your ipython3 shell and import special variables:
    import sys
  3. To inspect this library, and look at all that it contains, we can use the dir() function. This can be used to inspect any library (in fact, inspect other items other than libraries) in order to refer to functions and values that are available. Issue the following function:
    dir(sys)
    You may feel overwhelmed with all of this information, but not to worry, there are additional tools and tips on how to obtain information regarding these functions contain in the library.

  4. Issue the following functions and note what they do:
    print(sys.version) # tells us our python version
    print(sys.platform) # tells us our operating system platform
    print(sys.argv) # tells us our arguments or shell version if issued from shell
    sys.exit() # will immediately end the running Python script, ignoring the remaining lines in the Python script
    Note that the sys.exit() function will be useful later in this lab, make sure you write it down in your notes.

    Instead of using the input() function to prompt the user for data, we can use the sys.argv function to store data as a result of running the Python script with arguments. The sys.argv function, when used within your Python script can store the following:
    • sys.argv - stores all argument data
    • sys.argv[0] - stores the name of the script/program
    • sys.argv[1] - stores the first argument
    • sys.argv[2] - stores the second argument
    • etc...

  5. Create a new script called ~/ops435/lab2/showargs.py and add the following content:
    #!/usr/bin/env python3
    
    import sys
    
    arguments = sys.argv
    name = sys.argv[0]
    
    print('Print out ALL script arguments: ', arguments)
    print('Print out the script name: ' + name)
  6. Run the script and examine the output by running the Python script without and with arguments:
    run showargs.py
    run showargs.py testing different arguments
    run showargs.py argument1 argument2 argument3

Practice Using Arguments

Now it's time to create a new script, but unlike prompting the user for data, the data (as arguments from running your Python script) will be used instead. Refer to variable name and prompt text information when creating your Python script. Refer to Sample Runs displayed below for exact prompt and output requirements.
Perform the following Instructions:
  1. Make a copy of lab2b.py and call it lab2c.py.
  2. Modify lab2c.py to use the sys.argv[1] and sys.argv[2] functions instead of the input() function (used in your previous lab2b.py script).
Input / Output Requirements
  • The script should have a Shebang line
  • The script should contain import sys
  • The script should use a variable called name
  • The script should use a variable called age
  • The script should use sys.argv[1] (first argument)
  • The script should use sys.argv[2] (second argument)
  • The script should store the values in the correct variables (including case sensitivity)
  • The script should print the EXACT OUTPUT as shown (including case sensitivity)
Sample run 1:
run lab2c.py Jon 20
Hi Jon, you are 20 years old.
Sample run 2:
run lab2c.py Jen 25
Hi Jen, you are 25 years old.

Note that running Sample run 3 (shown below) will result in an error message. This error happens if you run the script without any arguments. It is important to note that an error such as this can occur, so you can avoid this type of error when creating Python scripts (explained in the next section). Let's continue in this section for now...
Sample run 3:
run lab2c.py
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)

...
...
...

IndexError: list index out of range
3. Download the checking script and check your work. Enter the following commands from the bash shell.
cd ~/ops435/lab2/
pwd #confirm that you are in the right directory
ls CheckLab2.py || wget matrix.senecac.on.ca/~acoatley-willis/CheckLab2.py
python3 ./CheckLab2.py -f -v lab2c
4. Before proceeding, make certain that you identify any and all errors in lab2c.py. When the check script tells you everything is OK, you may procede to the next step.

INVESTIGATION 2: USING LOGIC STATEMENTS

In computer programming, control flow statement can be used to change the direction (flow) of a program. In this section, you will focus on LOGIC control flow statements that are used to change the way each script runs, based entirely on input (either user input, or command arguments). In this section, we will discuss several LOGIC control flow statements including: IF, IF/ELSE, IF/ELIF/ELSE. an "if statement" is a condition that executes different code based on whether the condition is True or False.

PART 1 - Using IF Statements

Understanding If Statements

Perform the following steps
  1. Open an ipython3 shell:
    ipython3
  2. Let's create an if statement from the ipython3 shell. Issue the following 2 lines, indenting the second line:
    if True:
        print('This print is apart of the if statement')
    What happened? It is important to note a couple of things with the IF statement:
    • When an IF statement is True, it runs the code that is indented underneath it. In this case, we can use the boolean value "True" to make this happen, or test to see if a condition determined true or false.
    • Indentation means to start a line with spaces or tabs before your text. Using indentation will direct the script what code will run as part of the IF statement and which code will run as part of the main program. Also, using indentation makes it easier for a programmer to identify Control Flow statements. From this point on, be VERY careful and consistent in the indentation that you make with LOGIC statements.

    However, if the LOGIC statement is False, then it will not run the code indented underneath it. Any code not indented under the if statement will perform normally as the main program and is NOT associated with control flow statement.
  3. Issue the following 3 lines, indenting the second and third lines, but NOT the fourth line:
    if False:
        print('This first print statement will never run')
        print('This second print statement will also not run')
    print('This print statement will run')
  4. These if statements are using boolean logic, this means they are either True or False. The above code uses if statement that are ALWAYS set, next lets makes a if statement that runs under specific conditions.
    password = input('Please enter a secret password')
    if password == 'P@ssw0rd':
        print('You have succesfully used the right password')
  5. In the above example we are making a comparison between the value we enter int the input() function, which will be saved into the password variable, and with the word 'P@ssw0rd'. The '==' stands for is equal to, we are asking if the password variable is equal to the word 'P@ssw0rd'. If this condition is True, it will run the code indented below, if the condition is False, it will not run the code. Try experimenting with different combinations of passwords.
  6. If statements can also be used to compare numbers, and use functions. The function 'len()' can be used to give us the length of words and other variables. We can use this 'len()' function to give us the number of arguments provided to our script by using 'len(sys.argv)' and it should return a number. Below we are also using '!='. Which stands for not equal to.
    import sys
    
    print(len(sys.argv))
    
    if len(sys.argv) != 10:
        print('you do not have 10 arguments')
        sys.exit()
  7. This if statement means: IF the number of arguments(one) is NOT EQUAL to ten, then the condition is True. These can get a little confusing, try experimenting and move on when ready.
  8. If you are running this in ipython3, the number of arguments will be always be '1'. This number will always be one higher than the actual number of arguments entered. This is because it also counts the script name as a argument.

Practice Using If Statements

  1. Now it's time to create a new script. Make a copy of lab2c.py and call it lab2d.py. Now modify lab2d.py, add a if statement right before your print statements. This if statement should make sure that lab2d.py is using '2' additional arguments.
  • The script should have a Shebang line
  • The script should import sys
  • The script should print a usage message IF additional arguments are not given
  • The script should exit IF two additional arguments are not given
  • The script should use a variable called "name"
  • The script should use a variable called "age"
  • The script should use sys.argv[1] (first argument)
  • The script should use sys.argv[2] (second argument)
  • The script should store the values in the correct variables
  • The script should print the EXACT OUTPUT as shown
Sample run 1:
run lab2d.py Jon 20
Hi Jon, you are 20 years old.
Sample run 2:
run lab2d.py Jen 25
Hi Jen, you are 25 years old.
Sample run 3:
run lab2d.py 
Usage: lab2d.py [name] [age]
Sample run 4:
run lab2d.py Jon is 20
Usage: lab2d.py [name] [age]
2. Download the check script and check your work. Enter the following commands from the bash shell.
cd ~/ops435/lab2/
pwd #confirm that you are in the right directory
ls CheckLab2.py || wget matrix.senecac.on.ca/~acoatley-willis/CheckLab2.py
python3 ./CheckLab2.py -f -v lab2d
3. Before proceeding, make certain that you identify any and all errors in "lab2d.py". When the check script tells you everything is "ok", you may procede to the next step.

PART 2 - Using IF/ELIF/ELSE Statements

There are many ways to use if statements in more advanced configurations. This section will give a few examples and explain them.

Perform the following steps
  1. For the following examples, try changing the numbers in the variables to get different results.
  2. Open ipython3
    ipython3
  3. Using if statements to do numeric comparisons, if variable 'a' is greater than variable 'b', this if statements condition will be True:
    a = 10
    b = 15
    if a > b:
        print('a is greater than b')
  4. But we may want to know if 'a' is less than 'b'. The 'elif' statement allows us to string together multiple if statement. This new statement 'elif' means: IF the first condition is False, it will check the second condition under 'elif'. HOWEVER, if the first condition is True, it will run the code indented under the first condition and SKIP the 'elif' statement.
    a = 10
    b = 15
    if a > b:
        print('a is greater than b')
    elif a < b:
        print('b is greater than a')
  5. In the event that we want to know if 'a' and 'b' are equal to each other, we could add another 'elif' using the '==' equal signs, but instead lets use 'else'. The 'else' statement will run the code indented under it only when all the 'if' and 'elif' statements above are False.
       
    a = 10
    b = 15
    if a > b:
        print('a is greater than b')
    elif a < b:
        print('b is greater than a')
    else:
        print('a is not greater than b')
        print('a is not less than b')

INVESTIGATION 3: USING LOOP STATEMENTS

In programming loops are sequences of code that are repeated multiple times or until a condition is satisfied.

PART 1 - WHILE Loops

While loops use a the same type of conditions found in if statements. While the condition is True, the code indented under the while loop will be repeated. When the condition becomes False the loop will stop repeating.

Understanding While Loops

Perform the following steps
  1. Open ipython3
    ipython3
  2. Below is a program that will count to 5. Each time the loop is run, it will add one to the count variable, increasing the variables number.
    count = 0
    while count != 5:
        print(count)
        count = count + 1
    print('loop has ended')
  3. Here is an example of guessing the correct password:
    password = ''
    while password != 'P@ssw0rd':
        password = input("Type in a password: ")
    print('Congratulations you guessed the correct password!')


Practice Using a While Loop

  1. Now it's time to create a new script. Make a new file called lab2e.py, this script will contain a while loop. This while loop will count down from 10, print each value as it counts down. When it gets to the end it will output 'blast off!'.
  • The script should have a Shebang line
  • The script should use a variable named timer with a value of 10
  • The script should have a while loop that repeats until timer equals 0
  • The script should print the EXACT OUTPUT as shown
Sample run:
run lab2e.py
10
9
8
7
6
5
4
3
2
1
blast off!
2. Download the check script and check your work. Enter the following commands from the bash shell.
cd ~/ops435/lab2/
pwd #confirm that you are in the right directory
ls CheckLab2.py || wget matrix.senecac.on.ca/~acoatley-willis/CheckLab2.py
python3 ./CheckLab2.py -f -v lab2e
3. Before proceeding, make certain that you identify any and all errors in "lab2d.py". When the check script tells you everything is "ok", you may procede to the next step.

PART 2 - WHILE Loops with Arguments

Understand While Loops and Arguments

  1. Now lets make the same script more intelligent. Make a copy of lab2e.py and call it lab2f.py. Now modify lab2f.py, modify the value of timer to user the first argument provided to the script. This will allow the argument to choose how long the timer is.
WARNING: When using arguments as numbers/integers or performing math on arguments you must wrap them in the int() function, for example: number = int(sys.argv[1])
  • The script should have a Shebang line
  • The script should import sys
  • The script should use a variable named timer with the value of int(sys.argv[1])
  • The script should have a while loop that repeats until timer equals 0
  • The script should print the EXACT OUTPUT as shown
Sample run 1:
run lab2f.py 10
10
9
8
7
6
5
4
3
2
1
blast off!
Sample run 2:
run lab2f.py 3
3
2
1
blast off!
2. Download the check script and check your work. Enter the following commands from the bash shell.
cd ~/ops435/lab2/
pwd #confirm that you are in the right directory
ls CheckLab2.py || wget matrix.senecac.on.ca/~acoatley-willis/CheckLab2.py
python3 ./CheckLab2.py -f -v lab2f
3. Before proceeding, make certain that you identify any and all errors in "lab2d.py". When the check script tells you everything is "ok", you may procede to the next step.

PART 3 - WHILE Loops With IF Statement

Practice Using Loops With IF Statements

  1. Now lets make the same script EVEN more intelligent. Make a copy of lab2f.py and call it lab2g.py. Now modify lab2g.py, add a if statement to the script that checks to see if a argument was entered. If a argument was entered use that number for the timer, if no argument was entered, timer should equal 3.
WARNING: When using arguments as numbers/integers or performing math on arguments you must wrap them in the int() function: number = int(sys.argv[1])
WARNING: Remember to check the number of arguments using len(sys.argv) in a if statement
  • The script should have a Shebang line
  • The script should import sys
  • The script should use a variable named timer with the value of 3 if no arguments are entered
  • The script should use a variable named timer with the value of int(sys.argv[1]) if arguments are entered
  • The script should have a while loop that repeats until timer equals 0
  • The script should print the EXACT OUTPUT as shown
Sample run 1:
run lab2g.py 5
5
4
3
2
1
blast off!
Sample run 2:
run lab2g.py 2
2
1
blast off!
Sample run 3:
run lab2g.py
3
2
1
blast off!
2. Download the check script and check your work. Enter the following commands from the bash shell.
cd ~/ops435/lab2/
pwd #confirm that you are in the right directory
ls CheckLab2.py || wget matrix.senecac.on.ca/~acoatley-willis/CheckLab2.py
python3 ./CheckLab2.py -f -v lab2g
3. Before proceeding, make certain that you identify any and all errors in "lab2d.py". When the check script tells you everything is "ok", you may procede to the next step.

LAB 2 SIGN-OFF (SHOW INSTRUCTOR)

Students should be prepared with all required commands (system information) displayed in a terminal (or multiple terminals) prior to calling the instructor for signoff.


Have Ready to Show Your Instructor:
Output of: ./CheckLab2.py -f -v
Output of: cat lab2a.py lab2b.py lab2c.py lab2d.py lab2e.py lab2f.py lab2g.py
Lab2 logbook notes completed




Practice For Quizzes, Tests, Midterm & Final Exam

  1. x
  2. x
  3. x