- CB 3.12,3.13 Developing Procedures
What is a procedure?
A procedure is a named group of code that has paramaters and return values. Procedures are known as methods or functions depending on the language.
A procedure executes the statements within it on the parameters to provide a return value.
What are parameters?
Paramaters are input values of a procedure that are specified by arguments.Arguments specify the values of the parameters when a procedure is called.
By creating theses algorithms the readibility of code increases and the complexity decreases. This is becasue a function’s name can tell the reader what action it will perform, and by calling it, the code becomes more clean and easy to understand.
What is a return value?
A return value is the value that is returned when a function or a method is called.
That return value can be assigned or printed

Procedures are used to create algorthims that can perform certain actions or return values. When a procedure returns a value, theis information must be stored in a variable for later use. However some procedures like the MOVE_FORWARD() perform an action, and don’t return a value. The image above provides an example of where procedures that don’t output a value would be used.
A 60$ item recieves a 20% discount and taxed at 8%.
PROCEDURE applyDiscount(cost, percentDiscounted)
{
    temp ← 100 - percentDiscounted
    temp← temp/ 100
    cost ← cost *temp
    RETURN(cost)
}
price ← applyDiscount(60, 20)
This is how we get the final price with the discount by calling the procedure and assigning it to the price variable.
PROCEDURE applyTax(cost, percentTaxed)
{
    temp ← 100 + percentTaxed
    temp← temp/ 100
    cost ← cost *temp
    RETURN(cost)
}
price ← applyTax(price, 8)
This applys the 8% tax to the price determined after the discount.
Popcorn Hack 1
Given the applyTax procedure above: How would you call the procedure to get it to find the price using cost = 50, and percentTaxed = 10, and what value will it return?
#code here
price2 <- applyTax(price ,10)
# 52.8 is output
What Are Functions?
- Collections of code
 - Divides large program into smaller chunks
 - Better readability
 - Less repetitive code
 - More efficient code
 - Good organization
 
What Are The Components of a Function?
- The function declaration
 - The parameters (input). This is also referred to as an argument when a value is being passed to the actual function.
 - The functionality
 - The return value (output)
 - Calling the function
 
# Defining Functions
#
# def function_name(parameter1, parameter2, etc..):
#     code here...
#
#     return return_value;
# return the value of parameter1 plus parameter2;
def add(parameter1, parameter2): # creates a function that takes in two parameters
    solution = parameter1 + parameter2; # sets solution to the sum of parameter1 and parameter2
    return solution; # return solution
    
print(add(5, 5)); # prints the return value of add(5,5)
Popcorn Hack 2:
1. Make a function that returns the difference of two numbers
# Code here
def diff(a,b):
    final = a-b
    return final
print(diff(5,6))
-1
What is a Class?
- A class is an outline for a set of nested functions and variables.
 - There are instance variables
 - Functions
 - Constructor method (Required)
 - To String method
 - Getter method
 - Setter method
 
How Does a Class Work?
# Defining Classes
class person:
    def __init__(self, name, age, ): # constructor
        self.name = name;
        self.age = age;
    
    def getName(self): # method to create get name
        return self.name;
    
    def getAge(self): # method to create get age
        return self.age;
    
    def setName(self, name): # method to create set name
        self.name = name;
        
    def setAge(self, age): # method to create set age
        self.age = age;
        
    def yearOlder(self): # method to increment age by 1
        self.age += 1;
        
    def __str__(self): # method that returns a string when the object is printed
        return (f"My name is {self.name} and I am {self.age} years old.")
Person1 = person("John Doe", 15);
print(Person1)
print(Person1);
Popcorn Hack 3:
1. Create a Car class which has the attributes model, vehicle name, and price
2. Create instances of the following cars
- Name: Honda Civic , Model Year: 2018 , Price: $13,000
 - Name: Toyota Prius, Model Year: 2023 , Price: $28,000
 - Name: Chevrolet Impala, Model Year: 2020 , Price: $22,000
 
class Car:
    def __init__(self, name, model_year, price):
        self.name = name
        self.model = model_year
        self.price = price
honda_civic = Car("Honda Civic", 2018, 13000)
toyota_prius = Car("Toyota Prius", 2023, 28000)
chevrolet_impala = Car("Chevrolet Impala", 2020, 22000)
print("Car 1:")
print("Name:", honda_civic.name)
print("Model Year:", honda_civic.model)
print("Price: ${:,.2f}".format(honda_civic.price))
print("\nCar 2:")
print("Name:", toyota_prius.name)
print("Model Year:", toyota_prius.model)
print("Price: ${:,.2f}".format(toyota_prius.price))
print("\nCar 3:")
print("Name:", chevrolet_impala.name)
print("Model Year:", chevrolet_impala.model)
print("Price: ${:,.2f}".format(chevrolet_impala.price))
Car 1:
Name: Honda Civic
Model Year: 2018
Price: $13,000.00
Car 2:
Name: Toyota Prius
Model Year: 2023
Price: $28,000.00
Car 3:
Name: Chevrolet Impala
Model Year: 2020
Price: $22,000.00
Homework:
Assignment 1: How do you use functions?
Create a turtle python function that...
- Takes a single parameter as the number of sides
 - Outputs a shape corresponding to the number of sides
 - Call the function with the argument being a variable with the user input
 
Hint:
import turtle
pen = turtle.Turtle()
def shape(sides):
    angle = 360 / sides
    for _ in range(sides):
        pen.forward(50)  
        pen.right(angle)
numsides = input('How many sides do yoUUUU wnat in YOUUUURRRR shape?!?!!?!:')
shape(int(numsides))
turtle.done()
Assignment 2:
Create a student class that...
- Has a constructor that takes three parameters as attributes
 - 
        
- name
 - grade
 
 - Three getter methods to access the name, email, and grade
 - Three setter methods to modify the name, email, and grade
 - A to string method that returns the three instance variables in this format - "My name is {name}. My email is {email}. My grade is {grade}
 - Create an instance of the class that corresponds with you
 
class Student:
    def __init__(self, email, name, grade):
        self.email = email
        self.name = name
        self.grade = grade
    def get_name(self):
        return self.name
    def set_name(self, name):
        self.name = name
    def get_email(self):
        return self.email
    def set_email(self, email):
        self.email = email
    def get_grade(self):
        return self.grade
    def set_grade(self, grade):
        self.grade = grade
    def to_string(self):
        return f"My name is {self.name}. My email is {self.email}. My grade is {self.grade}"
my_student = Student("imaadmuzaffer@gmail.com", "Imaad", 100)
my_student.set_name("Imaad")
my_student.set_email("imaadmuzaffer@gmail.com")
my_student.set_grade(100)
print(my_student.to_string())
My name is Imaad. My email is imaadmuzaffer@gmail.com. My grade is 100