2D Programming and Resources

There are lots of applications for 2D data. Common terms in 2D are tabular data, row/columns, matrix, etc. Nested iterative loops are often used to find or discover each cell in a 2D array.

Python 2D array

Example of pre-populating 2D array and printing using 3 different styles

  • Candy Challenge:print a christmas tree and trunck
"""
* Creator: Nighthawk Coding Society
2D arrays
"""

# Classic nested loops using ij indexes, this shows 2 dimensions
def print_matrix1(matrix):
    print("Classic nested loops using ij indexes")
    for i in range(len(matrix)):  # outer loop (i), built on length of matrix (rows)
        for j in range(len(matrix[i])):  # inner loop (j), built on length of items (columns)
            print(matrix[i][j], end=" ")  # [i][j] is 2D representation, end changes newline to space
        print()


# Enhanced nested for loops, row and col variables
def print_matrix2(matrix):
    print("Enhanced nested for loops")
    for row in matrix:  # short hand row iterator, index is not required
        for col in row:  # short hand column iterator
            print(col, end=" ")
        print()


# For loop with shortcut (*) row expansion
def print_matrix3(matrix):
    print("For loop with shortcut (*) row expansion")
    for row in matrix:
        print(*row)  # pythons has (*) that is one line expansion of row into columns


def test_matrices():
    # setup some text matrices
    keypad = [[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9],
              [" ", 0, " "]]

    keyboard = [["`", 1, " ", 2, " ",3, " ",  4, " ", 5, " ", 6, " ", 7, " ", 8, " ", 9, " ", 0, " ", "-"," ", "="],
                [" ", " ", "Q", " ", "W", " ", "E", " ", "R", " ", "T", " ", "Y", " ", "U", " ", "I", " ", " ", "O", " ", "P", " ", "[", " ", "]", " ", "\\"],
                [" ", " ", " ", "A", " ", "S", " ", "D", " ", "F", " ", "G", " ", "H", " ", "J", " ", "K", " ", "L", " ", ";", " ", "'"],
                [" ", " ", " ", " ", "Z", " ", "X", " ", "C", " ", "V", " ", "B", " ", "N", " ", "M", " ", ",", " ", ".", " ", "/"]]

    numbers = [
            [0, 1], # binary
            [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], # decimal
            [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F"] # hexadecimal
            ]
    

    # pack into a list of matrices with titles
    matrices = [
        ["Keypad", keypad], 
        ["Keyboard", keyboard], 
        ["Number Systems", numbers]
    ]

    # loop 2D matrix with returning list in [key, value] arrangement
    for title, matrix in matrices:  # unpack title and matrix as variables
        
        # formatted message with concatenation
        print(title, len(matrix), "x", "~" + str(len(matrix[0])))  
        
        # use three different methods
        print_matrix1(matrix)
        print_matrix2(matrix)
        print_matrix3(matrix)
        # blank link in between
        print()


# tester section
if __name__ == "__main__":
    test_matrices()
Keypad 4 x ~3
Classic nested loops using ij indexes
1 2 3 
4 5 6 
7 8 9 
  0   
Enhanced nested for loops
1 2 3 
4 5 6 
7 8 9 
  0   
For loop with shortcut (*) row expansion
1 2 3
4 5 6
7 8 9
  0  

Keyboard 4 x ~24
Classic nested loops using ij indexes
` 1   2   3   4   5   6   7   8   9   0   -   = 
    Q   W   E   R   T   Y   U   I     O   P   [   ]   \ 
      A   S   D   F   G   H   J   K   L   ;   ' 
        Z   X   C   V   B   N   M   ,   .   / 
Enhanced nested for loops
` 1   2   3   4   5   6   7   8   9   0   -   = 
    Q   W   E   R   T   Y   U   I     O   P   [   ]   \ 
      A   S   D   F   G   H   J   K   L   ;   ' 
        Z   X   C   V   B   N   M   ,   .   / 
For loop with shortcut (*) row expansion
` 1   2   3   4   5   6   7   8   9   0   -   =
    Q   W   E   R   T   Y   U   I     O   P   [   ]   \
      A   S   D   F   G   H   J   K   L   ;   '
        Z   X   C   V   B   N   M   ,   .   /

Number Systems 3 x ~2
Classic nested loops using ij indexes
0 1 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 A B C D E F 
Enhanced nested for loops
0 1 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 A B C D E F 
For loop with shortcut (*) row expansion
0 1
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 A B C D E F

print("CANDY CHALLANGE")

tree = [
        [" ", " ", " ", "^", " ", " ", " "],
        [" ", " ", "/", " ", "\\", " ", " "],
        [" ", " ", "-", " ", "-", " ", " "],
        [" ", "/", " ", " ", " ", " ", "\\", " "],
        [" ", "-", "-", "-", "-", "-", "-", " "],
        [" ", " ", " ", "|||", " ", " ", " ", " "]
    ]

print("tree", len(tree), "x", "~" + str(len(tree[0])))

def print_matrix1(matrix):
    print("Classic nested loops using ij indexes")
    for i in range(len(matrix)):  # outer loop (i), built on length of matrix (rows)
        for j in range(len(matrix[i])):  # inner loop (j), built on length of items (columns)
            print(matrix[i][j], end=" ")  # [i][j] is 2D representation, end changes newline to space
        print()
        
print_matrix1(tree)
CANDY CHALLANGE
tree 6 x ~7
Classic nested loops using ij indexes
      ^       
    /   \     
    -   -     
  /         \   
  - - - - - -   
      |||         

JavaScript 2D array

Populate a 2D array. Key concepts are ij loop and assignments

  • Candy challenge:Create one of the Python examples above.
%%js

/*
* Creator: Nighthawk Coding Society
Construct a two-dimensional array in JS
*/

var arr2D = [];
var rows = 3;
var cols = 4;

var keyboard = [["`", 1, " ", 2, " ",3, " ",  4, " ", 5, " ", 6, " ", 7, " ", 8, " ", 9, " ", 0, " ", "-"," ", "="],
                [" ", " ", "Q", " ", "W", " ", "E", " ", "R", " ", "T", " ", "Y", " ", "U", " ", "I", " ", " ", "O", " ", "P", " ", "[", " ", "]", " ", "\\"],
                [" ", " ", " ", "A", " ", "S", " ", "D", " ", "F", " ", "G", " ", "H", " ", "J", " ", "K", " ", "L", " ", ";", " ", "'"],
                [" ", " ", " ", " ", "Z", " ", "X", " ", "C", " ", "V", " ", "B", " ", "N", " ", "M", " ", ",", " ", ".", " ", "/"]]

 
// Loop to initialize 2D array elements
for (var i = 0; i < rows; i++) {
    arr2D[i]=[];
    for (var j = 0; j < cols; j++) {
        arr2D[i][j] = "r:" + i + "c:" + j;
    }
}
console.log(keyboard);
element.append(arr2D);

Monkey Jumpers Poem

Here are some of the key parts of these arrays

  • Build ASCII monkeys, 5 different monkeys using ASCII Art for the "Monkey Jumpers" countdown poem
  • ANSII Color codes are added to each Monkey
  • Candy Challenge:Print monkeys horizontally versus vertically.
"""
 * Creator: Nighthawk Coding Society
 * Mini Lab Name: Hello Series, featuring Monkey Jumpers Poem
"""

import time # used for delay
from IPython.display import clear_output  # jupyter specific clear

def main():    
    # ANSI Color Codes
    Red = "\u001b[31m"
    Green = "\u001b[32m"
    Yellow = "\u001b[33m"
    Blue = "\u001b[34m"
    Magenta = "\u001b[35m"

    """ 2D array data assignment """
    monkeys = [
        [
            Red,
            "ʕง ͠° ͟ل͜ ͡°)ʔ ",  # [0][0] eyes
            "  \\_⏄_/  ",  # [0][1] chin
            "  --0--   ",  # [0][2] body
            "  ⎛   ⎞   "  # [0][3] legs
        ],
        [
            Green,
            " ʕ༼ ◕_◕ ༽ʔ ",  # [1][0]
            "  \\_⎏_/  ",
            "  ++1++  ",
            "   ⌋ ⌊   "
        ],
        [
            Yellow,
            " ʕ(▀ ⍡ ▀)ʔ",  # [2][0]
            "  \\_⎐_/ ",
            "  <-2->  ",
            "  〈  〉 "
        ],
        [
            Blue,
            "ʕ ͡° ͜ʖ ° ͡ʔ",  # [3][0]
            "  \\_⍾_/  ",
            "  ==3==  ",
            "  _/ \\_  "
        ],
        [
            Magenta,
            "  (◕‿◕✿) ",  # [4][0]
            "  \\_⍾_/ ",  # [4][1]
            "  ==4==  ",  # [4][2]
            "  _/ \\_ "  # [4][3]
        ]
    ]

    """ 2D array program logic """
    # cycles through 2D array backwards
    for i in range(len(monkeys), -1, -1):
        line = []
        clear_output(wait=True)
        
        print("Nursery Rhyme")  # identification message

        # this print statement shows current count of Monkeys
        # concatenation (+) of the loop variable and string to form a countdown message
        print(str(i) + " little monkeys jumping on the bed...")

        # cycle through monkeys that are left in poem countdown
        for row in range(i - 1, -1, -1):  # cycles through remaining monkeys in countdown

            # cycles through monkey part by part
            for col in range(len(monkeys[row])):
                try:
                    line[col] += ((monkeys[row][col] + "     "))
                except:
                    line.append((monkeys[row][col] + "     "))
                
        for i in range(len(line)):
            print(line[i])
        
        if i == 0:
            # out of all the loops, prints finishing messages
            clear_output(wait=True)
            print("No more monkeys jumping on the bed")
            print("000000000000000000000000000000000000000000000000000000")
            print("                           THE END                            ")

        time.sleep(2)

            # this new line gives separation between stanza of poem
        print("\u001b[0m")  # reset color
            


if __name__ == "__main__":
    main()
Nursery Rhyme
4 little monkeys jumping on the bed...
                    
ʕ ͡° ͜ʖ ° ͡ʔ      ʕ(▀ ⍡ ▀)ʔ      ʕ༼ ◕_◕ ༽ʔ      ʕง ͠° ͟ل͜ ͡°)ʔ      
  \_⍾_/         \_⎐_/        \_⎏_/         \_⏄_/       
  ==3==         <-2->         ++1++         --0--        
  _/ \_         〈  〉         ⌋ ⌊          ⎛   ⎞        
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb Cell 9 in <cell line: 95>()
     <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X10sZmlsZQ%3D%3D?line=90'>91</a>         print("\u001b[0m")  # reset color
     <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X10sZmlsZQ%3D%3D?line=94'>95</a> if __name__ == "__main__":
---> <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X10sZmlsZQ%3D%3D?line=95'>96</a>     main()

/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb Cell 9 in main()
     <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X10sZmlsZQ%3D%3D?line=84'>85</a>     print("000000000000000000000000000000000000000000000000000000")
     <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X10sZmlsZQ%3D%3D?line=85'>86</a>     print("                           THE END                            ")
---> <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X10sZmlsZQ%3D%3D?line=87'>88</a> time.sleep(2)
     <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X10sZmlsZQ%3D%3D?line=89'>90</a>     # this new line gives separation between stanza of poem
     <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X10sZmlsZQ%3D%3D?line=90'>91</a> print("\u001b[0m")

KeyboardInterrupt: 

Animation, the Energetic versus Lazy Programmer methods

Animation is done like the old Disney films, lots of little images put togehter. In these examples we eliminate using a 2D array, but simulate int with a sequence of print statements.

  • This 1st sequence is a lot of lines of code.
  • The 2nd takes the lazy programmer method to do the same.
  • Candy challenge:Make you own ASCII art animation.
"""
* Creator: Nighthawk Coding Society
Sailing Ship Animation (long method)
"""

import time # used for delay
from IPython.display import clear_output  # jupyter specific clear

# ANSI Color Codes
Color34 = "\u001b[34m"
Color37 = "\u001b[37m"


# As you can see, its not very optimal 
def ship1():
    print("    |\ ")
    print("    |/ ")
    print("\__ |__/ ")
    print(" \____/ ")
    print("\u001b[34m -------------------------------------------- \u001b[37m")


def ship2():
    print("      |\ ")
    print("      |/ ")
    print("  \__ |__/ ")
    print("   \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship3():
    print("        |\ ")
    print("        |/ ")
    print("    \__ |__/ ")
    print("     \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship4():
    print("          |\ ")
    print("          |/ ")
    print("      \__ |__/ ")
    print("       \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship5():
    print("            |\ ")
    print("            |/ ")
    print("        \__ |__/ ")
    print("         \____/ ")
    print("\u001b[34m -------------------------------------------- \u001b[37m")


def ship6():
    print("              |\ ")
    print("              |/ ")
    print("          \__ |__/ ")
    print("           \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship7():
    print("                |\ ")
    print("                |/ ")
    print("            \__ |__/ ")
    print("             \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship8():
    print("                  |\ ")
    print("                  |/ ")
    print("              \__ |__/ ")
    print("               \____/ ")
    print("\u001b[34m -------------------------------------------- \u001b[37m")


def ship9():
    print("                    |\ ")
    print("                    |/ ")
    print("                \__ |__/ ")
    print("                 \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship10():
    print("                      |\ ")
    print("                      |/ ")
    print("                  \__ |__/ ")
    print("                   \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship11():
    print("                        |\ ")
    print("                        |/ ")
    print("                    \__ |__/ ")
    print("                     \____/ ")
    print("\u001b[34m -------------------------------------------- \u001b[37m")


def ship12():
    print("                          |\ ")
    print("                          |/ ")
    print("                      \__ |__/ ")
    print("                       \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship13():
    print("                            |\ ")
    print("                            |/ ")
    print("                        \__ |__/ ")
    print("                         \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship14():
    print("                              |\ ")
    print("                              |/ ")
    print("                          \__ |__/ ")
    print("                           \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship15():
    print("                                |\ ")
    print("                                |/ ")
    print("                            \__ |__/ ")
    print("                             \____/ ")
    print("\u001b[34m -------------------------------------------- \u001b[37m")


def ship16():
    print("                                  |\ ")
    print("                                  |/ ")
    print("                              \__ |__/ ")
    print("                               \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship17():
    print("                                    |\ ")
    print("                                    |/ ")
    print("                                \__ |__/ ")
    print("                                 \____/ ")
    print("\u001b[34m -------------------------------------------- \u001b[37m")


def ship18():
    print("                                      |\ ")
    print("                                      |/ ")
    print("                                  \__ |__/ ")
    print("                                   \____/ ")
    print("\u001b[34m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \u001b[37m")


def ship19():
    print("                                        |\ ")
    print("                                        |/ ")
    print("                                    \__ |__/ ")
    print("                                     \____/ ")
    print("\u001b[34m -------------------------------------------- \u001b[37m")


def ship20():
    print("                                          |\ ")
    print("                                          |/ ")
    print("                                      \__ |__/ ")
    print("                                       \____/ ")
    print("\u001b[34m -------------------------------------------- \u001b[37m")


clear_output(wait=True)
time.sleep(.1)
ship1()
time.sleep(.5)
clear_output(wait=True)
ship2()
time.sleep(.5)
clear_output(wait=True)
ship3()
time.sleep(.5)
clear_output(wait=True)
ship4()
time.sleep(.5)
clear_output(wait=True)
ship5()
time.sleep(.5)
clear_output(wait=True)
ship6()
time.sleep(.5)
clear_output(wait=True)
ship7()
time.sleep(.5)
clear_output(wait=True)
ship8()
time.sleep(.5)
clear_output(wait=True)
ship9()
time.sleep(.5)
clear_output(wait=True)
ship10()
time.sleep(.5)
clear_output(wait=True)
ship11()
time.sleep(.5)
clear_output(wait=True)
ship12()
time.sleep(.5)
clear_output(wait=True)
ship13()
time.sleep(.5)
clear_output(wait=True)
ship14()
time.sleep(.5)
clear_output(wait=True)
ship15()
time.sleep(.5)
clear_output(wait=True)
ship16()
time.sleep(.5)
clear_output(wait=True)
ship17()
time.sleep(.5)
clear_output(wait=True)
ship18()
time.sleep(.5)
clear_output(wait=True)
ship19()
time.sleep(.5)
clear_output(wait=True)
ship20()
time.sleep(.5)
                                          |\ 
                                          |/ 
                                      \__ |__/ 
                                       \____/ 
 -------------------------------------------- 
"""
* Creator: Nighthawk Coding Society
Sailing Ship Animation (programatic method)
"""

import time # used for delay
from IPython.display import clear_output  # jupyter specific clear


# ANSI Color Codes
OCEAN_COLOR = u"\u001B[34m\u001B[2D"
SHIP_COLOR = u"\u001B[35m\u001B[2D"
RESET_COLOR = u"\u001B[0m\u001B[2D"

def ship_print(position):  # print ship with colors and leading spaces according to position
    clear_output(wait=True)
    print(RESET_COLOR)
    
    sp = " " * position
    print(sp + "    |\   ")
    print(sp + "    |/   ")
    print(SHIP_COLOR, end="")
    print(sp + "\__ |__/ ")
    print(sp + " \____/  ")
    print(OCEAN_COLOR + "--"*32 + RESET_COLOR)


def ship():  # ship function, loop/controller for animation speed and times
    # loop control variables
    start = 0  # start at zero
    distance = 60  # how many times to repeat
    step = 2  # count by 2

    # loop purpose is to animate ship sailing
    for position in range(start, distance, step):
        ship_print(position)  # call to function with parameter
        time.sleep(.2)

        
ship() # activate/call ship function
                                                              |\   
                                                              |/   
                                                          \__ |__/ 
                                                           \____/  
----------------------------------------------------------------
import time 
from IPython.display import clear_output  


# ANSI Color Codes
RESET_COLOR = u"\u001B[0m\u001B[2D"

def helicopter_print(position):  # print ship with colors and leading spaces according to position
    clear_output(wait=True)
    print(RESET_COLOR)
    
    sp = " " * position
    print(sp + "  ______.........--=T=--.........______")
    print(sp + "     .             |:|                 ")
    print(sp + ":-. //           /-------.             ")
    print(sp + "': |-._____..----(------()`---.__      ")
    print(sp + " /:   _..__   ''  -:----'[] |""`\\     ")
    print(sp + " ': :'     `-.     _:._     '------ :  ")
    print(sp + "  ::          '--=:____:.___....--     ")
    print(sp + "                    O'       O' grp    ")


def helicopter():  # ship function, loop/controller for animation speed and times
    # loop control variables
    start = 0  # start at zero
    distance = 60  # how many times to repeat
    step = 2  # count by 2

    # loop purpose is to animate ship sailing
    for position in range(start, distance, step):
        helicopter_print(position)  # call to function with parameter
        time.sleep(.2)

        
helicopter() # activate/call ship function
                                              ______.........--=T=--.........______
                                                 .             |:|                 
                                            :-. //           /-------.             
                                            ': |-._____..----(------()`---.__      
                                             /:   _..__   ''  -:----'[] |`\     
                                             ': :'     `-.     _:._     '------ :  
                                              ::          '--=:____:.___....--     
                                                                O'       O' grp    
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb Cell 13 in <cell line: 35>()
     <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X14sZmlsZQ%3D%3D?line=30'>31</a>         helicopter_print(position)  # call to function with parameter
     <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X14sZmlsZQ%3D%3D?line=31'>32</a>         time.sleep(.2)
---> <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X14sZmlsZQ%3D%3D?line=34'>35</a> helicopter()

/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb Cell 13 in helicopter()
     <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X14sZmlsZQ%3D%3D?line=29'>30</a> for position in range(start, distance, step):
     <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X14sZmlsZQ%3D%3D?line=30'>31</a>     helicopter_print(position)  # call to function with parameter
---> <a href='vscode-notebook-cell:/Users/ekamjotkaire/csp/fast-pages/_notebooks/2023-05-16-DS-arrays_lab.ipynb#X14sZmlsZQ%3D%3D?line=31'>32</a>     time.sleep(.2)

KeyboardInterrupt: