# MLE - Week 1
Summary
-------
- Syntax, variables, data types, input, output
- Conditionals
- Collections: List
- Loop
Syntax
------
- Unlike Java, Python doesn't have the `;` `{}` :blush:
- Indentation needs to be strictly followed:exclamation: This makes the code, by default, formatted.
- Comments:
```python=
# This is a comment in Python
"""
This is a "block comment" in Python.
"""
```
- Data types are determined at run time :worried:
- [Built-in functions](https://docs.python.org/3/library/functions.html)
Variables
---------
>:point_right: A good variable name describes the data it contains.
>- It can be only one word with no spaces.
>- It can use only letters, numbers, and the underscore (_) character.
>- It can’t begin with a number.
`camelCase` or `snake_case` are both good. As per ([3] - Variable Names), he'd prefer to use `camelCase`.
*Reserved words* **can’t** be used as identifiers for other programming elements like name of *variable*, *function* etc. [Python 3 has 33 keywords](https://www.tutorialspoint.com/What-are-Reserved-Keywords-in-Python).
Data types (built-in)
---------------------
### strings
:point_right: String can be considered as a **list** of characters, have similar characteristics as **list**, but string is **immutable**.
#### operations
| Operation | Name | Description|
|--------------|----------------|------------|
| ``a + b`` | String concatenation | `'coder' + 'school' # = 'coderschool'`. Note: `'coder'+2 #error`|
| ``a * b`` | String replication |`'coder'*2 #'codercoder'`, :warning: 2nd operand **must** be `int`, not `float`|
### numerics
#### int and float
>The plain `int` type is unbounded.
```python=
>>> 42 == '42'
False
>>> 42 == 42.0
True
>>> 42.0 == 0042.000
True
```
#### operations
From 1.5 > Part 2 > 2_a
| Operation | Name | Description|
|--------------|----------------|------------|
| ``a + b`` | Addition | Sum of ``a`` and ``b``|
| ``a - b`` | Subtraction | Difference of ``a`` and ``b``|
| ``a * b`` | Multiplication | Product of ``a`` and ``b``|
| ``a / b`` | True division | Quotient of ``a`` and ``b``|
| ``a // b`` | Floor division | Quotient of ``a`` and ``b``, removing fractional parts |
| ``a % b`` | Modulus | Integer remainder after division of ``a`` by ``b``|
| ``a ** b`` | Exponentiation | ``a`` raised to the power of ``b``|
| ``-a`` | Negation | The negative of ``a``|
>The order of operations (also called precedence) of Python math operators is similar to that of mathematics: `**` > `* / // %` > `+ -`.
#### comparisons
>Comparisons can be chained arbitrarily; for example, x < y <= z.
### booleans
:point_right: Booleans are **a subtype of integers**. By default, an object is considered to be `True` ([1]).
Here are most of the built-in objects considered `False`:
- constants defined to be false: `None` and `False`.
- zero of any numeric type: `0, 0.0, 0j, Decimal(0), Fraction(0, 1)`
- empty sequences and collections: `'', (), [], {}, set(), range(0)`
```
False == 0 # True
True == 1 # True
True*False+True*True # = 1
```
#### Logic operators
:point_right: *The expression will be evaluated from left to right*
- `and`: a and b (if `a` is `False`, b won't be evaluated.([2])).
- `or`: a or b (if `a` is `True`, b won't be evaluated.([2])).
- `not`: not a.
- `^`: either a or b, but not both.
List
----
>:point_right: A list is a value that contains **multiple values** (allows duplicates) in an **ordered** sequence.
A list can contain a mix of different data types:
```python=
my_favourite_things = [32, 'Always be learning!', help]
```
### range
```python=
range(stop)
range(start, stop[, step])
```
### operations
| Operation | Result |
| -------------- | ------------------ |
| `x in s` | `True` if an item of `s` is equal to `x`, else `False` |
| `x not in s` | `False` if an item of `s` is equal to `x`, else `True` |
| `s + t` | the concatenation of `s` and `t` |
| `s * n` or `n * s` | equivalent to adding s to itself *n* times |
| `s[i]` | ith item of `s`, origin 0 |
| `s[i:j]` | slice of `s` from index `i` to index `j-1`. :warning: it returns `[]` if `i > j`. |
| `s[i:j:k]` | slice of `s` from index `i` to index `j-1` with step `k`. :penguin: if `k` is a negative number, it will go backward.|
| `len(s)` | length of s (built-in) |
| `min(s)` | smallest item of s |
| `max(s)` | largest item of s |
| `s.count(x)` | total number of occurrences of x in s |
```python=
>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]]
```
*VS*
```python=
>>> lists = [[] for i in range(3)]
>>> lists[0].append(3)
>>> lists[1].append(5)
>>> lists[2].append(7)
>>> lists
[[3], [5], [7]]
```
---
Examples:
<img src="https://i1.faceprep.in/Companies-1/lists-in-python.png" width=600>
```python=
planets = ['Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune']
print(planets.index('Earth')) # 2
print(planets.index('Kyrpton')) # Error
print(planets[1] if len(planets) > 1 else 'None') #Ternary Operator
```
### list methods
|Method| Description|
|------|---------------|
|append()| Adds an element at the end of the list|
clear() |Removes all the elements from the list|
copy() |Returns a copy of the list|
count() |Returns the number of elements with the specified value|
extend()| Add the elements of a list (or any iterable), to the end of the current list|
index()| Returns the index of the first element with the specified value|
insert()| Adds an element at the specified position|
pop()| Removes the element at the specified position|
remove()| Removes the first item with the specified value|
reverse()| Reverses the order of the list|
sort()| Sorts the list|
[Python List/Array Methods](https://www.w3schools.com/python/python_ref_list.asp)
From 1.5 > Part 4 > 4_f
:penguin: `list.extend` also adds item to the end of the list. However, the main difference between `extend` and `append` is `extend` add each elements of a list (or any iterable) while `append` will add the whole list.
Input and ouput
---------------
:point_right: The `input()` function waits for the user to type some text on the keyboard and press ENTER.
:point_right: The `print()` function displays the string value inside its parentheses on the screen.
:penguin: `print(f'The string can combine with {variable}.')`
Conditionals
------------
```python=
if [condition 1]:
[do A]
elif [condition 2]:
[do B]
elif [condition 3]:
[do C]
else:
[do D]
```
Loop
----
### *break* and *continue* statements
:point_right: `break`: exit the nearest loop.
```python=
for i in l1:
for j in l2:
print(i, j)
if i == 2 and j == 20 :
print('BREAK')
break
# 1 10
# 1 20
# 1 30
# 2 10
# 2 20
# BREAK
# 3 10
# 3 20
# 3 30
```
:point_right: `continue`: immediately jumps back to the start of the loop and reevaluates the loop’s condition.
>:warning: In fact, you can use `continue` and `break` statements **only** inside *while* and *for* loops. If you try to use these statements **elsewhere**, Python will give you an **error**.
### *for* Loops
```python=
fruits = ['papaya', 'watermelon', 'dragonfruit', 'banana']
for fruit in fruits:
print(fruit)
for index in range(0, len(fruits)):
print(f'{fruits[index]} is {index}')
```
### *while* Loops
```python=
spam = 0
while spam < 5:
print('Hello, world.')
spam = spam + 1
```
[1]: https://docs.python.org/3/library/stdtypes.html#truth-value-testing
[2]: https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
[3]: https://automatetheboringstuff.com/2e/chapter1/
###### tags: `mle` `week1` `basics` `variables` `conditionals` `list` `loop`