TP Remise en jambe - STID

Bases de Python et d’algorithmique
Author

Hong-Phuong DANG, Rémi PEPIN, Ludovic DENEUVILLE

Avant de commencer

Une bonne habitude pour s’y retrouver et de créer une arborscence claire

└── P:
    └── Cours1A
        └── UE0-Info-Remise-en-jambe
            ├── src
            │   ├── ex1.py
            │   ├── ex2.py
            │   └── ...

Vous pouvez créer chaque dossier et fichier à la main, ou utiliser les commandes ci-dessous (mkdir : make directory):

    • Sur le bureau > clic droit > Git Bash here
    • mkdir -p /p/Cours1A/UE0-Info-Remise-en-jambe/src/
    • touch /p/Cours1A/UE0-Info-Remise-en-jambe/src/ex{1..5}.py
    • Dans Git Bash ➡️ clic droit > Paste ou MAJ + INSER
Utilisez le lecteur P:

Il est important de stocker vos fichiers dans votre lecteur P: et non sur votre bureau ou votre disque C: car vos fichiers risqueraient de disparaitre !

    • Allez dans /p/Cours1A/
    • Cliquez une seule fois sur UE0-Info-Remise-en-jambe
    • Cliquez sur le bouton Sélectionner un dossier
    • Votre dossier apparait à gauche dans l’explorer

Paramétrage VSCode

settings.json
{
    "flake8.args": [
        "--max-line-length=100"
    ],
    "[python]": {
        "editor.defaultFormatter": "ms-python.black-formatter",
        "editor.formatOnSave": true,
        "editor.insertSpaces": true,
        "editor.tabSize": 4
    },
    "black-formatter.args": ["--line-length", "100"],
    "python.analysis.extraPaths": [
        "./*"
    ],
    "python.languageServer": "Jedi",
    "python.testing.pytestEnabled": true,
    "files.exclude": {
        "**/__pycache__": true,
        "**/.pytest_cache": true
    },
    "terminal.integrated.env.windows": {
        "PYTHONPATH": "${workspaceFolder}/src"
    },
    "terminal.integrated.env.linux": {
        "PYTHONPATH": "${workspaceFolder}/src"
    },
    "terminal.integrated.defaultProfile.windows": "Git Bash",
}
Note

Ce fichier de settings permet d’intégrer à votre espace de travail :

  • Black : un formateur automatique de code
  • Flake8 : un linter
  • Git Bash : comme terminal par défaut
  • cacher certains fichiers non utiles

Rappels

Listes et boucles

Une liste en Python est une collection ordonnée et modifiable d’éléments, pouvant contenir des éléments de différents types.

Voici quelques exemples de boucles pour afficher les éléments de la liste.

liste = ["Alice", "Benoit", "Camille"]

for v in liste:
    print(v)

for i in range(len(liste)):
    print(liste[i])

for i, v in enumerate(liste):
    print(f"index {i} : valeur {v}")

index = 0
while index < len(liste):
    print(liste[index])
    index += 1

Range

Vous pouvez également étudier le comportement de la fonction range selon son nombre de paramètres

print(f"range(10)       : {list(range(10))}")
print(f"range(2, 10)    : {list(range(2, 10))}")
print(f"range(5, 10, 2) : {list(range(5, 10, 2))}")
range(10)       : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(2, 10)    : [2, 3, 4, 5, 6, 7, 8, 9]
range(5, 10, 2) : [5, 7, 9]

Dictionnaire

Un dictionnaire est une collection non ordonnée de paires clé-valeur.

Chaque clé est unique.

# Créer un dictionnaire
dico = {1: "Alice", 2: "Benoit", 3: "Camille"}

# Ajouter un élément
dico[8] = "Dua"

# Supprimer un élément à partir de sa clé
dico.pop(1)

# Parcourir le dictionnaire
for k, v in dico.items():
    print(f"clé {k} : valeur {v}")

for k in dico.keys():
    print(k)

for v in dico.values():
    print(v)

1 Les variables

1.1 Exercice 1

    • Vérifiez

Bloc 1

first = 6 
second = first + 9 
first = second 
second = 11

Bloc 2

first = 7
second = first + 5
first += 2
second = first * 9

Bloc 3

first = 10
second = first % 3
second = second + 2 
first = second // 2

1.2 Exercice 2

Affectez les valeurs des expressions ci-dessous dans une variable, puis affichez le résultat.

Warning

Certaines expressions ne sont pas valides, dans ce cas expliquez l’erreur et corrigez l’expression.

1.3 Exercice 3

    • a = 2
    • b = 8

1.4 Exercice 4

Définissez 4 variables :

  • identifiant = ?
  • profil = ?
  • phrase_debut = "Bonjour "
  • phrase_fin = ". Votre profil est : "

Affichez la texte qui résulte de la concaténation des 4 variables. Par exemple : "Bonjour Alice. Votre profil est : développeuse".

1.5 Exercice 5

Considérons maintenant deux variables numériques entières suivantes :

  • heure : valeurs comprises entre 0 et 23
  • minute : valeurs comprises entre 0 et 59

Ajoutons une variable textuelle jour pouvant prendre les valeurs “lundi”, “mardi”, … , “dimanche”.

Pour chacun des cas listés ci-dessous, créez une fonction qui renvoie un booléen si le jour et l’horaire est valide :

def heure_et_minute_pairs(jour, heure, minute) -> bool:
    """Retourne True si heure et minute sont pairs. False sinon"""
    if heure % 2 == 0 and minute % 2 == 0:
        return True
    return False

if __name__ == "__main__":
    print(heure_et_minute_pairs("mardi", 20, 00))
    print(heure_et_minute_pairs("lundi", 15, 27))
    print(heure_et_minute_pairs("mardi", 12, 45))

2 Les collections

2.1 Listes

    • Vérifiez
from copy import copy

initial = [1, 2, 'test', True, 4, 5] 
second = initiale
my_copy = copy(initiale)

initial[0] = 42
initial[5] = 'another'

print(initial)
print(second)
print(my_copy)

2.2 Dictionnaires

remise_a_niveau = {
    "UE" : "Informatique pour la data science",
    "module" : "remise_a_niveau",
    "nb_eleve": 20,
    "eleves": ["Alice", "Benoit", "Camille"]
}

3 Conditions

Important

À partir de maintenant, créez un nouveau fichier .py pour chaque nouvelle fonction.

3.1 Fonction Pair

3.2 Fizz / Buzz

Écrivez une fonction qui prend en entrée un entier et qui va :

  • écrire FIZZ si cet entier est multiple de 3
  • BUZZ s’il est multiple de 5
  • FIZZ BUZZ s’il est multiple de 3 et 5

Affichez le nombre dans tous les autres cas.

4 Boucles

4.1 10 premiers entiers

Écrivez les 10 premiers entiers positifs :

4.2 Fibonacci

Rappel

La suite de Fibonacci \((F_{n})_{n\in \mathbb {N}}\) est définie par :

  • \(F_{0} = 0\)
  • \(F_{1} = 1\)
  • \(F_{n} = F_{n-1} + F_{n-2}\) pour \(n \geq 2\)

Le résultat attendu lorsque vous appelez votre fonction :

afficher_suite_fibonacci(15)  
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 
Fonction print

Vous pourriez trouver un peu d’aide en consultant de la documentation sur la fonction print.

4.3 Fibonacci 10.000

Affichez les termes de la suite de Fibonacci inférieurs à 10 000 :

4.4 Crible d’Ératosthène

Le crible d’Ératosthène est un algorithme simple pour calculer exhaustivement les nombres premiers inférieurs à une valeur fixée N.

Il consiste à rayer progressivement les nombres qui ne sont pas premiers dans une liste de booléens :

  • Initialisez une liste de N éléments qui valent tous True (tous les nombres sont potentiellement premiers)
    • liste = [True, True, True, True, True, True, True...]
  • Mettez à False les éléments d’index 0 et 1 car ces deux nombres ne sont pas premiers
    • liste = [False, False, True, True, True, True, True...]
  • Mettez à False tous les éléments ayant un index multiple de 2
    • liste = [False, False, True, True, False, True, False...]
  • Puis recherchez le prochain nombre encore potentiellemnent premier supérieur à 2 ➡️ 3
  • Mettez à False tous les éléments ayant un index multiple de 3
  • etc.
  • Récupérez les index ayant pour valeur True et affichez ces nombres premiers

4.5 Pyramide

Exemple pour n=5
*********
 *******
  *****
   ***
    *

4.6 Nouvelle base

Ecrivez une fonction qui prend en paramètres :

  • un entier positif entier_base_10
  • un entier nouvelle_base (compris entre 2 et 16)

Et retourne l’écriture de entier_base_10 dans la nouvelle_base

4.7 Maximum