Changes

Jump to: navigation, search

OPS435 Python Lab 3

1,799 bytes added, 09:26, 21 January 2020
no edit summary
<font color='red'>
'''** DO NOT USE - TO BE UPDATED FOR CENTOS 8.0 **'''
</font>
= LAB OBJECTIVES =
:In previous labs, you learned some programming tools in order to make your Python scripts '''more functional''' and allowed your Python script to run differently based on different data or situations. These tools included '''objects/variables''', '''logiccondition statements''' and '''loops'''. The utilization of these basic tools not only apply to Python scripts, but basically all programming languages including interpreted (including '''Perl scripts''', '''Bash Shell scripts''', '''JavaScript''', etc ) and compiled languages (including '''C''', '''C++''', '''Java''', etc).
:In this lab, you will learn the following tools including '''functions''', '''lists''', and '''loops''', with the primary focus on creating reusable code.
:'''<u>Objectives</u>'''
:Write Python code in order to:
:*'''Create reusable functions''' that can be imported by ipython3 or other python scripts
:*'''Using and manipulating lists''' to allow for processing a large amount of data quickly
:*'''Looping through lists''' using '''Functions'''. Looping (iteration) is the ability for your program to repeatedly run the same code over and over. In this way, you can run a loop that contains a list to better send data to functions for better, more efficient execution of your Python script'''.
<br><br>
= INVESTIGATION 1: USING CREATING THE SIMPLEST FUNCTIONS =:A very simple definition of using '''functions''' is to create and reuse '''smaller programs within a larger program'''. In programming languages such as '''C''', '''C++''' and '''Java''', commonly used functions are pre-packaged in '''Libraries'''. This relates to dependency issues that were discussed when compiling C programming code in your OPS25 course: if a supporting library is missing, the program would be able to run the called function. We do not go into detail involving Libraries for this course since Python is an '''interpreted''' (i.e. not a compiled) language.
:A very simple definition of using '''functions''' is to create and reuse '''smaller programs within a larger program'''. In programming languages such as '''C''', '''C++''' and '''Java''', commonly used functions are pre-packaged in '''libraries'''. This relates to dependency issues that were discussed when compiling C programming code in your OPS235 course: if a supporting library is missing, the program would not be able to run the called function.
:Usually, a '''function''' will '''contain programming code''' in some part of the main program python file (most likely near the '''top''' of the program '''BEFORE''' file, before the main program). We refer to that as a '''"function declaration"'''.: When a program is run, the '''function's code is read into internal memory''', ready to be run when the function is '''run''' executed (referred to as '''calling the function'''). Until a Function is specifically told to execute, it's its code will sit (in internal memory) unused.
:When creating programs that define and use functions, '''a large programming task can be broken-down into smaller elements''' (or '''modules'''). This is why creating programs that use functions is referred to as '''"modular programming"'''.
== PART 1 - How User-Defined Functions are Declared and Run == :Functions may be designed :* '''not to accept arguments or return a value''', designed * to '''not accept arguments but not return a value''', designed * to '''accept arguments and not return a value''', * or designed to '''both accept arguments and return a value'''. In this investigation, we will focus on creating functions that either do NOT return a value, or return a value.
== PART 1 - Using Functions ==
'''Functions and Strings'''
: You will now learn how to define and run functions that will return '''string data''' when a function is called.
 
:Let's experiment with defining and running functions. One neat thing with using scripting languages like Python or Bash, is that you can define and run functions from the shell and call them from the shell to test them out prior to adding them into scripting files. You will learn how to do this first in your ipython3 shell, and then incorporate them into your Python script files to run.
:'''Perform the Following Steps:'''
:#To start, open the ipython3 shellCreate a new python file for testing code in this section.:<source>ipython3</source>#Whenever you want to create a function, you must start with the keyword "'''def'''". The '''def''' keyword is used to start the definition of the function, it does not run the code you write. Functions, just like '''if ''' statements, must have all code under them indented.<br><br>:# Enter the following code in your ipython3 shell:<sourcelang="python">
def hello():
print('Hello World')
print('Inside a Function')
</source>Remember to press '''ENTER''' a second time to return to the ipython prompt. You may :#Executing your file you should have notices noticed that nothing happened. Well actually, something did happen... the function called '''hello(''') has been defined and stored in internal memory in order for it to run when called by its function name. Now that our function was created, we can use it over and over. <br><br>:#To execute the code inside the function, run the function name with "'''()'''" '''brackets''' at the end of the function name.<br>Try running the '''hello()''' function by name three times by issuing the following in the ipython3 shelllike this:<sourcelang="python">
hello()
hello()
hello()
</source>You should notice that the function just does the same thing over-and-over no matter how many times your call the function by name. By the way, that is OK. On the other hand, you may want to create and use a function to do something, like perform error checking or some other task that returns a value to the '''main''' program for further processing. For example, a '''true''' or '''false''' value if the error checking function that was called was detected no errors or detected an error. But let's stick to some simple examples first, before tackling more complex use of functions.<br><br>
:#Let's create a function that '''returns''' some data after the function is called. This function does not print out any text: instead; it creates new variables and at the end returns the value of one of the variables.<sourcelang="python">
def return_text_value():
name = 'Terry'
return greeting
</source>
:# Call the function in your ipython3 shell by issuing the followinglike this:<sourcelang="python">
return_text_value()
</source>One major difference between a function '''returning a value''' and simply '''printing a value''' is that '''returned''' values can be caught and stored in variables used in the program (that called the function) for later use. Once the returned value has been stored, it can be printed, manipulated, compared in IF statements, etc. Below will cover how to store a returned value.<br><br>
:#Enter Notice that this syntax looks just the following call to the input() function which you've used in the ipython3 shell to see returning a variable's value workslast lab:<sourcelang="python">
text = return_text_value()
</source>
:#Now the returned text from the function has been stored in the variable "'''text'''". It can be used like any string value now.<sourcelang="python">
print(text)
</source>
:'''Perform the Following steps:'''
:#Issue Define the following in your ipython3 shellreturn_number_value() function:<sourcelang="python">
def return_number_value():
num1 = 10
</source>
:#Now, issue the following in the ipython3 shell to And call the '''return_number_value()''' functionit:<sourcelang="python">
number = return_number_value()
print(number)
print(return_number_value() + 10)
</source> What do you notice?<br><br>
:#Now, issue the following which use the print() statement to display both strings and numbers:<sourcelang="python">
number = return_number_value()
print('my number is ' + number)
</source> What do you notice? You should notice a warning message. This occurs because the returning value is a '''number''' and NOT a '''string'''! Combining numbers and strings in a statement (such as '''print()''') can cause errors. The error message should appear similar to the one displayed below: <source>
---------------------------------------------------------------------------TypeError Traceback (most recent call last):<ipython-input-24-d80d5924146a> File "test.py", line 2, in <module>()----> 1 print('my numbr number is ' + number) TypeError: Cancannot concatenate 'str't convert and 'int' object to str implicitlyobjects
</source>
:#If a number needs to be combined with a string, use the '''str()''' predefined function that was discussed in a previous lab in order to convert the returned number into a string:<sourcelang="python">
number = return_number_value()
print('my number is ', number)
</source>
'''Practice Using == PART 2 - Creating a Python Script with Functions & and Importing Existing Functions'''==
:Now it's time to create ''Creating a Python script that uses two functions. One function does not return a value and is simply used (when called) to greet the user, where the other function returns the result of adding two values (stored in variables within the function).Script'''
:Now it's time to create a new Python script that uses two functions. One function returns a string value to prompt greet 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, where the other function returns the result of adding two values (stored in variables within the function).
:'''Perform the following Instructions:'''
:::*Add another '''empty line''' following by the '''return_number_value()''' function '''definition''' that you previously entered in the shell.
:::*Add a '''couple of empty lines''', following by a comment stating: '''# Main Program'''
:::*Add another '''couple of empty lines''', followed by the statements displayed below:<sourcelang="python">
if __name__ == '__main__':
print('python code')
print(str(number))
</source>
:::2. Run Running your lab3a.py script in your ipython3 shell by issuing:<source>run lab3a.py</source>You program you should have seen three lines being displayed: the text "python code", a greeting, and a result of a math calculation.<br><br>The '''NOTE:if''' The IF statement in the displayed code above is considered to be a special '''special IF statementif'''statement needed to make sure that your "main" code only runs when you want it to. It allows More on that later. '''variables''' and '''functions''' from Importing Functions From other python scripts to be '''used in your current Python script (or in the ipython shell) without having to re-define those functionsScripts'''.  In order to use functions from other scripts, you are required to either issue the import command in your ipython3 shell environment, or use the import command within your Python script itself.<br><br>We can demonstrate the use of re-using functions from another script by simply '''issuing statements from the ipython shell by calling a function that is related to your lab3a.py Python scriptimport'''. But care MUST be taken to first use the import command to load in the function declarations from your Python script to your ipython shell environment firststatement.<br><br> :::3. # Let's see what happens if we forget to import functions from your lab3a.py script prior to calling a function. Issue Create a new python file and try to call the followingreturn_text_value() function:<sourcelang="python">
text = lab3a.return_text_value()
</source>You should notice an error indicating '''"name 'lab3a' is not defined"'''. This error occurs since you failed to instruct the ipython shell python to '''import''' or "load existing defined functions from your lab3a.py script" to '''internal memory'''.<br><br>:::4. Issue the following within the ipython shell# Modify your program like this:<sourcelang="python">
import lab3a
text = lab3a.return_text_value()
print(text)
lab3a.return_number_value()
</source> You should notice that all of the function calls should now work. '''NOTE:''' since you are in the ipython shell, the import command only will work as long as you are '''logged into that shell'''. You will need to use other methods (contained in other Python Scripts (or future ipython shell sessions) to make these function imports '''persistent''', but you will learn about that at a later time.<br><br>:::5. Exit the ipython3 shell, download # Download the checking script and check your work. Enter the following commands from the bash shell.<sourcelang="bash">
cd ~/ops435/lab3/
pwd #confirm that you are in the right directory
ls CheckLab3.py || wget matrix.senecachttps://raw.ongithubusercontent.cacom/~acoatleySeneca-willisCDOT/ops435/master/LabCheckScripts/CheckLab3.py
python3 ./CheckLab3.py -f -v lab3a
</source>
:::6. # Before proceeding, make certain that you identify any and all errors in lab3a.py. When the checking script tells you everything is OK before proceeding to the next step.<br><br> = INVESTIGATION 2: CREATING FUNCTIONS WITH ARGUMENTS AND RETURN VALUES =
== PART 1 - Providing Functions With Arguments == ::Make notes Functions can receive '''arguments''' - data to be used for all of your observations in your lab log bookprocessing. In this section, you will learn how to define functions that accept arguments and proceed learn how to Part 2call functions with arguments (such as mathematical operations or testing conditions, which is useful for error-checking).<br><br>
== PART 2 - Providing Functions With Arguments ==:Functions can pass-'''Passing up arguments to be used for processing. In this section, you will learn how to define functions that accept arguments Single and learn how Multiple Arguments to perform function calls that pass up arguments for processing (such as mathematical operations or testing conditions (eg. error-checking)).a Function'''
:'''Perform the Following Steps:'''
:#Start the ipython3 shellCreate a new Python file for testing.:<source>ipython3</source>#When passing arguments up to functions, you MUST contain put data such as '''strings''', '''numbers''', or '''variable names''' within '''brackets''' immediately following the function name.<br><br>'''NOTE:''' Normally, when If a function is declared that accepts arguments, then those '''arguments must be declared''' (using variable names)when the function is declared. Those declared variable names are then used within the function for processing. Also, when you call a function with arguments, the number of arguments passed up to the function must correspond (match) the number of arguments that were specified in the function declaration.<br><br>:#Issue the following from the ipython shell to declare Define a function called '''square()''':<sourcelang="python">
def square(number):
return number ** 2
</source>'''FYI:''' To square You may have learned that you multiple a number by itself in math your multiply using '''number * order to "square" the number. In python, the ''' or use exponents '''number ** 2''' operator will raise the operand on the left to the power of twothe operand on the right. This function takes one argument <br><br>When calling functions with multiple arguments, the arguments are separated by '''numbercommas'''. See what happens if you provide strings, the function will use exponents to multiply the number given by itself. You should notice that the square of the number sent up to the function is returned to the main program (strings without using quotes, or numbers with decimals in our case, the ipython3 shell)following examples.<br><br>:#Issue the following to test Test your '''square()''' function:<sourcelang="python">
square(5)
square(10)
square(12)
square(square(2))
square('2')</source>Multiple arguments Notice that nothing is printed, you need to print the values the functions return to see what they are separated .:#The last function call should produce an '''error message'''. This is caused by sending a '''commasstring'''instead of a number that is processed by the function. Be careful NOT We could use the int() function to provide strings or decimals, convert any value passed in as you may cause errorsa string by mistake to an integer number.<br><br>:#Issue the following to declare Declare the function '''sum_numbers()''':<sourcelang="python">
def sum_numbers(number1, number2):
return int(number1) + int(number2)
</source>'''NOTE:''' Running functions with multiple arguments is the same. When you put a function as a argument of another function, the inner-most function will run first, and the return value will be used as the argument on the outer function. For example, in this case below, '''sum_numbers(5, 5)''' will return '''10''', and provide square with that value '''square( 10 )'''.<br><br>:#Issue the following Call that function to test out passing multiple arguments to the sum_numbers() functionsee what happens:<sourcelang="python">
sum_numbers(5, 10)
sum_numbers(50, 100)
</source>
:#You can also do what looks like calling a function within another function, but it's actually just calling sum_numbers() first, then calling square() with the return from sum_numbers as an argument:<source lang="python">
square(sum_numbers(5, 5))
</source> Was '''NOTE:''' Running functions with multiple arguments is the result same. When call a function as an argument of another function, the '''inner-most function will run first''', and the return the value from running this that will be used as the argument for the '''outer function '''. In the example below, '''sum_numbers(5, 5)''' will return '''10''', thus providing that result to be square with these arguments what you though it would be?that value '''square(10)'''.<br><br>
'''Practice Creating Functions With Return Valuesa Function that Accepts Arguments and Returns a Value'''
:It is time to practice creating a shell script that uses functions a function that accepts values as arguments that are then used by the functions for processing, and returns a value.
:'''Perform the Following Instructions:'''
:::'''Python Script Template'''
::::<sourcelang="python">#!/usr/bin/env python3
def sum_numbers(number1, number2):
if __name__ == '__main__':
print('python code')
print(sum_numbers(10, 5))
print(subtract_numbers(10, 5))
</source>
:::'''Additional Requirements''' :::*All functions should accept two arguments:::*All functions should return an integer:::*The script should contain no errors
::*All functions should accept two arguments
::*All functions should return an integer
::*The script should contain no errors
:::'''Sample Run:'''<sourcelang="python">run ./lab3b.py
15
5
50
</source>
:::'''Sample ImportOther examples:'''<sourcelang="python">ipython3 
import lab3b
lab3b.sum_numbers(10, 5)# Will return 15 lab3b.sum_numbers(25, 25)# Will return 50 lab3b.subtract_numbers(10, 5)# Will return lab3b.subtract_numbers(5, 10)# Will return -5 lab3b.multiply_numbers(10, 5)# Will return 50 lab3b.multiply_numbers(10, 2)# Will return 20
</source>
:::2. Exit the ipython3 shell, download Download the checking script and check your work. Enter the following commands from the bash shell.<sourcelang="bash">
cd ~/ops435/lab3/
pwd #confirm that you are in the right directory
ls CheckLab3.py || wget matrix.senecachttps://raw.ongithubusercontent.cacom/~acoatleySeneca-willisCDOT/ops435/master/LabCheckScripts/CheckLab3.py
python3 ./CheckLab3.py -f -v lab3b
</source>
:::3. Before proceeding, make certain that you identify any and all errors in lab3b.py. When the checking script tells you everything is OK before proceeding - proceed to the next step.
'''Passing up Multiple Arguments and IF Using Conditional Statements'''
The next :You will now create a more complex function we make in this section if going that will not only pass arguments, but also include logic to control the flow of the function, and affect how your Python script will be more advanced and contain logic inside itrun. First try the following to practice logic in functionsYou will create a function that uses an '''if/elif/else''' statement.
:'''Perform the Following Steps:'''
:#Start the ipython3 shell<source>ipython3</source>:#Now try making some functions that uses if statements, '''BUT BEWARE''', making an if statement inside Use a function means that you are indented two times to get temporary Python file to define the if statement.following function:<sourcelang="python">def check_temperaturedescribe_temperature(temp):
if temp > 30:
return 'hot'
elif temp == 20:
return 'perfect'
return 'ok' </source>The final '''return "ok"''' will only take place if a previous return has not taken place before it. Once return has been used in a function, the function immediately exits and returns the value.:#Call describe_temperature like this to confirm the results:<source>print(describe_temperature(50))# Will return 'hot'print(describe_temperature(20))# Will return 'perfect'print(describe_temperature(-50))# Will return 'cold'print(describe_temperature(25))# Will return 'ok'print(describe_temperature(10))# Will return 'ok'
</source>
:#Remember to note the extra indentation on the code under the if statements. The final '''return "ok"''' will only take place if a previous return has not taken place before it. Once return has been used in a function, the function immediately exits and returns the value. <source>
check_temperature(50)
'hot'
 
check_temperature(20)
'perfect'
 
check_temperature(-50)
'cold'
 
check_temperature(25)
'ok'
check_temperature(10)'ok'</source>'Create a Python Script Receiving Multiple Arguments'''
'''Practice Multiple Levels of Indentation'''
:'''Perform the Following Instructions:'''
:#Create the '''~/ops435/lab3/lab3c.py''' script. The purpose of the script is to make have a single function that can perform addition, subtraction, or multiplication on a pair of numbers. But the function will allow us to choose exatly what operation we are performing on it when we call the functionit. If the operate function does NOT understand the operator given, it should return a an error message(e.g. calling the function to 'divide' two numbers).:#Use this template to get started:<sourcelang="python">
#!/usr/bin/env python3
print(operate(10, 5, 'divide'))
</source>
:::*The script operate() function should have a use '''conditional'Shebang line''statements<br> &nbsp; '''FYI:::*The script should have a function operate''' Remember that you MUST consistently '''indent ALL code''' for within each section (num1, num2, operatoror test):::*The script should use if statements inside the operate function.:::*The operate () function should accept '''three arguments'''.:::*The operate () function should '''return ''' the answerresult.:::*The operate () function should '''return a ''' an error message if the operation is unknown<br> &nbsp; '''FYI:''' Use single quotes or double-quotes to pass a string value.:::*The script should contain show the exact output as the sample imports.:::*The script should contain no errors.:::3*As an extra exercise, try to write your function with only one return statement.  :::'''Sample Run 1:'''<source>run ./lab3c.py
15
5
Error: function operator can be "add", "subtract", or "multiply"
</source>
 :::4. '''Sample Import 1Run 2 (using import from another Python file):'''<source>
import lab3c
 lab3c.operate(10, 20, 'add')# Will return 30 lab3c.operate(2, 3, 'add')# Will return lab3c.operate(100, 5, 'subtract')# Will return 95 lab3c.operate(10, 20, 'subtract')# Will return -10 lab3c.operate(5, 5, 'multiply')# Will return 25 lab3c.operate(10, 100, 'multiply')# Will return 1000 lab3c.operate(100, 5, 'divide')# Will return Error: function operator can be "add", "subtract", or "multiply" lab3c.operate(100, 5, 'power')# Will return Error: function operator can be "add", "subtract", or "multiply"
</source>
:::53. Exit the ipython3 shell, download Download the checking script and check your work. Enter the following commands from the bash shell.<sourcelang="bash">
cd ~/ops435/lab3/
pwd #confirm that you are in the right directory
ls CheckLab3.py || wget matrix.senecachttps://raw.ongithubusercontent.cacom/~acoatleySeneca-willisCDOT/ops435/master/LabCheckScripts/CheckLab3.py
python3 ./CheckLab3.py -f -v lab3c
</source>
:::64. Before proceeding, make certain that you identify any and all errors in lab3c.py. When the checking script tells you everything is OK before proceeding - proceed to the next step.<br><br>
Make notes for all of your observations in your lab log book, and proceed to Part 3. == PART 3 2 - Running System Commands with Subprocess ==This last part :The remainder of the this investigation will give allow you access to run operating system commands within via your python scriptsPython script. While we Although there are able to run some bash commands inside the ipython3 environment, these do not transfer over into the python code we write. It is not usually a good idea different ways in which to run system commands in Python, this makes your Python code less portable and makes it require a speicifc issue operating system or a system that has those commands available. There is also the case of security, allowing python to execute commands on the system can be a security problem if care isn't taken. For these reason you should only use subprocess and the system commands as a last resort and stick to Python code onlywill learn two of them.
'''Perform the Following Steps:'''
:#Start Create a new python file for testing.:#Import the ipython3 shell'''''os''''' module in your python file.:#You can issue operating system commands by using the '''system()''' function. Try it:<sourcelang="python">import subprocessos.system('ls')os.system('whoami')diros.system(subprocess'ifconfig')</source>Notice that the output from the programs is printed in your script. Consider that may not always be what you want.<br><br>:#Try this also:<source lang="python">os.system('ipconfig')</source>You should notice an error message: ''''ipconfig: command not found''''. That error occurs since that command was an MS Windows command, and our current platform is Linux.<br><br>It is not always a good idea to run system commands in Python, this makes your Python code less portable and makes it require a specific operating system or a system that has those commands available. You should think about that when you decide whether you should or should not use a system command to accomplish some task or stick to pure Python code only.<br><br>As you may recall from lab2, you issued '''import sys''' to import special variables from the system. You can import a subprocess in order to run common non OS specific commands securely.<br><br>:#Import the subprocess module in your python file.:#There are many available modules and attributes features available as part of the subprocessmodule, we are interested in "'''Popen'''". This method subprocess.Popen() can be used to run system commands as a child process to the Python script. This The code below output will create a new child process, in Python we can control this through the new Python object we just created, "'''p'''". "'''p'''" now has a collection of methods(functions that are apart of a object) available.<br><br>:#To demonstrate, view them with '''dir()'''.issue the following:<sourcelang="python">
p = subprocess.Popen(['date'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
dir(p)</source>This function call and the following step is full of details we haven't yet talked about which is why it may look a little scary. By the time we're finished with the course - you will be able to look at code like this and not be intimidated. If you're curious and want to look ahead - you can find the definition for the [https://docs.python.org/3/library/subprocess.html#subprocess.Popen Popen function in the Python reference manual].:#This next step is going to communicate with the process and get the retrieve it's output (stdout and stderr from the command we previously).<source>stdout, stderr output = p.communicate()stdoutprint(output)print(output[0])
# The above stdout is stored in bytes
# Convert stdout to a string and strip off the newline characters
stdout = stdoutoutput[0].decode('utf-8').strip()print(stdout)
</source>
:#While many of these system commands could Sometimes you will be instead written in simply Pythonable to use purely python code to get your job done, the exercise of running but often you will need to call existing system commands is . It's importantto learn how to call them and how to interact with those external processes.
'''Practice Running System Commands From Python'''
:'''Perform the Following Instructions:'''
:#<ol><li>Create the "'''~/ops435/lab3/lab3d.py'''" script. The purpose of this script is to create a Python function that can return the linux system's root directory free space.:::*The script should have a '''Shebang lineimport the correct module''':::*The script should import subprocess:::*The script should use the linux command ": '''<nowiki>df -h | grep '/$' | awk '{print $4}'" </nowiki>''' :::*The script should contain the function called: '''free_space()''':::*The function '''free_space() ''' should return a string which is in '''utf-8 ''' and has '''newline characters striptstrip''':::*'''Note: ''' your output may be completely different, the free/available disk space on every computers root directory may be different.:::2. '''Sample Run 1: ''' <source>run ./lab3d.py
9.6G
</source>
:::3. '''Sample Import 1Run 2 (using import from another Python file):'''<source>
import lab3d
 
lab3d.free_space()
'# Will return 9.6G'</source></li>:::4. Exit the ipython3 shell, download <li>Download the checking script and check your work. Enter the following commands from the bash shell.<sourcelang="bash">
cd ~/ops435/lab3/
pwd #confirm that you are in the right directory
ls CheckLab3.py || wget matrix.senecachttps://raw.ongithubusercontent.cacom/~acoatleySeneca-willisCDOT/ops435/master/LabCheckScripts/CheckLab3.py
python3 ./CheckLab3.py -f -v lab3d
</source></li>:::5. <li>Before proceeding, make certain that you identify any and all errors in lab3d.py. When the checking script tells you everything is OK before proceeding - proceed to the next step.</li></ol>
Make notes for all of your observations in your lab log book, and proceed to INVESTIGATION 2. = INVESTIGATION 2 - 3: USING LISTS =Lists are ones of the most powerful data-types in Python. A list is a series of comma separated values found between square brackets. Values in a list can be anything: strings, integers, objects, even other lists. In this section we will introduce lists and how to use them effectively, we will come back to lists again in later labs.
:'''Lists''' are one of the most powerful '''data-types''' in Python. A list is a series of '''comma separated values found between square brackets'''. Values in a list can be anything: '''strings''', '''integers''', '''objects''', even '''other lists'''. In this section, you will introduce lists and how to use them effectively, you will further user lists in later labs. It is important to realise that although lists may appear very similar to arrays in other languages, they are different in a number of aspects including the fact that they don't have a fixed size.
== PART 1 - Navigating Items in Lists ==
 
:'''Perform the Following Steps'''
:#Start the ipython3 shell<source>ipython3</source>Create a new Python file for testing things in this section.:#Create a few lists with different values: list1 contains only '''integers''', list2 contains only '''strings''', list3 contains a combination of both.'''integers and strings''':#<sourcelang="python">
list1 = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
list2 = [ 'uli101', 'ops235', 'ops335', 'ops435', 'ops535', 'ops635' ]
list3 = [ 'uli101', 1, 'ops235', 2, 'ops335', 3, 'ops435', 4, 'ops535', 5, 'ops635', 6 ]
</source>The best way to access individual '''elements''' in a list is using the list '''index'''.<br>The index is a number starting from 0 to ('''number_of_items - 1'''), the list index starts counting at '''0'''.<br><br>
:#Inspect specified elements in your lists:<source lang="python">
print(list1[0]) # First element in list1
print(list2[1]) # Second element in list2
print(list3[-1]) # Last element in list3
</source>
:#The best way to get individual You can also retrieve ranges of items from a list is using the list index. The index is a number starting from 0 to (number_of_items - 1these are called slices), the index starts counting at 0.<source>list1[0] # First item in list1list2[1] # Second item in list2list3[-1] # Last item in list3</source>:#Instead of just getting the first and last, lists can give ranges of items. <sourcelang="python">print(list1[0:5] ) # Starting with index 0 and stopping before index 5print(list2[2:4] ) # Starting with index 2 and stopping before index 4print(list3[3:] ) # Starting with index 3 and going to the end</source>:#Lists can also contain other lists. This means lists can contain: lists and strings and integers all together. <source>list4 = [ [1, 2, 3, 4], ['a', 'b', 'c', 'd'], [ 5, 6, 'e', 'f' ] ]</source>:#This list still only has 3 index locations. Each index points to another list. <source>list4[0]list4[1]list4[2]</source>:#To access a list inside another list, a second index is needed. Spend some time trying out the syntax and try and navigate to a specific spot in the list.<source>list4[0][0] # First item in first listlist4[0][-1] # Last item in first listlist4[2][0:2] # First two items in third list</source>:#Using different items from different lists to create new lists.<source>first_only_list = [ list1[0], list2[0], list3[0] ]first_only_list
</source>
'''Practice Using Functions and Using the List Index'''
 
:'''Perform the Following Instructions'''
:#Create the '''~/ops435/lab3/lab3e.py''' script. The purpose of this script is to have a number of functions that output a different part of the list. Each function will return either a single item from the list OR will create a new list and return the entire new list.
:#The template function names and boiler plate if statement:<source>
!/usr/bin/env python3
:# Put Create a Python script called: '''~/ops435/lab3/lab3e.py'''<br>The purpose of this script is to have a number of functions that output a different data storage in various elements of a list. Each function will return either a single item from the list OR will create a new list and return the entire new list .<br><br>:#The template function names and the special if statement:<source lang="python">#!/usr/bin/env python3 # Create the list called "my_list" here, not within any function defined below.# That makes it a global variable. We'll talk about that in another lab.
def give_list():
# Does not accept any arguments # Returns all of the entire list global variable my_list unchanged
def give_first_item():
# Does not accept any arguments # Returns a single string that is the first item in the listglobal my_list
def give_first_and_last_item():
# Does not accept any arguments # Returns the a list that includes the first and last items in the listglobal my_list
def give_second_and_third_item():
# Does not accept any arguments # Returns the a list that includes the second and third items in the listglobal my_list
if __name__ == '__main__': # This section also referred to as a "main code"
print(give_list())
print(give_first_item())
print(give_second_and_third_item())
</source>
 :::*The script should have a '''Shebang lineAdditional Requirements''' :::*The script should have declare a list called '''my_list''' created BEFORE any function definition:::*The list called '''my_list ''' should have the values: '''100''', '''200''', '''300''', and ''''six hundred'''':::*The script should '''implement''' the empty functions - i.e. you have a function called give_list() which returns a listto fill in the bodies for these functions:::*The script should have a function called give_first_item() which returns a string:::*The script should have a function called give_first_and_last_item() which returns a list:::*The script should have a function called give_second_and_third_item() which returns a list:::3. '''Sample Run 1:'''<source>run ./ lab3e.py
[100, 200, 300, 'six hundred']
100
[200, 300]
</source>
:::4. '''Sample Import 1Run 2 (with import from another script):'''<source>
import lab3e
 
lab3e.give_list()
# Will print [100, 200, 300, 'six hundred'] 
lab3e.give_first_item()
# Will print 100 
lab3e.give_first_and_last_item()
# Will print [100, 'six hundred'] 
lab3e.give_second_and_third_item()
# Will print [200, 300] 
</source>
:::53. Exit the ipython3 shell, download Download the checking script and check your work. Enter the following commands from the bash shell.<source>
cd ~/ops435/lab3/
pwd #confirm that you are in the right directory
ls CheckLab3.py || wget matrix.senecachttps://raw.ongithubusercontent.cacom/~acoatleySeneca-willisCDOT/ops435/master/LabCheckScripts/CheckLab3.py
python3 ./CheckLab3.py -f -v lab3e
</source>
:::64. Before proceeding, make certain that you identify any and all errors in lab3e.py. When the checking script tells you everything is OK before proceeding - proceed to the next step.
Make notes for all of your observations == PART 2 - Manipulating Items in your lab log book, and proceed to Part 2.Lists ==
== PART 2 - Manipulating Items in Lists ==:There are a number of ways to get obtain information about lists, as well as change what the data that is inside contained within a list. This In this section , you will cover the different ways learn how to manipulate lists.
:'''Perform the Following Steps:'''
 :#First start with the smallest Let's perform a simple change. Change a single item at a single point in to a listelement.Try the following code:<sourcelang="python">
courses = [ 'uli101', 'ops235', 'ops335', 'ops435', 'ops535', 'ops635' ]
print(courses[0])
courses[0] = 'eac150'
print(courses[0]courses</source>:#Now lets use the dir() and help() functions to see what functions and attributes lists have. The help() function will also give us tips on how to use some functions.<source>dir(courses)helpprint(courses)
</source>
:#Next search and find more information on Below are some examples of using built-in functions to '''manipulate''' lists. Take your time to see how each function can be a number list functions useful tool for changing making changes to existing lists.:<sourcelang="python">help(courses.append)
courses.append('ops235') # Add a new item to the end of the list
print(courses)
help(courses.insert)
courses.insert(0, 'hwd101') # Add a new item to the specified index location
print(courses)
help(courses.remove)
courses.remove('ops335') # Remove first occurrence of value
print(courses)
help(courses.sort)sorted_list sorted_courses = courses.copy() # Create a copy of the courses listsorted_listsorted_courses.sort() # Sort the new listprint(courses)print(sorted_courses)
</source>
:#Using Python In addition to using functions we can get more to manipulate lists, there are functions that are useful to provide '''information out ''' regarding the list such as number of lists.elements in a list, the smallest value and largest value in a list:<sourcelang="python">
list_of_numbers = [ 1, 5, 2, 6, 8, 5, 10, 2 ]
length_of_list = len(list_of_numbers) # Returns the length of the listsmallest_in_list = min(list_of_numbers) # Returns the smallest value in the listlargest_in_list = max(list_of_numbers) # Returns the largest value in the list</source>:#Now Notice how the long line below is wrapped to fit on to some of the more powerful features of Python lists. Searching for values inside lists and finding locations of values in a list. The index() function allows searching inside a list for a value, it will return the index number of the first occurence. <source>one screen:number = 10helpprint(list_of_numbers.index)list_of_numbers.index"List length is " + str(numberlength_of_list) # Return index of the number searched for+ </source>:#The problem that comes up here is if the item searched for doesn't exist ", Python will throw a error. Lets make sure it exists before asking for smallest element in the index location. To find out if a value is in a list, just ask using a if statement, if the statement is True" + str(smallest_in_list) + ", then the value is found largest element in the list.<source>list_of_numbers = [ 1, 5, 2, 6, 8, 5, 10, 2 ]number = 10if number in list_of_numbers: # Returns True if value in list, returns False if item not in list number_index = list_of_numbers.index(number)else: # If the statement is False, the else will run print(" + str(numberlargest_in_list)) + ' is not in list_of_numbers'
</source>
 
Make notes for all of your observations in your lab log book, and proceed to Part 3.
== PART 3 - Iterating Over Lists ==
:This final last section explains demonstrates an extremely useful for lists: the best part about lists. The ability to quickly '''loop through every value in the list'''. '''For loops''' have a set number of times they loop. The '''for loop''' loop will one by one run execute all indented code for each item (element) in the list.
:'''Perform the Following Steps'''
:#:The following '''for loop''' loop will create a new variable that contains store the value of each element from list_of_numbers within a variable named '''item''' and run code indented below the list of the current iterationloop for each item.<br><br>:#Run this from a temporary Python file:<sourcelang="python">
list_of_numbers = [ 1, 5, 2, 6, 8, 5, 10, 2 ]
for item in list_of_numbers:
print(item)
</source>
:#Now As you can see: instead of running functions over and over, from our previous sectionswriting eight function calls for each element of the list, we can put them call the function in a loop. The next sequence And we won't have to rewrite code if the length of code will apply a function to every item in the listchanges.<br><br>:#Run the following code:<sourcelang="python">
list_of_numbers = [ 1, 5, 2, 6, 8, 5, 10, 2 ]
 
def square(num):
return num * num
for value in list_of_numbers:
print(square(value))
</source>:#But this The code above only prints out each new valuethe squares and does not save them for future use. Lets try making The next example uses a new function that loops through listslist, squares the values, and returns also saves the squares in a new list.<br><br>:#Run the following code:<sourcelang="python">
list_of_numbers = [ 1, 5, 2, 6, 8, 5, 10, 2 ]
new_list_of_numbers = square_list(list_of_numbers)
print(list_of_numbers)print(new_list_of_numbers)</source>:#The above is just one example of a quick, powerful, use of for loops mixed with lists. But be careful when passing lists into functions. When you give a function a listas an argument, it is the actual list reference and NOT a copy. This means a function can completely change the list without making a new list. While you do have to be careful , this is can also be useful, a . A function can modify any given list, ''without '' have to return or store it.<br><br>:#To demonstrate, run the following code:<sourcelang="python">
list_of_numbers = [ 1, 5, 2, 6, 8, 5, 10, 2 ]
def delete_numbers(numbers):
numbers.remove(5)
delete_numbers(list_of_numbers)
print(list_of_numbers)
</source>
'''Practice Functions, Lists, Loops'''
'''Practice Functions, Lists, Loops'''
:'''Perform the Following Instructions:'''
:#Create the '''~/ops435/lab3/lab3f.py''' script. The purpose of this script is to use functions to modify items inside a list. <source>
# Place my_list here
:#Create the '''~/ops435/lab3/lab3f.py''' script. The purpose of this script is to use functions to modify items inside a list. <source lang="python">#!/usr/bin/env python3 # Place my_list below this comment (before the function definitions)   def add_item_to_list(my_listordered_list): # Appends new item to end of list which is with the value (last item + 1)
def remove_items_from_list(my_listordered_list, items_to_remove):
# Removes all values, found in items_to_remove list, from my_list
# Main code
if __name__ == '__main__':
print(my_list)
remove_items_from_list(my_list, [1,5,6])
print(my_list)
</source>
'''Additional Requirements'''
:::*The missing list should have the values: '''1, 2, 3, 4, 5''':::*The program should have a function called '''add_item_to_list(ordered_list)'''<dd><dl>This function takes a single argument which is a list name itself. It will then look at the value of the last existing item in the list, it will then append a new value that is one unit bigger (i.e. '''+1''' and modifying that same list without returning any value).</dl></dd>:::*The script should have a function called '''remove_items_from_list(ordered_list, items_to_remove)'''<dd><dl>This function takes two arguments: a list, and a list of numbers to remove from the list. This function will then check if those items exist within that list, and if they exist, then they will be removed. This function will modify the list without returning any value.</dl></sourcedd>
:::*The script should have a '''Shebang line''':::*The list '''my_list''' should have the valuesSample Run 1: '''1, 2, 3, 4, 5''':::*The script should have a function called add_item_to_list(my_list) :::*The script should have a function called remove_items_from_list(my_list, items_to_remove) :::*The function add_item_to_list(my_list) takes a single argument which is a list. This function will look at the value of the last item in the list, it will then append a new value that is +1 bigger then the previous number. This function modifies the list without returning any value:::*The function remove_items_from_list(my_list, list_of_numbers_to_remove) takes two arguments, a list, and a list of numbers to remove from the list. This function will then check if those items are in the list, if they are it will remove them. This function modifies the list without returning any value.:::2. Sample Run 1:<source>
run lab3f.py
[1, 2, 3, 4, 5]
[2, 3, 4, 7, 8]
</source>
:::3. Sample Import 1:<source>
from lab3f import * [1/1899]
 
my_list
[1, 2, 3, 4, 5]
:::'''Sample Run 2 (with import):'''<source>
from lab3f import * print(my_list)
# Will print [1, 2, 3, 4, 5]
add_item_to_list(my_list)
add_item_to_list(my_list)
add_item_to_list(my_list)
 print(my_list)# Will print [1, 2, 3, 4, 5, 6, 7, 8] 
remove_items_from_list(my_list, [1,5,6])
 print(my_list)# Will print [2, 3, 4, 7, 8]
</source>
:::42. Exit the ipython3 shell, download Download the checking script and check your work. Enter the following commands from the bash shell.<source>
cd ~/ops435/lab3/
pwd #confirm that you are in the right directory
ls CheckLab3.py || wget matrix.senecachttps://raw.ongithubusercontent.cacom/~acoatleySeneca-willisCDOT/ops435/master/LabCheckScripts/CheckLab3.py
python3 ./CheckLab3.py -f -v lab3f
</source>
:::53. Before proceeding, make certain that you identify any and all errors in lab3f.py. When the checking script tells you everything is OK before proceeding - proceed to the next step. :Make notes for all of your observations in your lab log book, and proceed to INSTRUCTOR SIGN-OFF.
= LAB 3 SIGN OFF (SHOW INSTRUCTOR) =
::<span style="color:green;font-size:1.5em;">&#x2713;</span> Output of: <code>./CheckLab3.py -f -v</code>
::<span style="color:green;font-size:1.5em;">&#x2713;</span> Output of: <code>cat lab3a.py lab3b.py lab3c.py lab3d.py lab3e.py lab3f.py</code>
 ::<span style="color:green;font-size:1.5em;">&#x2713;</span> Lab3 logbook notes completed'''Be able to answer any questions about the lab to show that you understood it!'''
<br><br>
= Practice For QuizzesLAB REVIEW = :# What is the purpose of using functions in a Python script?:# Write Python code to define a function called '''greetings()''' that when called will greet the user by name and on the next line display the current date:# Why is it useful for functions to accept '''arguments''' passed-up upon function execution?:# What is the purpose of the '''import''' command? What can be the consequence if the import command is not used prior to running a function by name?:# Write Python code to define a function called '''join()''' that excepts two arguments which will be be stored as the variables called '''word1''' and '''word2''' respectively during the execution of the function.:# What is the command to return a value from a function?:# What is the purpose of the '''system()''' function?:# What is the purpose of a '''list'''?:# Assume that the following list has been defined: '''mylist = [ 'apple', 1, 'grape', 2, 'banana', 3, ]'''<br>Based on that, what will the following contain?<source lang="python">mylist[0]mylist[3]mylist[-1]mylist[0:1]</source>:# Assume that the following list has been defined: '''combined_list = [ [7, 5], ['x', 'y'], [ 5, 'f' ] ]'''<br>Based on that, what will the following contain?<source lang="python">combined_list[0]combined_list[1]combined_list[1][0]combined_list[2][0:2]</source>:# Briefly explain the purpose of each of the following functions (methods) that can be used with lists: '''append''', '''insert''', '''remove''', Tests'''sort''', Midterm &amp; Final Exam '''copy'''.</li>:# Write the '''functions''' that perform the following operations on a list:<ol type="a"><li>Returns the length of the list</li><li>Returns the smallest value in the list</li><li>Returns the largest value in the list</li></ol>:# Write a Python script to display all of the elements within a simple list.
[[Category:# x:# x:# xOPS435-Python]]
1,760
edits

Navigation menu