Vocabulary

  • Iteration - Repitition of a Process
  • For Loop - FOR LOOP repeats a function for a set number of times; I is the number of times repeated
  • While Loop - The while loop is used to repeat a section of code an unknown number of times until a specific condition is met
  • Initialization - What sets the counter variable to a starting value. For example (var i = 0) represents an initial value of 0.
  • Condition - Allows the computer to know whether or not to keep repeating the loop.
  • increment/decrement - Modifies the counter variable after each repetition.
  • Indexing / List Index - The position of an element in a list, starting from 0
  • append, remove, pop - Various methods, append adds an element to the end, remove removes at an index, and pop removes the last item.
  • Elements [in a list] - An item in a list.
  • Nesting - Having one data type or function inside another data type or function, such as lists or loops.
  • array - Another name for a list, depends on the language
  • Key - the unique identifier associated with a value in a dictionary, such as name
  • Value - the data associated with a key in a dictionary, such as age
  • Pair - a key-value combination in a dictionary, such as a person's name + age
  • Mutable - the ability to be changed or modified
  • Tuple - an immutable ordered sequence of elements, similar to a list
  • Insertion - the process of adding a new key-value pair to a dictionary
  • Deletion - the process of removing a key-value pair from a dictionary
  • Keys method/keys() - a built-in Python function that returns a list of all keys in a dictionary
  • Values method/values() - a built-in Python function that returns a list of all values in a dictionary
  • Items method/items() - a built-in Python function that returns a list of all key-value pairs in a dictionary as tuples
  • Update method/update() - a built-in Python function that updates a dictionary with key-value pairs from another dictionary or iterable
  • Clear method/clear() - a built-in Python function that removes all key-value pairs from a dictionary

Questions:

  1. Give an example of iteration.
  2. What is the difference between a for loop and while loop? That is, when would you use a for loop and when would you use a while loop?
  3. In the APCSP AP exam, what number do indexes start with? important to know
  4. Are dictionaries and lists mutable?

Simulations/Interactions

Building a simulation o#r interaction using lists and iteration in VS Code can be accomplished using a few simple steps:

  1. Define your data: First, you need to define the data that your simulation will be working with. This could be a list of numbers, a list of strings, or any other type of data that your simulation will be manipulating.

  2. Write your simulation code: Once you have defined your data, you can start writing the code for your simulation. This code will typically involve iterating over your list of data, performing some operation on each item in the list, and updating the list accordingly.

  3. Test your simulation: After you have written your simulation code, it is important to test it to make sure it is working as expected. You can do this by running your code and checking the output to see if it matches what you expect.

  4. Refine your simulation: Once you have tested your simulation, you may need to refine it based on the results. This could involve tweaking the code to make it more efficient, adding new features, or fixing any bugs that you have discovered.

Why use simulations?

  • Simulations can be useful because they can emulate real world situations without needing excessive resources (ex: money), time, or equipment. For example, a simulation of the effectiveness of a new seatbelt or airbag can be performed by simulating car crashes. This would be better than doing it in real life because you wouldn't want to place people in cars and then crash them for obvious reasons.
  • However, simulatins do assume things about the real world and can have biases. They can be oversimplified because the real world often has more complications and factors that can affect something. In the case of our car crash simulation, other things can have a big impact, such as the weather and experience of the driver. However, these things can sometimes be held constant in the simulations.

Pros of using simulations:

  • Cost effective / resource efficient
  • Helps make accurate predictions
  • Speed

Cons:

  • Only as accurate as the training data is
  • Bias
  • Needs to by simplified

Questions:

  1. Explain an example of something you could simulate.
  2. Why are simulations useful and important?

Here's a simple example of a simulation in Python that uses lists and iteration to calculate the average of a list of numbers:

numbers = [1, 2, 3, 4, 5]

# Initialize the sum and count variables
sum = 0
count = 0

# Iterate over the list of numbers, adding each number to the sum
for number in numbers:
    sum += number
    count += 1

# Calculate the average of the list of numbers
average = sum / count

# Print the average
print("The average of the list is:", average)
The average of the list is: 3.0

This code defines a list of numbers, iterates over the list to calculate the sum and count of the numbers, and then calculates the average by dividing the sum by the count. Finally, it prints the average to the console.

Lists

  • Iteration statements can be used to traverse a list
  • Knowldege of exisiting algorithms that use iteration can help in constructing new algorithms. Some are:
    • Determining a minimum or maximum value in a list
    • Computing a sum or average of a list of numbers

What are Lists?

  • Lists are a way to store data types such as strings, integers, and floats..
  • Each sequence is demarcated with an index, starting from 0. This is known as base 0 indexing
  • In memory, it is stored as a variable name with multiple pointers to each variable stored in a certain order
  • Lists can also be called arrays
  • Lists have methods that act upon the list and change them. This moves the pointers within RAM to change the parts of the list.

Nested Lists

Uses of Nested lists

Placing lists within lists allows you to have arrays of similar data together, and create complexity.

Some uses include:

  • Creating 2d Arrays
  • Storing similar, but slightly different categories (sublists)
  • Create a matrix

Iteration

Iterative statements are also called loops, and they repeat themselves over and over until the condition for stopping is met.

  • In College Board's Pseudocode, the first is a REPEAT n TIMES loop, where the n represents some number.

The second type of loop is a REPEAT UNTIL (condition) loop, where the loop will continue to run until a condition is met.

Conceptually, a while loop is very similar to an if conditional, except that a while is continually executed until it's no longer true and an if is only executed once.

Questions:

  1. Describe a situation where you would need iteration.
  2. Describe the difference between a "REPEAT n TIMES" loop VS a "REPEAT UNTIL (condition)" loop. it is important you know this for the AP Exam

Libaries

  • A software library contains procedures that may be used in creating new programs.
  • Existing code segments can come from internal or external sources, such as libaries or previously written code.
  • The use of libaries simplifies the task of creating complex programs.

APIs

Application program interfaces (APIs) are specifications for how the procedures in a libary behave and can be used as documentation for an API/libary is necessary in understanding the behaviors provided by the API and how to use them.

A file that contains procedures that can be used in a program is considered a libary.

  • API provides specifications for how procedures in a library behave and can be used.
  • Many companies use APIs for programmers to interact with their products.

Questions:

  1. What are some libraries that we've learned about? What are their advantages/disadvantages?

Dictionaries

What are Dictionaries?

  • a collection of key-value pairs that is not ordered, where each key is saved and connected to a particular value.
  • referred to as hash tables, maps, or associative arrays in some programming languages
  • used to store and retrieve data efficiently, as they allow fast access to values based on their associated keys
  • beneficial for a variety of jobs, including storing, indexing, and counting

What are the types of Dictionaries?

Ordered Dictionaries

  • Iterates through the values and keys in the same order that the keys were inserted.
  • A deleted entry that is later reinserted will be placed at the end of the dictionary.
  • Particularly created to keep its items organized
  • Helpful when processing data in a specified sequence or when the order of insertion is critical.
  • An ordered dictionary is preferable if the data's order is crucial.

How to create an ordered dictionary?

  1. Import collections' OrderedDict
  2. To create a blank ordered dictionary, instantiate OrderedDict without giving the constructor any arguments.
  3. Increase the dictionary's key-value pairs by putting a key in square brackets ([]) and giving it a value.
  4. Print out the requested dictionary.
  5. Repeat the sorted dictionary's elements.

Regular Dictionaries

  • Mutable; once being formed, key-value pairs may be added, removed, or modified.
  • Used to store key-value pairs of data values.
  • Loops can be used for iteration
  • A normal dictionary might perform better if order is not crucial.

How to create a regular dictionary?

  1. Make a variable with the name of the dictionary as its value.
  2. Put the variable in a set of curly braces without any content.
  3. Use the dict() OR empty curly braces to create a dictionary.

Questions:

  1. Compare and contrast lists and dictionaries.
  2. Do dictionary keys need to be unique?
folklore_album = {
    "title": "Folklore",
    "artist": "Taylor Swift",
    "year": 2020,
    "genre": ["Alternative/Indie", "Pop"],
    "tracks": {
        1: ["the 1", 7],
        2: ["cardigan", 9],
        3: ["the last great american dynasty", 7],
        4: ["exile (ft. Bon Iver)", 10],
        5: ["my tears ricochet", 7],
        6: ["mirrorball", 6],
        7: ["seven", 5],
        8: ["august", 7],
        9: ["this is me trying", 7],
        10: ["illicit affairs", 8],
        11: ["invisible string", 6],
        12: ["mad woman", 7],
        13: ["epiphany", 6],
        14: ["betty", 8],
        15: ["peace", 9],
        16: ["hoax", 7],
        17: ["the lakes", 6]
    }
}

# Printing the dictionary
print(folklore_album)
{'title': 'Folklore', 'artist': 'Taylor Swift', 'year': 2020, 'genre': ['Alternative/Indie', 'Pop'], 'tracks': {1: ['the 1', 7], 2: ['cardigan', 19], 3: ['the last great american dynasty', 7], 4: ['exile (ft. Bon Iver)', 10], 5: ['my tears ricochet', 7], 6: ['mirrorball', 6], 7: ['seven', 5], 8: ['august', 7], 9: ['this is me trying', 7], 10: ['illicit affairs', 8], 11: ['invisible string', 6], 12: ['mad woman', 7], 13: ['epiphany', 6], 14: ['betty', 8], 15: ['peace', 9], 16: ['hoax', 7], 17: ['the lakes', 6]}}
for i in folklore_album["tracks"]:
    print("track #" + str(i) + ": " + folklore_album["tracks"][i][0])
    print("    my rating: " + str(folklore_album["tracks"][i][1]) + "/10")
track #1: the 1
    my rating: 7/10
track #2: cardigan
    my rating: 19/10
track #3: the last great american dynasty
    my rating: 7/10
track #4: exile (ft. Bon Iver)
    my rating: 10/10
track #5: my tears ricochet
    my rating: 7/10
track #6: mirrorball
    my rating: 6/10
track #7: seven
    my rating: 5/10
track #8: august
    my rating: 7/10
track #9: this is me trying
    my rating: 7/10
track #10: illicit affairs
    my rating: 8/10
track #11: invisible string
    my rating: 6/10
track #12: mad woman
    my rating: 7/10
track #13: epiphany
    my rating: 6/10
track #14: betty
    my rating: 8/10
track #15: peace
    my rating: 9/10
track #16: hoax
    my rating: 7/10
track #17: the lakes
    my rating: 6/10

Code Examples

Reverse a list utilizing features of lists and iteration

original_list = [1, 2, 3, 4, 5]
print("List before reverse : ",original_list)
reversed_list = []
for value in original_list:
  reversed_list = [value] + reversed_list
print("List after reverse : ", reversed_list)
List before reverse :  [1, 2, 3, 4, 5]
List after reverse :  [5, 4, 3, 2, 1]

Similar to insertion sort, this algorithm takes an unsorted array and returns a sorted array. Unlike insertion sort where you iterate through the each element and move the smaller elements to the front, this algorithm starts at the beginning and swaps the position of every element in the array

list = [9, 8, 4, 3, 5, 2, 6, 7, 1, 0]
print(f"array before sort {list}")
def insertion_sort(list):
    for index in range(1,len(list)): # repeats through length of the array
        value = list[index]
        i = index - 1
        while i >= 0:
            if value < list[i]:
                list[i+1] = list[i] # shift number in slot i to the right
                list[i] = value # shift value left into slot i
                i = i - 1
            else:
                break

IS = insertion_sort(list)
print(f"array after sort {list}")
array before sort [9, 8, 4, 3, 5, 2, 6, 7, 1, 0]
array after sort [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Here is a list comprehension example, using lists to create lists.

Below, only songs in the folklore album that have less than 7 characters in their titles are printed.

TS_folklore = ["exile", "my tears ricochet", "this is me trying", "illicit affairs", "august", "mirrorball", "betty", "mad woman", "epiphany", "peace", "cardigan"]

# this list is only songs that have less than 10 characters in the title
TS_folklore_updated = [x for x in TS_folklore if len(x) < 7]

print("These are the songs in Taylor Swift's folklore album that have less than 7 characters in their title")
print(TS_folklore_updated)
These are the songs in Taylor Swift's folklore album that have less than 7 characters in their title
['exile', 'august', 'betty', 'peace']

Below, only songs that have a rating greater than 7 will be printed.

TS_folklore_ratings = {"exile": 8, "my tears ricochet": 6, "this is me trying": 7, "illicit affairs": 8, "august": 4, "mirrorball": 3, "betty": 6, "mad woman": 6, "epiphany": 2, "peace": 10, "cardigan": 10}
TS_folklore_best = {k:v for (k,v) in TS_folklore_ratings.items() if v>7}

print("These are the songs in Taylor Swift's folklore album that I give a rating greater than 7")
print(TS_folklore_best)
These are the songs in Taylor Swift's folklore album that I give a rating greater than 7
{'exile': 8, 'illicit affairs': 8, 'peace': 10, 'cardigan': 10}

Questions:

  1. How is list comprehension similar to iteration?

Hacks

  • The difference between lists and dictionaries is that Aalist is an ordered collection of elements that can be of different data types, while a dictionary is an unordered collection of key-value pairs. In a list, elements are accessed by their index, which is an integer value, while in a dictionary, elements accessed by their keys, which can be any data type such as a string or a number.
import random

aewss = {
    "title": "An Evening With Silk Sonic",
    "artist": "Silk Sonic",
    "year": 2022,
    "genre": ["R&B", "Soul"],
    "tracks": {
        1: "Silk Sonic Intro",
        2: "Starboy",
        3: "Just wanna Rock",
        4: "Waiting for Love",
        5: "Smokin Out The Window",
        6: "Infinity",
        7: "777",
        8: "Dance Monkey",
        9: "Riptide",
        10: "life goes on"
}
}
print("Printing the greatest album of all time:\n")
print("Album Title:", aewss["title"])
print("Artist:", aewss["artist"])
print("Year:", aewss["year"])
print("Genre:", ", ".join(aewss["genre"]))

print("\nTracklist:")
for track_num, track_title in aewss["tracks"].items():
    print(track_num, "-", track_title)


random_track_number = random.choice(list(aewss["tracks"].keys()))
random_track = aewss["tracks"][random_track_number]


print(" ")

print("Here's a song recommendation:")
print(random_track_number, "-", random_track)


print(" ")
print("Here's the tracks in alphabetical order:")
sorted_tracks = sorted(aewss["tracks"].values(), key=lambda x: x.lower())
print(sorted_tracks)

print("")
print("Here's the tracks sorted by shortest to longest title length:")
shortest_tracks = sorted(aewss["tracks"].values(), key=lambda x: len(x))
print(shortest_tracks)
Printing the greatest album of all time:

Album Title: An Evening With Silk Sonic
Artist: Silk Sonic
Year: 2022
Genre: R&B, Soul

Tracklist:
1 - Silk Sonic Intro
2 - Starboy
3 - Just wanna Rock
4 - Waiting for Love
5 - Smokin Out The Window
6 - Infinity
7 - 777
8 - Dance Monkey
9 - Riptide
10 - life goes on
 
Here's a song recommendation:
9 - Riptide
 
Here's the tracks in alphabetical order:
['777', 'Dance Monkey', 'Infinity', 'Just wanna Rock', 'life goes on', 'Riptide', 'Silk Sonic Intro', 'Smokin Out The Window', 'Starboy', 'Waiting for Love']

Here's the tracks sorted by shortest to longest title length:
['777', 'Starboy', 'Riptide', 'Infinity', 'Dance Monkey', 'life goes on', 'Just wanna Rock', 'Silk Sonic Intro', 'Waiting for Love', 'Smokin Out The Window']
import random

def cricket():
    book = {
        '0': 0,
        '1': 1,
        '2': 2,
        '3': 3,
        '4': 4,
        '5': 5,
        '6': 6,
        '7': -1,
        '8': -2,
        '9': -3,
    }
    team_name = input("Enter the name of your team: ")
    print("Welcome to Aniket's Cricket Simulator, {}!".format(team_name))
    score = 0
    wickets = 10
    
    while wickets > 0:
        input("Press enter to face the next ball...")
        run = (random.randint(0, 9))
        if int(run) < 7:
            print("You scored", run, "runs") 
            score += run
            print("Your score is now {}.".format(score))
        else:
            print("Oh no, you got out! You have ", wickets, "wickets left!")
            wickets -= 1
    print("All out! Your final score is {} ({} wickets lost).".format(score, 10 - wickets))

cricket()
Welcome to Aniket's Cricket Simulator, Coding Super Kings!
Oh no, you got out! You have  10 wickets left!
Oh no, you got out! You have  9 wickets left!
You scored 5 runs
Your score is now 5.
You scored 0 runs
Your score is now 5.
You scored 2 runs
Your score is now 7.
You scored 4 runs
Your score is now 11.
Oh no, you got out! You have  8 wickets left!
Oh no, you got out! You have  7 wickets left!
You scored 1 runs
Your score is now 12.
Oh no, you got out! You have  6 wickets left!
Oh no, you got out! You have  5 wickets left!
Oh no, you got out! You have  4 wickets left!
You scored 3 runs
Your score is now 15.
You scored 3 runs
Your score is now 18.
Oh no, you got out! You have  3 wickets left!
Oh no, you got out! You have  2 wickets left!
Oh no, you got out! You have  1 wickets left!
All out! Your final score is 18 (10 wickets lost).

I got a 5/10 on the Kahoot. I need to look into it more and study this infomation because I did kinda well on the first 4 questions then got worse and worse so I need to study the lesson more and improve my knowledge