Преглед на файлове

Write contents for session1

master
Dimitri Merejkowsky преди 6 години
родител
ревизия
6e084f49f8
променени са 1 файла, в които са добавени 507 реда и са изтрити 112 реда
  1. +507
    -112
      sessions/01.md

+ 507
- 112
sessions/01.md Целия файл

@@ -1,165 +1,560 @@
### Introduction
# Introduction à la programmation avec Python

* Historique du langage:

* création par Guido pour l'enseignement
* Monty Python
* le grand schisme 2/3.
* Meilleur nul part, excellent partout

* Utilisation de Python
<p align="right">
E2L <br />
24/11/2018 <br />
Dimitri Merejkowsky <br />
</p>

* Sciences (physique, chimie ...)
* Animation
* Sites web
* ...
* Ligne de commande
* Langage de 'glue'
---

### Le REPL
# Plan

* S'assurer que tous les étudiants peuvent lancer le REPL
* Présentation et historique du langage
* L'interpréteur interactif
* Un jeu simple

Notions:
---

* Entiers et flottants (via maths basiques: + * - /)
* Grouper avec des parenthèses.
* Booléens
* Variables
* Fonctions:
# Historique

* `quit()`
* Créé par Guido van Rossum. Conçu à la base pour l'enseignement.
* Le nom vient des Monty Python (si, si)
* Python 1: Sortie en 1991
* Python 2: en 2000
* Python 3: en 2008



### Du code dans un fichier
---

Oups, les variables disparaissent quand on ferme le REPL.
Solution: les mettre dans un fichier `.py`.
# Le grand schisme

```python
a = 1
b = 2
La plupart des langages continuent à être compatibles d'une version à l'autre.

c = a+b
*Ce n'est pas le cas pour Python3*, et ça a causé beaucoup de confusion et de débats.

print(c)
```
Heureusement, 10 ans plus tard, la situation s'est arrangée.

S'assurer que les étudiants peuvent:
---

* `cd` dans le bon répertoire
* Lancer `python <lefichier.py`.
# Python3

Notions:
Ce cours fonctionne donc uniquement avec Python3.

* Fonction print()
* Commentaires
N'utilisez *pas* Python2, sinon certaines choses expliquées ici ne marcheront pas :/

* Définir notre propre fonction:
---

* Paramètres
* Indentation
* Deux-points
* return()
# Utilisation de Python

```python
# ceci est un commentaire
def add(a, b):
return a + b
* Aussi appelé "langage de script", `glue language`

a = 1
b = 2
c = add(a, b)
print(c)
```
* Bon partout, excellent nulle part

* Exemples d'utilisation:

### Chaînes de caractères
* Sciences (physique, chimie, linguistique ...)
* Animation (Pixar, Disney ...)
* Sites web (journaux, youtube, ...)
* Ligne de commande
* ...

* Guillemets simple et double
* Concaténation implicite
* Backslash et échappement: '\n', '\r', '\t'
* Raw string 'r'
* Triple-guillemets
* Parenthèses
* Addition avec '+'
---

Notions:
* types. On peut pas ajouter un entier à une strig
* conversion avec `str()`
# Installation

```python
message = "Le total est: " + c
print(message)
```
---

* Indexation
# L'interpréteur interactif

```
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
```


* `len()`
!pycon
$ python3
Python 3.7.1 (default, Oct 22 2018, 10:41:28)
[GCC 8.2.1 20180831] on linux
Type "help", "credits" or "license" for more information.
>>>

### Flot de contrôle
---

* if
* while
* `break`, `continue`
* `for`
* `range()`
* On peut aussi itérer sur les strings
# Note

### Entrèe standard

* input()
Recopiez les entrées sur les slides dans votre propre interpréteur.
S'il fait quelque chose que vous ne comprenez pas, prévenez moi!

Démo: "à quel nombre je pense"
---
# Entiers et maths simples

```python
secret = 42
!pycon
>>> 1
1
>>> 2
2
>>> 1 + 2
3
>>> 2 * 3
6

print("Devine le nombre auquel je pense"):
while True:
reponse = input()
if response > secret:
print("Trop grand")
if response < secret:
print("Trop petit")
print("Gagné")
break
```
---

Notions:
# Flottants

* Exceptions: si la conversion échoue
C'est le `.` qui fait le flottant

```python
import random
!pycon
>>> 0.5
0.5
>>> 0.5 + 0.2
0.7
>>> 10 / 3
3.3333333333333335

secret = random.randint(0, 100)
```
*Note: les flottants sont imprécis*

----

Notions:
# Division entières et modulo

* imports
* accès à un membre avec `.`
!pycon
>>> 14 // 3
4
>>> 14 % 3
2

*Le `%` n'a rien à voir avec un pourcentage!*

Des liens:
---

* La doc officielle (récemment traduite en français):
https://docs.python.org/fr/3/tutorial/index.html
# Priorité des opérations

* sametmax: http://sametmax.com/cours-et-tutos/. Note: ça y parle aussi de
cul, donc pas à mettre entre toutes les mains ;-)

!pycon
>>> 1 + 2 * 3
7
>>> (1 + 2) * 3
9

* Fin!
*Les parenthèses permettent de grouper les expressions*

---

# Variables

!pycon
>>> a = 2
>>> a
2
>>> b = 3
>>> a + b
5

* On peut nommer des valeurs
* On peut afficher la valeur d'une variable entrant son nom dans le REPL

---

# Variables (2)


!pycon
>>> a = 2
>>> a
2
>>> a = 3
>>> a
3

* On peut changer la valeur d'une variable (d'où son nom)

---


# Les chaînes de caractères

Aussi appelées "string".


Avec des simple quotes (`'`)

!pycon
>>> 'Bonjour monde!'
'Bonjour monde'

Marche aussi avec des double quotes (`"`)

!pycon
>>> "Bonjour, monde!"
'Bonjour monde'



---

# Double et simple quotes

On peut mettre des simples quotes dans des double quotes et vice-versa.

!pycon
>>> "Il a dit: 'bonjour' ce matin."
"Il a dit: 'bonjour' ce matin."

>>> 'Il a dit: "bonjour" ce matin'
'Il a dit: "bonjour" ce matin!'

---

# Échappement


Avec la barre oblique inversée "backslash"


!pycon
>>> 'Il a dit: "bonjour". C\'est sympa!'
'Il a dit: "bonjour". C\'est sympa!'

---

# Concaténation


!pycon
>>> name = "John"
>>> message = "Bonjour " + name + " !"
>>> message
"Bonjour John !"

---

# Types

!pycon
>>> a = 42
>>> message = "La réponse est: " + a
TypeError: can only concatenate str (not "int") to str

On ne mélange pas les torchons et les serviettes!

---

# Conversions


!python
# Entier vers string
>>> a = 42
>>> message = "La réponse est: " + str(a)
>>> message
'La réponse est 42'


# String vers entier
>>> answer = int("42")
>>> answer
42

Notez les parenthèses autour des valeurs.

---

# Booléens

True et False


En Python, elle sont en majuscules!

---

# Assignation

On peut assigner des variables aux valeurs True et False


!pycon
>>> la_terre_est_plate = False
...
>>> python_c_est_genial = True

---

# Comparaisons

!pycon
>>> a = 2
>>> b = 3
>>> a > b
False

>>> 2 + 2 == 4
True

Note: `==` pour la comparaison, `=` pour l'assignation

---

# Comparaisons (2)

!pycon
>>> a = 2
>>> b = 3
>>> a != b
True
>>> 2 + 2 >= 4
True

---
# Non persistance

!pycon
>>> a = 2
>>> quit()

<span />

!pycon
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

*Notre premier message d'erreur !*


---

# Du code dans un fichier

Aussi appelé: "code source", ou "source".

L'essence du logiciel libre :)

---


# Installation d'un éditeur de texte simple

* Linux; `gedit`, `kate`, ...
* macOS: `CotEditor`
* Windows: `Notepad++`

J'insiste sur **simple**. Inutile d'installer un IDE pour le moment.

---

# Configuration

* Police de caractères à chasse fixe
* Indentation de *4 espaces*
* Remplacer tabulation par des espaces
* Activer la coloration syntaxique

---


# Notre premier fichier source


Insérez le code suivant dans votre éditeur de texte

!python
# Affiche un message
print("Bonjour, monde")


Sauvegardez dans un fichier `bonjour.py` dans `Documents/e2l/python` par exemple

---

# Lancer du code en ligne de commande


!console
$ cd Documents/e2l/python/
$ python3 bonjour.py
Bonjour, monde

* Les lignes commençant par dièse (`#`) ont été ignorées
* `print()` affiche la valeur, comme dans le REPL.

---

# Note importante (1)

Vous avez juste besoin:

* d'un éditeur de texte
* de Python3 installé
* d'une ligne de commande

Pas la peine d'installer quoique ce soit de plus pour le moment

---

# Note importante (2)

À partir de maintenant, vous devez suivre ce cycle:

1. *Recopiez* le code affiché dans votre éditeur, à la suite du code
déjà écrit
2. Lancez le code depuis la ligne de commande
3. Réparez les erreurs éventuelles
4. Recommencez

---

# Note importante (3)

C'est le meilleur moyen d'apprendre. Si vous restez passifs vous retiendrez beaucoup moins de choses et ne pourrez pas coder par vous-même.

Profitez qu'on soit là pour vous aider si vous avez des erreurs que vous ne comprenez pas!

---

# Flot de contrôle

L'essence de la programmation!

---

# while

Répéter tant qu'une condition est vraie



!python
print("Bonjour, monde")
while True:
print("spam!")

Notes:

* deux points à la fin de la ligne
* indentation après les deux points
---

# Notre première boucle infinie


!bash
> python bonjour.py
Bonjour, monde
spam!
spam!
spam!
....

CTRL-C pour interrompre

---

# Conditions

!python
a = 3
b = 4
if a == b:
print("a et b sont égaux")
else:
print("a et be sont différents")

Rappel:

* deux points à la fin de la ligne
* indentation après les deux points

---

# Combiner while et if

Interrompt la boucle quand une condition devient vraie:


!python
i = 0
while True:
i = i + 1
if i > 3:
print("i est plus grand que 3, on arrête")
break
print("i =" + str(i))
print("i est plus petit que 3, on continue")


<pre>
i = 1
i est plus petit que 3, on continue
i = 2
i est plus petit que 3, on continue
i = 3
i est plus petit que 3, on continue
i est plus grand que 3, on arrête
</pre>
---

# Lire une entrée utilisateur

* `input()` (encore des parenthèses ...)

* interrompt le script
* lit ce que l'utilisateur tape jusqu'à ce qu'il tape "entrée".
* renvoie une string

---

# Devine nombre

---

# Le code


!python
secret = 42

print("Devine le nombre auquel je pense")
while True:
response = input()
response = int(response)
if response > secret:
print("Trop grand")
continue
if response < secret:
print("Trop petit")
continue
print("Gagné")
break


---

À vous de jouer!

---

# Éviter de hard-coder le secret

Le secret a une valeur prédéfinie, et il faut changer le code source
pour changer le secret, pas glop.


Solution: le choisir au hasard

---

# Un secret au hasard

Remplacez le première ligne pour avoir:

!python
import random

secret = random.randint(0, 100)

Le jeu devient tout de suite plus amusant :)