3.3 to 3.4: Algorithms

3.3: Mathematical expressions:

  • Algorithm: a finite set of instructions that accomplish a specific task.
  • Ex: when you go to bake cookies you use specific steps
  • Getting ready in the morning: shirt, pants, breakfast
  • Algorithm is like a list of steps that occur in a specific/particular order.
  • Sequencing: things are done in order
  • Selection
  • Iteration
  • Selection: do first step, make decision(yes or no), step true or false( if or else)
  • Iteration/repetition→ First step, second step, continue condition, Yes or no, step to do if true
  • Ways to write algorithm: flow chart(use arrows to tell decision)
  • Pseudo code→ fake code. writing . verbal instructions/comments on what each section is doing. </span>

"Algorithm"

def factorial(n):
    # Selection
    if n < 0:
        return "Factorial is not defined for negative numbers"
    # in case negative numbers are inputted...
    elif n == 0 or n == 1:
        # "else if" sets a condition to be met, and if it is met, the code should return 1
        return 1
    else:
        result = 1
        for i in range(2, n + 1):
            #iterates through the list, from 2 to n inclusive - 1 is not counted, n*1 = n
            result *= i
            #multiplies the current value of result by i
            # i is sort of like the index, or the number assigned to each value in the list, starting from 0
        return result


def main():
    try:
        # Get user input for the numbers as a comma-separated list
        user_input = input("Enter a list of non-negative integers (comma-separated): ")
        numbers = [int(num.strip()) for num in user_input.split(',')]


        # Calculate and print factorial for each number
        for number in numbers:
            # Calculate factorial for each number, iterates through the list
            result = factorial(number)


            if isinstance(result, int):
                print(f"The factorial of {number} is: {result}")
                # Selection, makes sure the result is actually an integer before printing
            else:
                print(f"The factorial for {number} is not defined (negative input).")


    except ValueError:
        print("Invalid input. Please enter a valid list of non-negative integers.")




if __name__ == "__main__":
    main()
The factorial of 2 is: 2
The factorial of 0 is: 1
The factorial of 1 is: 1
The factorial of 5 is: 120
The factorial for -3 is not defined (negative input).

Popcorn Hack #1

Scenario: You’re in your math test and you forgot how to graph the parent function of 3(x+2)-4. Input a list of x-values to figure out the y-values and print the results of what you get so you can graph the function and get an A on your math test!

for i in 7: 
    print("test")

#x = 1

#y = 3 * (x + 2)

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

/Users/tanayshah/vscode/student2/_notebooks/2023-10-04-Student_Teaching.ipynb Cell 6 line 1
----> <a href='vscode-notebook-cell:/Users/tanayshah/vscode/student2/_notebooks/2023-10-04-Student_Teaching.ipynb#X36sZmlsZQ%3D%3D?line=0'>1</a> for i in 7: 
      <a href='vscode-notebook-cell:/Users/tanayshah/vscode/student2/_notebooks/2023-10-04-Student_Teaching.ipynb#X36sZmlsZQ%3D%3D?line=1'>2</a>     print("test")
      <a href='vscode-notebook-cell:/Users/tanayshah/vscode/student2/_notebooks/2023-10-04-Student_Teaching.ipynb#X36sZmlsZQ%3D%3D?line=3'>4</a> #x = 1
      <a href='vscode-notebook-cell:/Users/tanayshah/vscode/student2/_notebooks/2023-10-04-Student_Teaching.ipynb#X36sZmlsZQ%3D%3D?line=4'>5</a> 
      <a href='vscode-notebook-cell:/Users/tanayshah/vscode/student2/_notebooks/2023-10-04-Student_Teaching.ipynb#X36sZmlsZQ%3D%3D?line=5'>6</a> #y = 3 * (x + 2)


TypeError: 'int' object is not iterable

3.3 Continued - Mathematical Operations

  • Addition: a + b
  • Subtraction: a - b
  • Multiplication: a * b
  • Division: a / b
  • Modulus (remainder of a/b): a MOD b
  • For python it is %
  • Math in order of operations
  • MOD is held to the value of multiplication + division in PEMDAS
num1 = 40
num2 = num1 / 2
num3 = 5 * num2 + 3
result = num2 % 3 * num1 + 4 - num3 / 2
print (result)
32.5

Popcorn hack #2

What will the code below print?

num1 = 20
num2 = num1 /2 
num3 = num2 * 10 + 3
print(num3)

#

Popcorn hack #3:

Write a code that can add, subtract, multiply, divide, and MOD numbers. Try adding them in the same line and seeing what they do. Try adding variables to your hack #2.

x = 2
y = 3

add = y + x
subtract = y - x 
multiply = y * x
divide = y/x
mod = y%x
remainder = 3//2

print(add)
print(subtract)
print(multiply)
print(divide)
print(mod)
print(remainder)

5
1
6
1.5
1
1

3.4: Strings

  • Strings are ordered sequence of characters (characters = numbers, letters, even space)
  • Substring is part of an existing string
  • Some procedures exist that can be used with strings, each language has its own functions
  • len (str)
  • Returns the number of characters in the string
len ("APCSP")
5

  • Concat
  • Merges both strings together, returns it so that they are one word </span>
concat = "AP" + "CSP"
# Concat is simply a variable
print(concat)
APCSP

Popcorn hack #4:

Find the number of characters in your last name using len. Use concat to merge your first and last name together. Use Substring to show only the 3rd to 6th characters.

len1 = len("Tanay Shah")
first = "Tanay"
last = "Shah"

concat = first + " " + last
print(concat)
print(len1)
Tanay Shah
10
#Find the number of characters in your last name using len.
length = len("Bharadwaj")
print(length)


# Use concat to merge your first and last name together.
concat = "Aditi" + "Bharadwaj"
print (concat)


# Use Substring to show only the 3rd to 6th characters.
# be sure to start at 2 because it starts counting at 0
substring = concat[2:6]
print (substring)
9
AditiBharadwaj
itiB

Palindromes

A palindrome is a string that reads the same from right to left as left to right. For example, 2112 and mom are palindromes


def palindrome(input_str):
    # Remove spaces and convert the string to lowercase
    clean_str = input_str.replace(" ", "").lower()
    # Check if the cleaned string is equal to its reverse
    return clean_str == clean_str[::-1]


print(palindrome("taco cat")) # True
print(palindrome("hi")) # False
True
False

Pseudo Code vs Python

Python

Python is a high-level programming language. When you write an algorithm in Python, you are essentially creating a set of instructions that a computer can follow to solve a specific problem.

name = "Eshika"
age = 15
print("Name:", name)
print("Age:", age)

Pseudo Code

College Board Pseudo Code is a simplified, high-level representation of an algorithm that is designed to be easy to understand. Pseudo code uses a mixture of natural language and programming-like constructs to describe the algorithm’s logic without specifying a particular programming language.

OUTPUT “Name:”, name OUTPUT “Age:”, age </span>

Robot MCQ Problems

If the robot leaves the grid, the program will end Command MOVE_FORWARD() moves the robot one block in the direction its facing Command ROTATE_LEFT() moves the robot left in place Command ROTATE_RIGHT() makes the robot do an in place right turn Command CAN_MOVE(direction) makes it so that if there is an open space in the relative direction the robot is facing, the robot goes there, can be any direction

Forawrd 
forward 
forward 
turn left
forward 
forward
right 
forward 
forawrd
forward 
 

Logic Gates in Python:

AND gate, OR gate, NOT gate, NAND gate, NOR gate, XOR gate, and XNOR gate.

What is a logic gate?: Logic gates are used in circuits to make decisions based on a combination of digital signals beign inputed. The concept of logic gates revolves around Boolean algebra as well as binary. It is basically how zero represents the false condition and 1 represents True. Think of it as a switch where if it is at 0, the switch is turned off while if it is 1, then the lightbulb will turn on.

The AND gate requires both inputs to be 1 or true so the end output is true. In other words, the output is 1 only when both inputs one AND two are 1.

age= 15

if age>2 and type(age)==int:
    print(age)

age=13 

if age>2 and type(age)==str:
    print(age)
15

De Morgan’s Law

  • A way to turn statements from AND to OR by negating terms
  • not (A or B) = (not A) and (not B)
  • not (A and B) = (not A) or (not B)

HW Hacks

Use an algorithm to find certain values of the Fibonacci sequence. For example, your code should output the nth index in the sequence. An example of how the sequence works is 0,1,1,2,3,5,8,13. The pattern is you add the previous 2 numbers together to get the new number.

def fibonacciSeries(Number):
	if Number == 0:
		return 0
	elif Number == 1:
		return 1
	else:
		return fibonacciSeries(Number - 1) + fibonacciSeries(Number - 2)


n = int(input())
print("Fibonacci series:", end=' ')
for n in range(0, n):
	print(fibonacciSeries(n), end=' ')
Fibonacci series: 0 1 1 2 3 5 8 13 21 34 
list = []
n = int(input())

for i in range(1,n): 
    if len(list) == 0: 
        list.append(0)
    if len(list) == 1: 
        list.append(1)
    y = list[i] + list[i-1] 
    list.append(y)

print(list)    
print(list[n])
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
55