223 234
1-8
9-11
12-15

@0 Préparer une présentation orale résumant 2 à 3 notions abordées lors de la dernière séance de cours :

  1. choisir UNE notion différente par élève au sein de chaque équipe,
  2. se préparer à réaliser, en 5 minutes maximum, sur 1/3 du tableau blanc, un croquis accompagné de mots clés et du titre de la notion abordée pour soutenir la présentation orale,
  3. se préparer à présenter, SANS notes, sa notion en 1,5 minutes maximum.

PROGRAMMER A L’AIDE DE FONCTIONS

1 - Prototyper un programme

Dans les exercices ci-dessous, les programmes seront testés sur ThonnyPython puis sur PythonTutor.

N’hésitez pas à utiliser l’excellent livre offert en libre accès par son auteur : Python 3 - G. Swinnen

@1 Créer un programme ré-affichant le nombre saisi par l’utilisateur.

Solution :

@2 Créer un programme qui détermine puis affiche le plus petit nombre parmi les 2 nombres entiers saisis par l’utilisateur.

Solution :

@3 Compléter le programme ci-dessous pour qu’il trouve le plus petit nombre parmi 3 nombres entiers saisis par l’utilisateur.

Solution :

a = float(input("a ?")) b = float(input("b ?")) c = float(input("c ?")) if a >= b: if c > b: print(b)

@4 Ecrire un programme qui donne la somme des n premiers entiers naturels. Par exemple, pour n = 4, on veut obtenir la valeur de 0 + 1 + 2 + 3 + 4 = 10.

Coup de pouce :
n = int(input("Saisie un nombre entier :")) resultat = 0 for i in range (1 , ...) : ... print ("La somme des', n, 'premiers entiers est :", resultat)
Correction :

@5 Concevoir un programme affichant toutes les puissances de 2 inférieures à 10 000. Ex: 1, 2, 4, 8, 16, 32, …

Coup de pouce :
resultat = 0 puissance = 0 while .... : resultat = 2 ** puissance puissance = puissance + 1 if ... : print(resultat)
Correction :

Dans le programme ci-dessous, il manque les # commentaires:

chaine="Bonjour à tou.te.s" for lettre in chaine : # commentaire ??? print(lettre) # commentaire ??

@6 Tester puis expliquer à l’aide de commentaires le fonctionnement du programme ci-dessus :

Solution :

Dans le programme ci-dessous, il manque les # commentaires:

citation="Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions." compteur=0 for lettre in citation : # commentaire ?? if lettre == "e": # commentaire ?? compteur=compteur+1 print(compteur) # commentaire ??

@7 Tester puis expliquer à l’aide de commentaires le fonctionnement du programme ci-dessus :

Solution :

@8 Créer un programme détectant la présence du caractère i dans une chaîne de caractères saisie par l’utilisateur.

Coup de pouce :
phrase = input("Saisir une phrase : ") compteur = 0 for .... : # on "prend" chaque lettre de la phrase, une à chaque tour if lettre == "i": # les "i" accentués ne sont donc pas comptés ! compteur = .... print("il y a", compteur, "lettres i") # affiche le nombre de "i" dans la citation
Correction :

Le programme, ci-dessous, détecte la présence de deux caractères consécutifs identiques dans une chaîne de caractères saisie par l’utilisateur.

Problème : Il provoque une erreur à l’exécution.

phrase=input("Saisir une phrase : ") taille = len(phrase) for place in range(taille) : if phrase[place] == phrase[place + 1] : print("Deux lettres", phrase[place], "se suivent !")

@9 A l’aide du mode debuggueur de ThonnyPython, trouver l’erreur provoquée par l’exécution de ce programme et proposer ue correction.

Solution :

L’erreur est index out of range.

Il faut effectuer un tour de boucle for en moins pour éviter de “tomber” en dehors de la chaine de caractères phrase, d’autant qu’il est inutile de comparer le dernier caractère de la chaine avec le vide se trouvant après lui.

On évite ainsi l’erreur index out of range.
On corrige cela avec range(taille - 1) à la place de range(taille).

@10 Concevoir un programme demandant une phrase saisie par l’utilisateur autant de fois que nécessaire, jusqu’à obtenir la chaîne Azerty. Le programme répondra alors, tout simplement Merci !.

Coup de pouce :
chaine = "Azerty" chaine2 = input("entrer un mot : ") while ... : print("veuillez recommencer") chaine2 = input("entrer un mot : ") print("Merci !")
Correction :

@11 Concevoir un programme permettant de jouer au nombre mystère. L’ordinateur choisit au hasard un nombre entier compris entre 0 et 99 et l’utilisateur tente de le retrouver en un minimum d’essais. L’ordinateur précisera à chaque essai soit “Trop grand !”, soit “Trop petit !”.

Coup de pouce :
import random # on présentera prochainement l'usage de import i = random.randint(0,99) print("Devine mon nombre compris entre 0 et 99 !!! ") a = 0 # nécessaire pour entrer une première fois dans le while while ... : a = ... if ...: print("mon nombre est plus petit que", a) else : print("mon nombre est plus grand que", a) print("Bravo, tu as réussi!")
Correction :

2 - Programmer à l’aide de fonctions

En informatique, les fonctions servent à mieux structurer un programme. Par exemple, elles permettent d’éviter de répéter plusieurs fois des portions de codes identiques. Ainsi, une fonction peut être vue comme un «petit» programme que l’on appelle régulièrement depuis le programme principal :

Par définition, une fonction :

Une fonction qui effectue des actions, mais ne renvoie pas de résultat est appelée une procédure. Certains langages différencient la manière de créer une procédure et celle permettant de créer une fonction. Le langage Python ne fait pas de différence dans la syntaxe entre fonction et procédure. Pour python, une procédure est juste une fonction comme une autre ;-)

3 - Les quatre types de fonctions de monsieur jourdin ;-)

Depuis l’an passé et surtout depuis ce début d’année, nous utilisons des fonctions régulièrement sans le savoir. Quatre types en particulier reviennent très souvent :

4 - Affichage

La fonction print() permet d’afficher les éléments mis entre parenthèses. Exemple :

print("Salut tout le monde !")

La fonctionprint() peut prendre plusieurs arguments séparés par une virgule ,. Cela permet ainsi d’afficher un mélange de textes et de valeurs de variables.

a=25 print("Cette année, Noël sera le", a, "décembre 2020 !")

Dans l’exemple précédent, à l’exécution, un espace ' ' ou " " est automatiquement ajouté entre chaque argument de la fonction print(). Ce comportement peut être modifié avec l’argument sep = [chaîne de caractères].

val = 3.14159 print("Mots", 'et', 'valeur', val, "à afficher.", sep="_")

La chaîne de caractères \n sert à passer à la ligne suivante lors de l’affichage. Ainsi, on peut, par exemple, placer les arguments affichés les uns en dessous des autres :

print("c'est ma première ligne \ncelle la la deuxième \net la troisième.")

@12 Créer un script (programme) qui affiche les 5 lignes de texte ci-dessous en n’utilisant qu’une seule fois \n dans la fonction print() :

Correction :

Mots
et
valeur
3.14159
à afficher.

A retenir :

5 - Saisie

La fonction input() permet d’obtenir une saisie depuis le clavier. Exemple :

annee = input("Quelle année sommes-nous ?") print(type(annee)) print("L'an 2050 est dans",2050-annee,"ans.")

@13 Avec le mode debuggueur de ThonnyPython, tester le code ci-dessus, puis, tester le code ci-dessous et expliquer l’affichage dans la console.

Réponse :

La fonction input() renvoie toujours une chaîne de caractères (son type est str) même si un nombre (entier ou réel) a été saisi.

Pour pouvoir utiliser le résultat de la saisie dans un calcul, il est nécessaire de changer son type à l’aide des fonctions int ou float qui permettent de transformer une chaîne de caractères respectivement en nombre entier ou nombre réel.

A retenir :

6 - Prédicat

Une fonction qui renvoie un booléen (True ou False) est aussi appelé un prédicat. Exemple :

a = 3 test = (a == 4) # A noter que les parenthèses sont inutiles !!! print(type(test)) print(test)

Donc, un prédicat est comme un nombre binaire, il ne peut avoir que deux états différents 1 (True) ou 0 (False) et est le résultat, dit booléen, que produit une fonction qui effectue un test comme ==ou <=

@14 Tester avec le mode debuggueur de ThonnyPython le code ci-dessus.

A retenir:
Les fonctions prédicat renvoient toujours un booléen (son type est bool) à savoir soit False soit True.

Une instruction conditionnelle if utilise donc toujours un prédicat pour déterminer les instructions suivantes à executer.

7 - Calculs mathématiques

Les quatre opérations de calcul mathématique élémentaires renvoient soit nombre entier ou nombre réel. Elles sont donc de type soit int() soit float(). Exemples :

calcul = 8 - 2 print(type(calcul)) # renvoie le type 'int' calcul = 8 / 2 print(type(calcul)) # renvoie le type 'float' calcul = 1.5 + 3 print(type(calcul)) # renvoie le type 'float'

A retenir:
Les fonctions mathématiques renvoient toujours soit un entier (int) soit un réel (float). Le type en sortie de la fonction dépend directement des types en entrées et de la fonction choisie.

8 - Les fonctions en général

A savoir :
En Python, une fonction est définie (être créée) en suivant toujours le même formalisme :

Voici visuellement la structure d’une fonction en Python :

def nomFonction(liste des arguments): bloc des instructions return résultat

Exemple :

def carree(a) : return a**2 # renvoie l'image de a par la fonction carree

La fonction carree() ainsi définie, n’effectue rien dans un programme si elle n’est pas appelée.

Tester les deux lignes de code précédentes complétées par les deux lignes suivantes :

resulat = carree(5) print(resulat)

Une fonction est utilisée comme une instruction quelconque. Un appel de fonction est constitué du nom de la fonction suivi des valeurs des paramètres d’entrée, entre parenthèses. Cet appel peut être fait :

>>>carree(3)
9
def carree(a): return a**2 # renvoie l'image de a par la fonction carree a = carree(3) # a stocke la valeur 9 b = a - carree(2) # b stocke la valeur 5

Commentaires :

Lorsqu’on définit la fonction carree(a), a est appelé un paramètre de la fonction.

Lorsqu’on appelle la fonction avec une valeur explicite pour a, comme dans carree(3), on dira plutôt que 3 est un argument de la fonction. Ainsi, en appelant la fonctioncarree() d’argument 3, on obtient 9.

On veut pouvoir convertir une durée en minutes en une spéficiant le nombre d’heures et le nombre de minutes. Pour cela, il suffit de créer une fonction.

@15 Définir une fonction convertir qui prend comme paramètre un entierduree_minute et renvoie un couple de valeurs nb_heures et nb_minutesséparées par une virgule.

Il peut vous être utile d’utiliser les deux opérateurs // et %.

Coup de pouce :
def convertir (...): nb_heures = duree_minute ... 60 nb_minutes = duree_minute ... 60 return ... , ... nombre = int(input('Choisis un entier : ')) print(convertir(nombre))
Correction :

@16 Créer une fonction somme_entiers(n) qui retourne la somme des n premiers entiers.

Coup de pouce :
def somme_entiers (nb): somme = ... for x in range(...) : ... return ... nombre = int(input('Choisis un entier : ')) print(somme_entiers(nombre))
Correction :

@17 Créer une fonction est_pair(nb) qui retourne True si nb est pair et False sinon.

Coup de pouce :
def est_pair (nb): reste = ... return reste == ... nombre = int(input('Choisis un entier : ')) print(est_pair(nombre))
Correction :

@18 Créer une fonction contient(elt, phrase) qui retourne True si elt est présent dans phrase et False sinon (sans utiliser la fonction native de Python in excepté pour la boucle for bien sûr).

Coup de pouce :
def contient(elt, phrase) :
    for carac in phrase :
        if ... :
            return ...
    return ...

print(contient("I", "La NSI c'est précis !"))
print(contient("I", "La Nsi c'est précis !"))
Solution :

@19 Créer une fonction occurences(elt, phrase) qui retourne le nombre d’occurences de elt dans phrase (sans utiliser la fonction native de Python count).

Coup de pouce :
def occurences(elt, phrase) :
    ...
    for carac in phrase :
        if ... :
            ...
    return nombre

print(occurences("i", "La NSI c'est précis !"))
print(occurences("i", "La Nsi c'est précis !"))
Solution :

Expert Créer une fonction dec2bin qui prend comme paramètre un entiernombre_decimal et renvoie une chaîne de caractère nombre_binaire.

Il peut vous être utile d’utiliser les deux opérateurs // et %.

Coup de pouce :
def dec2bin (...) : chaine = '' while nombre_decimal > 0 : reste = ... # reste de la division entière par deux nombre_decimal = ... # nombre devient le quotient de la division entière de lui-même par 2 chaine = ... # les bits sont insérés de gauche à droite return ... nombre = int(input('Choisis un entier positif : ')) print(dec2bin(nombre))
Correction :

Expert Créer une fonction bin2dec qui prend comme paramètre une chaîne de caractère nombre_binaire et renvoie un entier nombre_decimal.

Coup de pouce :
def bin2dec (...) : chaine = str(...) nombre_decimal = 0 for bit in ... : # on prend les bits un par un de gauche à droite nombre_decimal = ... # astuce pour éviter d'avoir une multiplication par 2 en trop nombre_decimal = ... + int(...) # on décompose l'action de multiplier par 2 et celle d'ajouter le nouveau bit return ... nombre = int(input('Choisis un nombre binaire : ')) print(bin2dec(nombre))
Correction :