November 1 - Programming Basics

Welcome to the fourth lesson of Woodlands Computer Science! Presentation Slides are available here (use your PDSB account to view the slides)


Table of Contents

In this meeting, we’ll be covering:


What Are Functions?

Functions in programming are a set of instructions grouped together to achieve a specific task. You can pass data into a function (known as function parameters) and the function can return data.

We’ve already been unknowingly exposed to functions - Python has built-in functions that we’ve used throughout the last few lessons.

Here are some examples: | Built-in Function | Description | |:—————–:|:————————————————————————————–:| | print() | Prints to the standard output device (display messages and information on the screen). | | str() | Returns the string version of the object which is passed in. | | range() | Returns a sequence of numbers, starting from 0. | | abs() | Returns the absolute value of a number. |

Why Use Functions?

Syntax of a Function

def func_name(parameters):
    <code>
  1. The def keyword marks the start of the function header.
  2. Next, the name of the function, which follows the rules of writing identifiers in Python.
  3. The function name must be followed by parentheses with any number of parameters inside.
  4. A semicolon to mark the end of the function header.
  5. At least one line of indented code that will execute when the function is called.
  6. If want our function to return data, we can use the return keyword inside our function.

Example 1

In our first meeting, we created a program (Pythagorean Theorem) that calculated the value of $\sqrt{a^2+b^2}$.

If we needed to compute this value multiple times in our program, we could create a function instead of rewriting the code!

def calculate_hypotenuse(a, b):
    return (a**2 + b**2)**0.5

In this example:

a = 3 b = 4 def calculate_hypotenuse(a, b): return (a**2 + b**2)**0.5 print(calculate_hypotenuse(a, b)) print(calculate_hypotenuse(5, 12))

Scope of Functions

The “scope” of a function refers to where in the program the variable is recognized. For functions, the parameters and variables declared inside have a local scope. This means that they cannot be accessed outside of the function.

Example:

def cool_function(): x = 10 print(f'Inside: x = {x}') x = 20 cool_function() print(f'Outside: x = {x}')

What if we want to modify or access a variable outside the local scope of our function?

We can use the global keyword. By placing global before any global variable name inside a function, it will be assigned its value and any modifications will **not **be local.

A more intuitive explanation is through an example:

x = 10 def add_ten(): global x x = x + 10 add_ten() print(x)


Activity

  1. Write a function that takes in a non-negative integer n and returns the sum of the first n integers.
    • Bonus: Can you think of a very fast way to write your function without using a loop?
  2. Write a function that takes in a non-negative integer n and returns the value of n!
  3. Write a function that counts the number of lowercase and uppercase characters in a string, and prints the values.
    • Secondly, the function should return a list containing all uppercase characters in the string.



Using Comments in Code

Comments are used to provide **explanatory information **about the source code of a program.

Comments keep your code readable, especially if you plan to revisit your program in the future or share it with others.

In Python, single line comments are created by preceding the comment with ‘#’ and multi-line comments are created by enclosing the comments with a pair of triple apostrophes (‘’’ or “””).

def calculate_hypotenuse(a, b):
    '''
    Parameters:
        a: the first leg of the triangle 
        b: the second leg of the triangle 
    Returns:
        The hypotenuse of the triangle 
    ''' 
    return (a**2 + b**2)**0.5 # single line comment

Reading Text Files

Sometimes, instead of user input, we want to read information from a file instead. If we have a file named a.txt which contains:

Hello!
Line 1. 
Line 2.
  1. We can use Python’s built-in open() function to open the file.
  2. To read a file, we can specify the text file’s path and name, and then pass in 'r' as the function’s second argument.
  3. Finally, we use the .read() method to see the contents of the file.

Example:

If we pass an integer N into the .read() method, we will only read the first N characters.

The .readline() method returns one line of the text file.

If we want to get rid of the new lines or any whitespace at the start or end of a line, we can use Python’s built-in .strip() method

It is often useful to loop through a text file line by line.

Writing to a Text File

Sometimes, we want to output to a text file instead of to the screen. Once again, we will employ Python’s built-in open() function.

However, the second parameter of the function depends on what you’re trying to achieve:

| Second Parameter | Description | |:—————-:|:—————————————————————————————————–:| | ‘a’ | Adds to the end of the file, and creates a new file if the specified file does not exist. | | ‘w’ | Overwrites any existing content of the file, creates a new file if the specified file does not exist. | | ‘x’ | Creates a new file, throws an error if the specified file already exists. | | abs() | Returns the absolute value of a number. |

If we wanted to add more text to the end of a.txt, we would use the following code:

text = open('a.txt', 'a')

Now that we have opened the file, we can use the .write() method to add any text to the file!

Note that for the text file to save, you need to use the .close() method after you are finished editing the file.

Activity

  1. Create a .txt file in the same directory as your code and copy/paste The Bee Movie script into it.
  2. Then, loop through the script, and write every line that contains the word “bee” in it into a separate text file.
  3. Bonus Problems:
    • Print how many times each letter in the alphabet appears in the script.
    • Print the three most frequent words in the entire script.

Try this in your own code editor!



Try/Except

Usually, errors in our code would stop the execution of our program. However, if we want to catch and handle these errors, we can use the try and except block.

The format of a try and except block is as follows (indentation is needed):

Example:

We can also specify a specific error to catch using except. Consequently, like if/else statements, we can stack except statements:

We can use an else statement after except which will execute if no errors were encountered.

try: name = "Jeffrey" print(name) except: print("Program didn't crash :)") else: print("Else block!")


Activity

Write a program that takes in two integers a and b as input, and prints the result of a/b. Use try and except to print an error if the user tries to divide by 0, and reprompt for input until they provide valid values for a and b.