# Lec 01 Course Introduction

## Reading / Participation

- Read Chapter 1 Introduction to Programming in CICS 110 - Foundations of Programming on zyBooks (note, you will first need to purchase the book)
- Complete Participation 1 in zyBooks

## Slides

- Section 2, 3, 4, 5
- Section 1, 6

## Additional Resources

- Learn Python with Socratica (Socratica)
- Hello World in Python (Socratica)

## Exploring Code Activity

### Guess the Number

Try to guess the hidden number. The number changes every minute.

Guess_the_number

`from datetime import datetime`

now = datetime.now()

cur_time = now.strftime("%I:%M %p")

num = ((now.hour * 60 + now.minute)*17 + 27) % 100

print("Try to guess the number between 0 and 100")

print("The number changes every minute")

print(f"This is the number for: {cur_time}")

guess = int(input("Enter a number: "))

if guess == num:

print("You guessed it!")

elif guess > num:

print("Too high")

else:

print("Too low")

### Spirograph

This piece of code generates a Spirograph. a spirograph is a drawing that is formed by placing a pen in a gear, and then rolling that gear around inside a larger gear. The pen traces out a curve that is the shape of the gear teeth.

Spirograph

`from turtle import *`

from math import pi, sin, cos, lcm

R = 100 # Radius of the outer (larger) gear

r = 60 # Radius of the inner (smaller) gear

d = 100

steps = 100 # Number of steps to take (increase for more detail)

d_theta = (1 / steps) * 2 * pi * lcm(R, r) / R

theta = 0

hideturtle()

color("blue")

penup()

goto(R - r + d, 0)

pendown()

for i in range(steps):

theta += d_theta

x = (R - r) * cos(theta) + d * cos(theta * (R - r) / r)

y = (R - r) * sin(theta) - d * sin(theta * (R - r) / r)

goto(x, y)

### Cafe Wall Illusion

The Cafe Wall illusion has lines that look like they are slanted, but they are actually straight. Take a look!

Cafe_Wall_Illusion

`from turtle import *`

from math import sin

def move(x,y):

penup()

goto(x,y)

setheading(0)

pendown()

def fill_rect(width, height, color):

fillcolor(color)

for fun in [begin_fill, end_fill]:

fun()

for dist in 2 * [width,height]:

forward(dist)

left(90)

def fill_row(x, y, width, height, offset, rects):

move(x,y)

forward(width - offset)

fill_rect(width, height, "black")

for _ in range(rects-1):

forward(2 * width)

fill_rect(width, height, "black")

forward(width + offset)

hideturtle()

speed(11)

color("grey")

pensize(1)

xmin = -250

xmax = 250

ymin = -250

ymax = 250

rows = 25

cols = 10

move(xmin,ymin)

fill_rect(xmax-xmin,ymax-ymin,"white")

for i in range(rows):

dx = (xmax-xmin) / (2*cols)

dy = (ymax-ymin) / rows

y0 = ymin + i * dy

offset = dx / 2 + (dx / 5) * sin((10 / cols) * i)

fill_row(xmin, y0, dx, dy, offset, cols)

done()

### Koch Snowflake

The Koch Snowflake is a fractal that is formed by starting with an equilateral triangle, and then repeatedly replacing the middle of each side with a smaller equilateral triangle. Try playing with the length and depth!

Koch_Snowflake

`from turtle import *`

from math import sin

def koch_forward(distance, depth):

if depth == 0:

forward(distance)

else:

koch_forward(distance/3, depth-1)

right(60)

koch_forward(distance/3, depth-1)

left(120)

koch_forward(distance/3, depth-1)

right(60)

koch_forward(distance/3, depth-1)

# Play with these!

length = 250 # Length of a side

depth = 4 # Level of recursion

hideturtle()

speed(8)

color('blue', 'white')

penup()

goto(- length / 2, - 3**(1/2) * length / 6)

pendown()

begin_fill()

for _ in range(3):

koch_forward(length, depth)

left(120)

end_fill()

done()