Consignes

Si certains exercices n'ont pas pu être terminés dans le cadre de cette séance, il est fortement conseillé de les terminer par vous-même chez vous ou en salle libre service.

N'oubliez pas de sauvegarder vos fonctions dans un fichier appelé info113_tp2.py : une fois que l'interpréteur est lancé, il faut utiliser la commande New File du menu File

Liens utiles

Objectifs du TP

Le but de ce TP est d'approfondir votre maitrise des :

et de commencer à découvrir les boucles « for ».

Conditionnelles

Échauffement

Écrivez la fonction est_OK qui teste si une chaine est OK, mais sans prendre en compte les majuscules :

>>> est_OK("OK")
True
>>> est_OK("oK")
True
>>> est_OK("ok")
True
>>> est_OK("KO")
False
>>> est_OK("")
False
>>> est_OK("okapi")
False

Écrivez la fonction est_Python qui teste si une chaine est Python, mais sans prendre en compte les majuscules :

>>> est_Python("python")
True
>>> est_Python("PyThOn")
True
>>> est_Python("P")
False
>>> est_Python("python-3.4")
False

Conditions et tests

Programmez, en utilisant un if ...: elif: ... else: ... la fonction est_bissextile du TD2.

Rappel : une année est bissextile si

Testez (et mettez les valeurs correspondantes dans un commentaire) votre fonction en choisissant des valeurs qui utilisent tous les cas possibles.

Écrivez une fonction nb_jours qui prend deux arguments :

et qui renvoie le nombre de jours dans le mois correspondant.

Par exemple

  >>> nb_jours(2015,9)
  30
  >>> nb_jours(2000,2)
  28

Compter les points à la belote

Écrivez une fonction qui renvoie le nombre de points d'une carte à la belote.

Votre fonction devra prendre 3 arguments

Rappel : le nombre de points rapportés par les cartes à la belote sont

carte atout standard
as (1) 11 11
7 0 0
8 0 0
9 14 0
10 10 10
valet (11) 20 2
dame (12) 3 3
roi (13) 4 4

Fournissez (en commentaire) l'ensemble des tests effectués.

Les boucles « for »

Syntaxe d'une boucle « for »

Une boucle for en Python s'écrit :

    for i in range(debut, stop):
        ...
        ...

où :

Par exemple, pour

    for i in range(4, 10):
        ...

la variable i prendra successivement les valeurs 4, 5, 6, 7, 8 et 9.

Afficher des informations lors de l'exécution : instruction « print »

L'instruction print de Python permet d'afficher des informations à l'écran. Par exemple : print(x) affichera la valeur de la variable x, et print("la variable x vaut", x) affichera

la variable x vaut 17

(à condition bien sûr que la variable x ait effectivement la valeur 17).

Tapez les lignes suivantes dans l'interpréteur :

>>> for i in range(1, 10):
        print("la variable de boucle 'i' vaut", i)

???

Remarque : comme l'instruction de boucle tient sur plusieurs lignes, l'interpréteur attend de voir une ligne blanche avant d'évaluer le bloc de code.

Recommencez en changeant le i du print par:

et essayez de deviner à chaque fois ce que l'interpréteur affichera.

Boucles « for » et nombres

Écrivez, en utilisant une boucle for, une fonction compte_triangle avec un paramètre entier n qui compte le nombre d'étoiles dans un triangle de n lignes comme celui ci :

*
**
***
****
*****

Ce triangle contient 5 lignes et 15 étoiles au total. On aura donc

>>> compte_triangle(5)
15

Remarque : comme la ligne i contient exactement i étoiles, il s'agit en fait de la fonction qui calcule la somme des n premiers nombres entiers. Ces nombres sont appelés nombres triangulaires !

Ajoutez une ligne dans la fonction compte_triangle de la question précédente pour afficher les informations suivantes :

>>> compte_triangle(7)
ligne 1: il y a déjà eu 1 étoiles
ligne 2: il y a déjà eu 3 étoiles
ligne 3: il y a déjà eu 6 étoiles
ligne 4: il y a déjà eu 10 étoiles
ligne 5: il y a déjà eu 15 étoiles
ligne 6: il y a déjà eu 21 étoiles
ligne 7: il y a déjà eu 28 étoiles
28

Dans le calcul précédent, il faut bien distinguer les lignes contenant les informations affichées par le print et le résultat de la fonction, affiché par l'interpréteur (ici, le nombre 28). Les informations seront toujours affichées, même lorsqu'on utilise une variable pour stocker le résultat de la fonction.

Évaluez les expressions suivantes en essayant de deviner à l'avance ce qui se passera.

>>> x = compte_triangle(5)
???
>>> y = compte_triangle(6)
???
>>> x
???
>>> y
???
>>> compte_triangle(3) + compte_triangle(4)
???

Programmez, une fonction somme7 à un argument entier n qui calcule la somme des n premiers multiples de 7.

Attention, vous ne devez pas utiliser le pas (troisième argument du range.)

Par exemple :

>>> somme7(4)
70
>>> somme7(5)
105

car 7 + 14 + 21 + 28 = 70 et 7 + 14 + 21 + 28 + 35 = 105.

Parcourir une chaine de caractères

Écrivez une fonction compte_espaces avec un argument s de type chaine de caractères qui renvoie le nombre de caractères « espace » contenus dans la chaine s. Par exemple :

>>> compte_espaces("Salut, je m'appelle Bob !")
4

Ajouter une ligne pour afficher le nombre d'espaces à chaque fois que la fonction en trouve un :

>>> compte_espaces("Salut, je m'appelle Bob !")
le caractère 6 est un espace : il y en a 1
le caractère 9 est un espace : il y en a 2
le caractère 19 est un espace : il y en a 3
le caractère 23 est un espace : il y en a 4
4

Lorsque cela fonctionne, commentez la ligne correspondante pour supprimer l'affichage des informations.

Écrivez un fonction compte_car_doubles à un argument s de type chaine de caractères qui compte le nombre de symboles doublés dans s. Par exemple,

>>> compte_car_doubles("ce mouton carnassier a une grosse tete")
???

car il y a deux lettres doublées : ce mouton carnassier a une grosse tete.

Essayez de deviner le résultat de votre fonction sur la chaine "Chut... Le bébé rhinocéros fait la sieste." et vérifiez le résultat.