Unit 3 Sections 14 and 15
Libraries and Random Values
- wget https://raw.githubusercontent.com/aidenhuynh/CS_Swag/master/_notebooks/2022-11-30-randomvalues.ipynb
 - Libraries
 
wget https://raw.githubusercontent.com/aidenhuynh/CS_Swag/master/_notebooks/2022-11-30-randomvalues.ipynb
Libraries
- A library is a collection of precompiled codes that can be used later on in a program for some specific well-defined operations.
 - These precompiled codes can be referred to as modules. Each module contains bundles of code that can be used repeatedly in different programs.
 - A library may also contain documentation, configuration data, message templates, classes, and values, etc.
 
Why are libraries important?
- Using Libraries makes Python Programming simpler and convenient for the programmer.
 - One example would be through looping and iteration, as we don’t need to write the same code again and again for different programs.
 - Python libraries play a very vital role in fields of Machine Learning, Data Science, Data Visualization, etc.
 
A few libraries that simplify coding processes:
- Pillow allows you to work with images.
 - Tensor Flow helps with data automation and monitors performance.
 - Matplotlib allows you to make 2D graphs and plots.
 
The AP Exam Refrence Sheet itself is a library!

Hacks:
Research two other Python Libraries NOT DISCUSSED DURING LESSON and make a markdown post, explaining their function and how it helps programmers code. Time, random, flask, pygame.
API’s
- An Application Program Interface, or API, contains specific direction for how the procedures in a library behave and can be used.
 - An API acts as a gateway for the imported procedures from a library to interact with the rest of your code.
 
Activity: Walkthrough with NumPy
- Install NumPy on VSCode:
- Open New Terminal In VSCode:
 - pip3 install --upgrade pip
 - pip install numpy
 
 
REMEMBER: When running library code cells use Python Interpreter Conda (Version 3.9.12)
Example of using NumPy for arrays:
import numpy as np
new_matrix = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
 
print (new_matrix)
import numpy as np
 
# defining polynomial function
var = np.poly1d([2, 0, 1])
print("Polynomial function, f(x):\n", var)
 
# calculating the derivative
derivative = var.deriv()
print("Derivative, f(x)'=", derivative)
 
# calculates the derivative of after
# given value of x
print("When x=5  f(x)'=", derivative(5))
Random Values
- Random number generation (RNG) produces a random number (crazy right?)
- This means that a procedure with RNG can return different values even if the parameters (inputs) do not change
 
 - CollegeBoard uses 
RANDOM(A, B), to return an integer between integersAandB.- RANDOM(1, 10) can output 1, 2, 3, 4, 5, 6, 7, 8, 9, or 10
 - In Python, this would be 
random.randint(A, B), after importing Python's "random" library (import random) - JavaScript's works a little differently, with 
Math.random()returning a value between 0 and 1.- To match Python and CollegeBoard, you could make a procedure like this
 
 
 
CollegeBoard Example: What is the possible range of values for answ3

import random # Fill in the blank
def Dice(n):
    n = n.replace(' ', '')
    n = n.replace('k', '000')
    n = n.replace('m', '000'*2)
    n = n.replace('b', '000'*3)
    rol = " "*int(n)
    rolls = []
    for k in rol:
        rolls.append(random.randrange(0,7))
    print(sum(rolls)/len(rolls))
        
    
Dice(input()) # Will output a range of __ to __
Homework
- 
Write a procedure that generates n random numbers, then sorts those numbers into lists of even and odd numbers (JS or Python, Python will be easier).
 - 
Using NumPy and only coding in python cell, find the answer to the following questions: a. What is the derivative of 2x^5 - 6x^2 + 24x? b. What is the derivative of (13x^4 + 4x^2) / 2 when x = 9?
 - 
Suppose you have a group of 10 dogs and 10 cats, and you want to create a random order for them. Show how random number generation could be used to create this random order.
 
import random, time, sys
def Dice(n):
    n = n.replace(' ', '')
    n = n.replace('k', '000')
    n = n.replace('m', '000'*2)
    n = n.replace('b', '000'*3)
    print(n)
    rol = " "*int(n)
    rolls = []
    even = []
    odd = []
    for k in rol:
        rolls.append(random.randint(-0xffffffffffffffffffffffffffffffff,0xffffffffffffffffffffffffffffffff))
        
    for j in rolls:
        if (j %2 == 0):
            even.append(j)
        else:
            odd.append(j)
    
    print("Even total: ",len(even))
    print("odd total: ",len(odd))
    if len(even) < len(odd):
        print((1 - (len(even)/len(odd))) * 100, "% Off predicted odds")
    else:
        print((1 - (len(odd)/len(even))) * 100, "% Off predicted odds")
    
Dice(input())
import random, time, sys
def Dice(n):
    n = n.replace(' ', '')
    n = n.replace('k', '000')
    n = n.replace('m', '000'*2)
    n = n.replace('b', '000'*3)
    print(n)
    rol = " "*int(n)
    even = 0
    odd = 0
    for k in rol:
        if (random.randint(0,1)) == 1:
            odd = odd + 1
        else:
            even = even + 1
    
    print("Even total: ",even)
    print("odd total: ",odd)
    if even < odd:
        print((1 - (even/odd)) * 100, "% Off predicted odds")
    else:
        print((1 - (odd/even)) * 100, "% Off predicted odds")
    
Dice(input())