# Lesson 9: Programming

Warning

This lesson is under construction. Learn from it at your own risk. If you have any feedback, please fill out our General Feedback Survey.

## Overview

• Psuedo-Code exercise.
• Python Overview.
• Python practice exercise.

Programming is a big topic. ### Note: Pseudo-code

```function f(x):
# This line is a comment, not run by the computer.
# Comments are only for human eyes.
if x is less than than 5
print "x is less than 5"
else if x is less than than 10
print "x is greater than five and less than 10"
else
print "x is greater than 10"
```

### Variables & Constants

```>>> x = "value"
>>> print(x)
value
>>> x = "different value"
>>> print(x)
different value
```

### Data Types

Data types dictate how a piece of data should be handled within a program.
 Static Types are known at compile time and defined by the programmer. Dynamic Types may change based on how the program runs. Strongly Types are enforced and cannot change. Weakly Types are fluid and can be 'bent' based on needs.

### Data Types

Common types:
 Int 1, 5, 10000 Float 1.5, 3.14159 Char 'a', 'f', 'g' String "foo", "BAR" Array [1, 2, 3], ['a', 'b', 'c']

### Flow Control

Flow Control allows you to execute code only if certain conditions are met.
Conditionals: If / Else If / Else

Conditionals are used to tell the program when to execute commands.

In pseudocode, they usually look something like

```if some conditional statement is true
do something
else if some other conditional
do something else
else
do a final thing
```

### Flow Control

Loops: For / While / Do While

Loops are used to do multiple things, usually an indefinite number of things.

For instance:

```for every element, let's call it "foo", in a list "my_list"
if foo is greater than five
print(foo)
else
print(foo + " is too small")
```

While loops execute indefinitely (while something continues to be true).

For loops iterate over a list (array) of elements or to a specific number.

### Input & Output

```>>> user_input = get_input("Where would you like to go today? ")
>>> -> Where would you like to go today? Nebraska
>>> print(user_input)
>>> print(reverse(user_input))
>>> -> aksarben
```

### Functions

```function read_file(x):
# Also check that it exists! How convenient!
if file_exists(x)
return v
else
print("file does not exist")
return Null
```

### Structs

```struct dog {
breed: String
height: Float
color: String
age: Integer
}
```
```spot = struct dog      # Create a new variable of type `struct dog`
spot.breed = "corgie"  # Assign each member a variable.
spot.height = 1.5
spot.color = "Blond"
spot.age = 1
print(spot.breed, spot.height, spot.color, spot.age)
```

### Objects

```class chair():
function init(material):
self.material = material

function rock():
print("The ", self.material, " chair rocks slowly.")
```
```>>> my_chair = chair.init("plastic")
>>> my_chair.rock()
>>> -> The plastic chair rocks slowly.
```

### Libraries

```import math_lib

print(math_lib.pi, math_lib.pow(2, 5), math_lib.tan(79.3))
# prints out "3.14 32 .951"
```

## TODO: Write Pseudo-Code

Write pseudo-code to do the following tasks:
• Count to 20 (hint: for loop).
• Get user input and print it.
• Generate prime numbers.
Hints:
• Break the problem down to the simplest steps.
• Don't worry about the details.
• This is pseudo-code! Get creative.

## Python

```\$ sudo <apt or yum> install python
``` ### Python Datatypes

• You don't need to declare the type of your variables, Python will assume the type of your variable and type it for you.
• Python is a duckly-typed language. If it walks like a duck and quacks like a duck, then Python treats it like a duck. As long as an object implements the proper interfaces, it can act like any type it wants. ### Python Datatypes

 Type Example boolean True integer 7 long 18,446,744,073,709,551,615 float 12.4 string "Hello World!" list ['first', 'second'] dict (map) {'key1': 'value', 'key2', 'value2'} tuple ('value','paired value') object anObjects.variable == None

### Python Variables

```# This is a comment
boolean = True # boolean
name = "Lucy" # string
age = 20 # integer
pi = 3.14159 # float
alphabet = ['a', 'b', 'c']
dictionary = {"pi":3.14159, "sqrt 1":1}
winter = ('December', 'January', 'February', 'March')

print(name + " is " + str(age+1) + " this " winter)
```

### REPL: Try it out

Open a REPL (Read Evaluate Print Loop):

```\$ python
>>> print("I'm in a REPL!")
>>> name =      # <Your name>
>>> age =       # <Your age>
>>> print(name + " is " + str(age))
>>> # We need to convert age from int to string so it can print!
```

### Python Control Flow

```if name == "Lucy":
for month in winter:
print name + " doesn't like " + month
else:
print "My name isn't Lucy!"
```

### Python Functions

```def myfunction(arg1, arg2):
return arg1 + arg2

print myfunction(1, 5)
```

### Python Libraries

There are a few ways to use other code in your code:

```from math import pi
x = pi
```
```from math import *
x = pi
```

### Python Libraries

There are hundreds of Python libraries. If you're trying to do something and think "This has probably been solved...", Google it!

Some libraries to know:

### Python (Virtual) Environments

```\$ sudo apt-get install python-virtualenv
\$ sudo yum install

# In each project you work on, you'll want to run
\$ virtualenv venv
\$ source venv/bin/activate
(venv)\$ pip install <package>
(venv)\$ deactivate
```

## TODO: Practicing Python

Formalize the last TODO by writing them in Python.

Prove the program works by running the code!