← Teacher guide

Data detective: cheat sheet

Data detective · In any playground, open Reference to copy these.

Reading data

running total

Start the total at 0 once, then add to it on every pass.

total = 0
while total < 10:
    total += int(input("Add: "))

variable

Give a value a name, so you can reuse and change it.

size = 50
Example
length = 120
forward(length)
left(90)
forward(length / 2)
What it draws
length = 120, then half of it

for each item

Work through a list, one item at a time.

for c in colours:
    pass
Example
pensize(6)
for c in ["red", "blue", "green"]:
    pencolor(c)
    forward(40)
What it draws
One line per colour in the list

print

Show text or a value in the output box.

print("Hello")

dictionary

Values stored under names (keys). One dictionary can hold everything about one thing.

star = {"speed": 5, "points": 1}

in

True if the item is in the list (or the key is in the dictionary, or the letters are in the text).

if item in bag:
    pass

read a CSV

Each row of the file becomes a dictionary, keyed by the column names in the first line. Every value is text.

import csv

with open("music.csv") as f:
    rows = list(csv.DictReader(f))

if / else

Do one thing or the other, depending on a condition.

if x > 0:
    pass
else:
    pass
Example
for x in [-90, -30, 30, 90]:
    penup()
    goto(x, 0)
    if x > 0:
        dot(30, "red")
    else:
        dot(30, "blue")
hideturtle()
What it draws
Red when x > 0, else blue

grow value

Change a value every pass: read the old one, store a new one.

size = 5
for i in range(20):
    forward(size)
    right(90)
    size = size + 5
Example
size = 5
for i in range(30):
    forward(size)
    right(90)
    size = size + 5
What it draws
The same spiral, grown by an update

join text

Join pieces of text into one with +. Spaces only appear where they are inside the quotes.

"Hello, " + name

dictionary value

The value stored under that key. The key goes in quotes. Assign to it to change it: star["speed"] = 8.

star["speed"]

read a file

Opens the file to read and gives you all of it as one piece of text.

with open("save.txt") as f:
    text = f.read()

Charts and checking

list

Keep many values in order under one name. The first item is place 0.

colours = ["red", "blue", "green"]

str

Turn a number into text, so it can be joined: "Score: " + str(score).

str(score)

strip and lower

strip() removes spaces at the ends; lower() and upper() change the capitals. Each gives back new text.

command = command.strip().lower()

try and except

Run lines that might fail. If the named error happens, the except lines run instead of the program stopping.

try:
    n = int(text)
except ValueError:
    print("That is not a number.")

a text bar

"#" * 5 is #####. ljust pads the label to the same width, so the bars line up.

print(label.ljust(12) + "#" * n)

def (function)

Name a group of steps, then run it by calling its name.

def shape():
    pass

shape()
Example
def zigzag():
    left(45)
    forward(30)
    right(90)
    forward(30)
    left(45)

zigzag()
zigzag()
zigzag()
What it draws
Defined once, called three times

count with a dictionary

One count for each different value: add 1 if the key is there already, or start it at 1.

counts = {}
for row in rows:
    key = row["genre"]
    if key in counts:
        counts[key] = counts[key] + 1
    else:
        counts[key] = 1

test with assert

A test case: nothing happens if it is true; the program stops with AssertionError if it is not.

assert clean_hours("5") == 5

Dashboards and live data

square (loop)

Draw a square by repeating forward and right four times.

for i in range(4):
    forward(100)
    right(90)
What it draws

every other

i % 2 == 0 is true on every second pass.

for i in range(8):
    if i % 2 == 0:
        pass
    else:
        pass
Example
for i in range(8):
    if i % 2 == 0:
        pencolor("red")
    else:
        pencolor("blue")
    pensize(6)
    forward(30)
    right(45)
What it draws
Red and blue sides, taking turns

read a CSV with pandas

Reads the whole file into a table (a DataFrame). Numbers stay numbers.

import pandas as pd

songs = pd.read_csv("music.csv")

an app with Gradio

Gradio calls your function with what was chosen, and shows what it returns.

import gradio as gr

def answer(choice):
    return "You chose " + choice

gr.Interface(fn=answer, inputs=gr.Dropdown(["pop", "rock"]), outputs="text").launch()

for loop

Repeat the indented lines this many times.

for i in range(4):
    pass
Example
for i in range(5):
    forward(15)
    penup()
    forward(10)
    pendown()
What it draws
range(5): five dashes

counter step

Use the counter i to make each pass different.

for i in range(20):
    forward(i * 5)
    right(90)
Example
for i in range(30):
    forward(i * 5)
    right(90)
What it draws
A square spiral: each line longer than the last

load with json

Reads JSON text back into the dictionary or list that was saved.

import json

with open("game.json") as f:
    game = json.load(f)

filter a table

Keeps the rows where the test is true, as a smaller table.

rows = songs[songs["genre"] == genre]

ask an API

Asks an API at that address (params become the ?query string) and turns the JSON reply into dictionaries and lists. Plan for no connection.

import requests

try:
    reply = requests.get("https://api.open-meteo.com/v1/forecast", params={"latitude": -35.28, "longitude": 149.13, "daily": "temperature_2m_max"}, timeout=10).json()
except requests.RequestException:
    print("No connection")