# AUTOMATE THE BORING STUFF WITH PYTHON
## Chapter 1
First **Install Python and open IDLE** which opens the interactive shell.
Type in ``` 2+2 ```. This is an *expression*.
**Expressions** can consist of *values* (2) and *operators* (+).
Python has many **operators** such as ```**, %, /, *, -. +```
### Data Types
Python can work with many data types such as **integers**, **floats** and **strings**.
**Integers** are basic whole numbers such as *-2, 0, 3, 5*.
**Floats** are numbers with a decimal point such as *-1.25, -1.0, 0.5, 1.25*.
**Strings** are characters. Surround your strings with single quotes ('). ``` 'Hello savs' ```
You can *concatenate* strings by using the **+** operator.
``` 'Stephen' + 'Mitchell' ``` would return ``` StephenMitchell ```
You **can't** concatenate a string with an integer. ``` 'Alex' + 42 ``` will display an error message.
### Variables
You can store variables with an *assignment*.
**Assignment statements** consist of the variable name ```pizza```, an equal sign ```=```, and the value to be stored ```50```.
Once a value is stored, the variable is *initialized*.
```Pizza = 50``` assigns an integer to the Pizza variable name. ```Banana = 'Good'``` assigns a string to the Banana variable name.
```Dough = 50```.
```Pizza + Dough``` returns ```100```. This is how you can add two variables integer values.
#### Variable Rules
1. **Can** be only one word
2. **Can** only be letters, numbers and underscore character.
3. **Can't** begin with number.
4. They are case sensitive. ```Pizza``` and ```PIZZA``` are two different variables.
5. Camelcase is a good naming convention for variable names. ```pizzaScore```. ```bananaJamValue```.
#### Comments
Python will ignore comments and you can use write notes on a specific block/line of code or plan out how you want your code to run.
You can use the hash mark (#) to make a comment. ```# This Pizza value will be used for the recipe function```
#### Print Function
The **print()** function displays the string value inside the paretheses.
```print('What is your favourite topping?`)```
#### Input Function
The **input()** function waits for user input.
You can use a variable to store input from the user.
```mySaucePreference = input()```
You can then print this input that was provided by the user.
```print('Your sauce preference is` + mySaucePreference)```
#### Len Function
You can pass the **len()** function a string value which evaluate the number of characters in the string to an integer value.
```len('hello')``` would return ```5```.
#### str(), int(), and float() Functions
**Str()** can be passed with an integer and evaluate a string value.
```str(29)``` would result in the integer to return a string.
You can use this in print statements where you want to add a string to an integer.
```print('Hello I am' + str(29) + 'years old.')```. This would print **Hello I am 29 years old**.
int() and float() can take on an string value and evaluate it to a integer or float value.
#
## Chapter 2
### Booleans
**Booleans** are data types that have two values: *True* and *False*.
*True* and *False* are **case sensitive**.
```Pizza = True```. Booleans used in expressions and can be stored in variables.
### Comparison Operators
**Comparison operators** compare two values and evaluate to a **Boolean** value.
``` ==, !=, <, >, <=, >= ``` Are all comparison operators.
```42 == 42``` would return True. ```42 == 43``` would return False.
Remember that **=** is an assignment operator and **==** is an equal to operator.
### Blocks of Code
Lines of Python code can be grouped in *blocks*. The indentation indicates where block begins and ends.
```
if name == 'Mary':
print('Hello Mary')
if password == 'swordfish':
print('Access granted.')
else:
print('Wrong password.')
```
The line indentation dictates the flow of the statements and how they will execute.
### if Statements
The if keyword will execute if the statement's condition is True. It is skipped if it is False.
```
if name == 'Pizza Man`:
print('Hi, Pizza Man.')
```
This statement will only execute if the name variable contains a string value 'Pizza Man'.
### else Statements
The else statement is used as alternative control for conditional statements. The *if* statement will run the *else* statement when the *if* evaluates false.
```
if name == 'Pizza Man`:
print('Hi, Pizza Man.')
else:
print('Hello, stranger.')
```
This will run the *else* statement if the *name* variable does not have a string value of *Pizza Man*.
### elif Statements
elif statement is used when you have a situation where you want one of many possible clauses to execute.
```
if name == 'Pizza Man`:
print('Hi, Pizza Man.')
elif name == 'Pizza God':
print('Hello, Pizza God.')
```
This statement will check if the variable string value of name is either **Pizza Man** or **Pizza God**.
### while Loop Statements
You can make a block of code execute over and over again until the condition of the while loop is False.
```
spam = 0
while spam < 5:
print('Hello, world.')
spam = spam + 1
```
This will run the **while** loop until the spam variable reaches a value of 6.
### break & continue tatements
#### Break
A **break** statement can be used in a while loop to break the loop regardless of the condition of the loop.
```
while True:
print('Please type your name.')
name = input()
if name == 'your name':
break
print('Thank you!')
```
This block of code will continuously loop until the name is entered as 'your name'. Once this is entered, the loop will *break*.
#### Continue
**continue** statements are used inside loops, when a program hits the continue statement it will jump to the start of the loop.
```
while True:
print('Please type your name.')
name = input()
if name == 'Keith':
continue
else:
print('Thank you for not being Keith')
break
```
This statement will keep running until the name entered is **NOT** Keith.
### for Loops & range() function
If you want to execute a block of code only a certain amount of times you can use a *for* loop.
You use the **range()** function to indicate the amount of times the loop should run.
```
print('My name is')
for i in range(5):
print('Pizza loop (' + str(i) + ')')
```
This will return
```
Pizza loop (0)
Pizza loop (1)
Pizza loop (2)
Pizza loop (3)
Pizza loop (4)
```
### Importing Modules
Python includes a library of grouped functions called **modules**.
To include a module in your code, use the **import** function followed by the name of the module.
```
import random
for i in range(5):
print(random.randint(1, 10))
```
The above code imports the random module and utilizes the randint() function.
The program will output random numbers for 1-10.
### sys.exit()
If you would like to terminate a program wherever you desire, you can use the sys.exit() function.
This function can only be called if the sys module is imported.
```
import sys
if name == 'pp pupu man':
sys.exit()
```