La programmation, je me lance !

Image cool

Dans deux heures…

  • Le mot « programmation » ne sera plus abstrait

  • Vous connaîtrez les bases d’une nouvelle langue

  • Vous aurez créé votre propre programme

Je pense à un nombre entre 0 et 857, devine lequel!

Entre un nombre: 857
Trop grand!
Entre un nombre: 412
Trop petit!
Entre un nombre:
Je pense à un nombre entre 0 et 857, devine lequel!

Entre un nombre: 857
Trop grand!
Entre un nombre:
Je pense à un nombre entre 0 et 857, devine lequel!

Entre un nombre:
Je pense à un nombre entre 0 et 857, devine lequel!

Entre un nombre: 857
Trop grand!
Entre un nombre: 412
Trop petit!
Entre un nombre: 413

Bravo, tu as trouvé le nombre 413 en 3 essais!

Bonjour, moi c’est Sylvain

  • 👨‍🎓 Ingénieur logiciel
  • 👨‍💻 Développeur web depuis 20 ans
  • 💘 J’anime des ateliers de programmation
  • 📖 PS : j’ai écrit un livre pour apprendre à programmer

Insérer slide Clotilde

C’est quoi un
programme ?

⚠️ copyright

class LinuxArtifactJob(ArtifactJob):
    package_re = r"public/build/target\.tar\.bz2"
    product = "firefox"

    _package_artifact_patterns = {
        "{product}/crashreporter",
        "{product}/dependentlibs.list",
        "{product}/{product}",
        "{product}/{product}-bin",
        "{product}/minidump-analyzer",
        "{product}/pingsender",
        "{product}/plugin-container",
        "{product}/updater",
        "{product}/**/*.so",
    }

    @property
    def package_artifact_patterns(self):
        return {p.format(product=self.product) for p in self._package_artifact_patterns}

    def process_package_artifact(self, filename, processed_filename):
        added_entry = False

        with JarWriter(file=processed_filename, compress_level=5) as writer:
            with tarfile.open(filename) as reader:
                for p, f in UnpackFinder(TarFinder(filename, reader)):
                    if not any(
                        mozpath.match(p, pat) for pat in self.package_artifact_patterns
                    ):
                        continue

                    # We strip off the relative "firefox/" bit from the path,
                    # but otherwise preserve it.
                    destpath = mozpath.join("bin", mozpath.relpath(p, self.product))
                    self.log(
                        logging.DEBUG,
                        "artifact",
                        {"destpath": destpath},
                        "Adding {destpath} to processed archive",
                    )
                    writer.add(destpath.encode("utf-8"), f.open(), mode=f.mode)
                    added_entry = True

        if not added_entry:
            raise ValueError(
                'Archive format changed! No pattern from "{patterns}" '
                "matched an archive path.".format(
                    patterns=LinuxArtifactJob.package_artifact_patterns
                )
            )


class MacArtifactJob(ArtifactJob):
    package_re = r"public/build/target\.dmg"
    product = "firefox"

    # These get copied into dist/bin without the path, so "root/a/b/c" -> "dist/bin/c".
    _paths_no_keep_path = (
        "Contents/MacOS",
        [
            "crashreporter.app/Contents/MacOS/crashreporter",
            "{product}",
            "{product}-bin",
            "*.dylib",
            "minidump-analyzer",
            "pingsender",
            "plugin-container.app/Contents/MacOS/plugin-container",
            "updater.app/Contents/MacOS/org.mozilla.updater",
            # 'xpcshell',
            "XUL",
        ],
    )

Programme

Code source

  1. Allumer les moteurs
  2. Ajuster la vitesse à 18km/h
  3. Attendre de toucher le sol
  4. Couper les moteurs
  5. Planter le drapeau

Programme d’alunissage

  1. Mettre du sucre, de la farine et du cacao dans un saladier
  2. Ajouter de l’huile et des pépites de chocolat
  3. Mélanger
  4. Mettre au four 23 minutes à 180°
  5. Sortir du four et manger

Brownies double chocolat

🤤

Conclusion

Un programme est une recette de cuisine

écrite dans une langue appelée langage de programmation

Il existe des milliers de langages de programmation

HTML

PHP

CSS

JavaScript

Python

C

Assembleur

Java

Elm

Pascal

Ruby

R

Basic

😵

Python

Apprendre à programmer
c’est facile

(surtout en deux heures)

>>> print("Salut!)
  File "", line 1
    print("Salut!)
                 ^
SyntaxError: EOL while scanning string literal

Les erreurs sont là pour vous aider !

Bon on écrit du code ou quoi ⁉️

Ouvrez votre navigateur et allez sur
https://repl.it/login

Login: ateliergdc
Mot de passe: ******

Minute 20

1

2

3

Éditeur de code (écrivez ici !)

Zone d’affichage

Cliquez pour exécuter votre code

print("Salut!")
print("C’est mon premier programme!")

Un peu d’arithmétique

print("Salut" + " tout le monde")
Salut tout le monde

print("2" + "2")
22

print(2 + 2)
4

print(2 + "2")
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Nombres entiers

40

5

12

-7

20

Chaînes de caractères

(integers)

(strings)

"Salut"

"40"

"12"

"Le nombre 40"

🛠 Outil : les fonctions 🛠

Une fonction est un raccourci pour exécuter plusieurs instructions

print("Salut!")

Minute 30

print("Quel est ton nom?")

Fonction

Paramètre

Certaines fonctions renvoient une valeur

max(5, 8, 2, 1, -2)

Trop petit?

On peut créer ses propres fonctions
(mais pas aujourd’hui)

  • check_password("Sylvain", "1234")
  • fire_thrusts(90)
  • play_music("Idioteque.mp3")

Quelques fonctions de Python

  • print("Bonjour")
  • input("Entrez un nombre: ")
  • max(4, -3, 1)
  • int("5")
  • str(5)

Liste complète: https://docs.python.org/fr/3/library/functions.html

"30"

4

5

"5"

int(input("Entre un nombre"))

Couleurs valeurs

Nombres entiers

40

5

12

-7

20

Chaînes de caractères

(integers)

(strings)

"Salut"

"40"

"12"

"Le nombre 40"

str()

int()

🛠️ Outil : les variables 🛠️

Une variable est un nom donné à une valeur

x = 5

Minute 40

my_name = "Sylvain"
number = 4

Changer my_name mettre Clotilde

Emoji stylo

Exemples de variables

  • my_name = "Sylvain"
  • nb_books_read = 57
  • current_date = "04.10.2021"

Nom de la variable

Valeur

my_name = "Sylvain"
print(my_name)

Pas de guillemets autour du nom de la variable

🧐

✍️

Assigner une valeur à une variable

my_name = input("Comment t’appelles-tu? ")
print(my_name)

✍️

🧐

Mettre le résultat d’une fonction dans une variable

Ajouter étape de transition après print(my_name)

my_name = "Sylvain"
my name = "Sylvain"
print("my_name")
print(my name)
print(my_name)
print(your_name)
input("Votre nom: ") = your_name
your_name = input("Votre nom: ")
my_name = Sylvain

Exemples d’instructions correctes et incorrectes

Bon on écrit du code ou quoi ⁉️

number = input("Devinez le nombre auquel je pense: ")
print("Vous avez entré le nombre " + number)
  1. Poser la question "Devinez le nombre auquel je pense: " et mettre le résultat dans la variable number
  2. Afficher "Vous avez entré le nombre " + number

Rappel :

Afficher ➡️ print("Texte à afficher")
Poser une question ➡️ input("Question: ")
Mettre le résultat dans une variable ➡️ variable = ...

🛠️ Outil : les conditions 🛠️

Les conditions servent à créer des embranchements

if condition:
    instruction1
else:
    instruction2

Est-ce que … ?

Instruction 1

Oui

Non

Instruction 2

1h

Une condition est soit vraie (True) soit fausse (False)

print(2 < 5)
True

print(2 > 5)
False

print(2 == 5)
False

print(2 != 5)
True

Exemples de conditions

print(not True)
False

print(2 > "2")

TypeError: '>' not supported between instances of 'int' and 'str'

Nombres

40

5

12

-7

20

Chaînes de caractères

(integers)

(strings)

"Salut"

"40"

"12"

"Le nombre 40"

True

False

Valeurs vrai/faux

  • < est plus petit que
  • > est plus grand que
  • == est égal à
  • != est différent de
  • not inverse le résultat

Résumé des opérateurs de comparaison

Exemple de programme avec un embranchement

  1. Poser la question "Entre un nombre: ", convertir le résultat en nombre, et le mettre dans la variable number
  2. Si la valeur de la variable number est 4, alors
    1. Afficher "Bravo!"
    2. Afficher "C’est le nombre auquel je pensais!"
  3. Sinon
    1. Afficher "Ce n’est pas le bon nombre"

Exemple de programme avec un embranchement

Poser la question "Entre un nombre" et convertir le résultat

Afficher "Bravo!"

Oui

Non

Afficher "Ce n’est pas…"

Est-ce que le nombre vaut 4?

Afficher "C’est le nombre…"

Exemple de programme avec un embranchement

number = int(input("Entre un nombre: "))

if number == 4:
    print("Bravo, tu as deviné!")
    print("C’est le nombre auquel je pensais!")
else:
    print("Ce n’est pas le nombre aquel je pensais")
  • 4 espaces
  • Exécuté seulement si la condition est vraie

Ne pas oublier les deux-points !

  • 4 espaces
  • Exécuté seulement si la condition est fausse

Exemple de programme avec plusieurs embranchements

number = int(input("Entre un nombre: "))

if number == 4:
    print("Bravo, tu as deviné!")
    print("C’est le nombre auquel je pensais!")
elif number == 5:
    print("Ce n’est pas le bon nombre, mais pas loin!")
elif number < 0:
    print("Tu vas chercher trop loin!")
else:
    print("Ce n’est pas le nombre aquel je pensais")

Bon on écrit du code ou quoi ⁉️

  1. Mettre le nombre 4 dans la variable number
  2. Poser la question "Entre un nombre: ", convertir le résultat en nombre, et mettre le résultat dans la variable guess
  3. Si la valeur de la variable guess < number, alors
    1. Afficher "Trop petit!"
  4. Sinon, si guess > number, alors
    1. Afficher "Trop grand!"
  5. Sinon
    1. Afficher "Bravo!"
if condition1:
    ...
elif condition2:
    ...
else:
    ...

faire capture d’écran de la solution

🛠️ Outil : les modules Python 🛠️

Dans Python, les piles sont incluses

import datetime
print(datetime.datetime.now())

1h20

Le but : faire plein de trucs sans avoir à les programmer nous-mêmes !

  • Manipulation de dates
  • Accès aux fichiers
  • Statistiques
  • E-mails
  • Web
  • Aléatoire

Plein de trucs comme :

Exemple : le module random

Comme de par hasard c’est pile ce qu’il nous faut ! 🤩

 random.randint(a, b)

    Renvoie un entier aléatoire N tel
    que a <= N <= b.

import random

print(random.randint(0, 42))
# 39
print(random.randint(0, 42))
# 18

Exemple : le module random

Charge le code du module (à mettre tout en haut !)

Modifiez votre programme pour faire deviner un nombre aléatoire

import random

number = random.randint(0, 255)
print(number)

Rappel

🛠️ Outil : les boucles 🛠️

Les boucles permettent d’exécuter un bout de code plusieurs fois

while condition:
    instructions

1h30

counter = 0

while counter < 5:
    print("Le compteur est à " + str(counter))
    counter = counter + 1
    
print("Le compteur est terminé")
  
# Le compteur est à 0
# Le compteur est à 1
# Le compteur est à 2
# Le compteur est à 3
# Le compteur est à 4
# Le compteur est terminé

Deux-points, comme pour les if

4 espaces, comme pour les if

Exemple de boucle : un compteur

Schéma embranchement

number_found = False

while not number_found:
    number = int(input("Entre un nombre: "))
    
    if number == 4:
        number_found = True
        print("Bravo!")
    else:
        print("Ce n’est pas le bon nombre!")

Exemple de boucle : poser une question

  1. Créer une variable number avec un nombre aléatoire compris entre 0 et 42
  2. Créer une variable number_found avec comme valeur initiale False
  3. Tant que number_found est False:
    1. Poser la question "Entre un nombre entre 0 et 42: ", convertir le résultat en nombre, et le mettre dans la variable guess
    2. Si guess < number, alors:
      1. Afficher "Trop petit!"
    3. Sinon, si guess > number, alors:
      1. Afficher "Trop grand!"
    4. Sinon:
      1. Afficher "Bravo!"
      2. Assigner True à la variable number_found

Modifiez votre programme pour qu’il corresponde à ça

import random

number = random.randint(0, 42)
number_found = False

while not number_found:
    guess = int(input("Entre un nombre entre 0 et 42: "))

    if guess == number:
        print("Bravo! Le nombre à deviner était " + str(number))
        number_found = True
    elif guess < number:
        print("Trop petit!")
    else:
        print("Trop grand!")

Solution

Et maintenant ?

1h50

La programmation, je me lance !

By Sylvain Roflmao

La programmation, je me lance !

  • 220