Objectifs

L’objectif est de travailler les compétences associées aux fonctions, en mobilisant celles concernant les structures de contrôle (if, for, while) et de données (tableaux).

Ces exercices reprennent une part importante du code présenté dans le cours. Il faut être capable de les résoudre sans copier-coller, ni autre support que les cartes mentales des cours sur les tableaux et fonctions.

Toutes les fonctions doivent être spécifiées (rôle, paramètres, valeur renvoyée, pré et post-conditions) ; les pré et post conditions peuvent être contrôlées par des assertions.

Exercice A - Nombres

Compléter la définition et la spécification de la fonction suivante :

def saisie_entier(A COMPLETER) -> A COMPLETER:
    """ Demande à l'utilisateur de saisir un nombre entier jusqu'à ce que la
    saisie soit valide
    A COMPLETER
    """
    valide = False
    while not valide:
        saisie = input(message)
        if saisie.isdigit():
            nombre = int(saisie)
            valide = True
        else:
            print("Erreur : '" + saisie + "' n'est pas un nombre.")
    return nombre

if __name__ == "__main__":
    nombre = saisie_entier("Effectif de la classe : ")
    print("Vous avez saisi le nombre entier : " + str(nombre))

Écrire la fonction similaire à la précédente mais pour les nombres réels. Indications : la séquence d’instructions :

if saisie.isdigit():
    nombre = int(saisie)

devient :

saisie = saisie.replace(",", ".")
if saisie.replace(".", "", 1).isdigit():
    nombre = float(saisie) if "." in saisie else int(saisie)

Exercice B - Moyenne

  • Définir une fonction qui demande à l’utilisateur de saisir plusieurs valeurs numériques et qui les renvoie dans un tableau.
from typing import List

def saisie_num(message: str) -> List[float]:
    """
    Demande à l'utilisateur de saisir des nombres
    @param message indique ce qu'il faut saisir (vitesses, notes, températures…)
    @return les nombres saisis
    """
    A COMPLETER
  • Définir une fonction qui calcule la moyenne de plusieurs (au moins une) valeurs numériques.

  • Utiliser ces fonctions pour saisir des notes et afficher la moyenne.

Exercice C - Maximum

Définir une fonction qui renvoie l’indice de la première occurrence de la plus grande valeur d’un tableau. Si le tableau est vide, la fonction doit renvoyer -1.

Ajouter des “doctests” à la fonction.

Exercice D - Mention du baccalauréat

Compléter la fonction qui renvoie la mention (R pour refusé, P pour Passable, AB, B, TB et F pour Félicitations) obtenue au baccalauréat après calcul de la moyenne des notes

Ajouter les “doctests” à la fonction. Il y a 6 classes d’équivalence et 5 valeurs limites (10, 12, 14, 16 et 18).

from typing import List

def mention(notes: List[float], coefs: List[float]) -> str:
    """
    A COMPLETER
    """
    assert len(notes) == len(coefs), "il faut autant de coefficients que de notes"
    assert sum(coefs) != 0, "la somme des coefficients ne doit pas être nulle"

    total_points = 0
    total_coefs = 0

    for i in range(len(notes)):
        A COMPLETER

    moyenne = total_points / total_coefs
    if moyenne < 10:
        resultat = "R"
    A_COMPLETER

Exercice E - Menu

Définir une fonction qui permet de proposer une liste d’actions possibles à un utilisateur et qui renvoie le numéro de l’option choisie. Cette fonction doit être universelle ; exemple d’affichage lors de l’appel menu(["Python", "HTML / CSS"]) :

1. Python
2. HTML / CSS
Votre choix : 0
Erreur : choix '0' invalide.

1. Python
2. HTML / CSS
Votre choix : 1

Remarque : cette fonction pourra être utilisée dans un jeu en mode console par exemple.

Exercices F - Petits jeux

Le jeu de Nim / des allumettes

Dans ce jeu à deux joueurs, il y a au départ un tas de 15 allumettes. Chaque joueur pioche à tour de rôle une deux ou trois allumettes. Celui qui pioche la dernière a perdu. Variantes :

  • nombre d’allumettes au départ aléatoire (entre 12 et 24 par exemple) ;
  • on peut piocher plus de trois allumettes ;
  • on peut joueur contre l’ordinateur en mode facile ou difficile.

Ce programme doit être découpé en fonction. Par exemple :

  • une fonction pour la saisie des noms des joueurs ;
  • une fonction pour faire piocher un joueur, en l’empêchant de tricher ;
  • une fonction pour faire piocher l’ordinateur.