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.
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)
- 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.
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.
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
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.
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.