# Calculs élémentaires
---
## Données
---
### Mémoire
Un calcul après l'autre → garder résultat en mémoire

OS met à disposition un espace au programme pour stocker ses données
---
### Données en mémoire

```
écrire 3 à l'adresse 0x4564
```
Utiliser l'adresse d'une case mémoire serait peu pratique. De plus, les cases disponibles ne sont pas toujours les mêmes.
---
### Données en mémoire

```
a = 3
```
On préfère donner un nom. Peu nous importe que `a` soit stocker en `0x4564` ou ailleurs.
---
### Affectation
```
a = 3
```
* signifie que l'on écrit la valeur 3 dans la case mémoire étiquetée `a`. C'est une **affectation**
* la première affectation, la variable est crée : l'interpréteur réserve pour elle une case mémoire.
---
**Attention !**
* Si j'ai `a = 3`, alors j'écris la valeur `3` dans `a`.
* Mais si je veux **savoir si** `a` est égal à `3`, je dois écrire :
```python
a == 3
```
---
### Variable
Puisque le contenu de `a` est susceptible de changer, on qualifie `a` de **variable**.
---
### Constante
Si `a` ne peut pas / ne doit pas changer, ce sera une **constante**. On convient de nommer les constantes avec des majuscules. Par exemple :
```python
WIDTH = 50
```
---
### Programmation impérative
Les différents langages ont des styles différents. On parle de **paradigme**. Python est **impératif** : on agit sur des variables et les instructions s'enchaînent l'une après l'autre.
```python
a = 5
b = 3
a = b
b = a
```
Dans cet exemple, `a` et `b` ne sont pas échangés !!!
---
### Les types de base
Il existe différents types de données qui sont stockées de façons différentes en mémoire. En effet, dans la mémoire, il n'y a que des `0` et des `1` et il faut faire des choix pour stocker les quantités de cette façon.
---
##### Entier : `int`
```python
>>> x = 2
>>> type(x)
```
---
##### Décimal : `float`
```python
>>> x = 2.5
>>> type(x)
```
À noter que `2.0` est un `float` mais `2` est un `int` !
---
##### Texte : `str`
```python
>>> x = "bonjour"
>>> type(x)
```
---
## Calculs
---
### Les opérateurs élémentaires
* Les élémentaires : `+`, `-` pour plus et moins
* L'astérisque `*` pour la multiplication
* Le slash `/` pour la division dont le résultat est **toujours** un `float`.
* La puissance `**`
```python
>>> 10/31
0.3225806451612903
>>> 4/2
2.0
>>> 2**3
8
```
---
### Les opérateurs entiers
* La division entière `//`
* Le modulo, ou reste de division entière : `%`
```python
>>> 100 // 7
14
>>> 100 % 17
2
```
Si je veux découper 100 bonbons entre 7 personnes, chacune aura 14 bonbons et il en restera 2.
---
### Raccourcis
Il est très fréquent que l'on doive écrire des choses comme :
```python
x = x + 1
```
On dispose d'un opérateur `+=` qui fait la même chose :
```python
x += 1
```
On dispose de la même façon de `*=`, `-=`; `/=`, `//=`...