Aller au contenu

TP⚓︎

Exercice 1 : Échauffement : tirage de pièce

On veut écrire un programme permettant de tirer à pile ou face.

  1. Recopier et executer le code suivant:

    from random import randint
    
    nombre = randint(1, 6)
    print(nombre)
    

    Au début du programme, la ligne from random import randint permet d'utiliser dans la suite la fonction randint(a, b), qui renvoie un nombre entier aléatoire compris entre a et b.

  2. Ecrire la fonction tirer_piece qui tire aléatoirement un nombre compris entre 0 et 1 et renvoie 'pile' si le nombre est 1, 'face' sinon.

    La tester avec plusieurs appels:

    print(tirer_piece())
    print(tirer_piece())
    print(tirer_piece())
    

Exercice 2 : Jeu de division

On souhaite écrire un petit programme d'entraînement mathématique demandant à l'utilisateur si un certain nombre à trois chiffres est divisible par un entier compris entre 2 et 9. Le programme doit poser des questions du type :

Le nombre 345 est-il divisible par 3 ? [o/n]

L'utilisateur doit ensuite taper o ou n, le programme vérifie sa réponse et affiche un message (Bravo ! ou Perdu ! par exemple).

  1. Créer un fonction valeurs_question qui n'a aucun paramètre et qui renvoie:

    • un nombre à trois chiffres au hasard (il sera le dividende)
    • un nombre au hasard compris entre 2 et 9 (il sera le diviseur)

    On utilisera pour cela la fonction randint, comme dans l'exercice précédent.

    Exemple:

    >>> valeurs_question()
    (100, 5)
    >>> valeurs_question()
    (121, 2)
    
  2. Créer un fonction reponse(dividende, diviseur) qui prend un paramètre deux entiers et qui renvoie True si diviseur divise dividende, False sinon.

    Exemple:

    >>> reponse(100, 5)
    True
    >>> reponse(100, 6)
    False
    
  3. Créer la fonction analyse(reponse, bonne_reponse) qui prend en paramètres deux entiers et qui renvoient:

    • Bravo si reponse est 'o' et que bonne_reponse est True ou que reponse est 'n' et que bonne_reponse est False .
    • Perdu dans les cas contraires.

    Exemple:

    >>> analyse('o', True)
    'Bravo'
    >>> reponse('o', False)
    'Perdu'
    
  4. Réaliser le programme qui réalisera les actions suivantes:

    • tirer un dividende et un diviseur au hasard
    • calculer la bonne reponse
    • demander sa réponse à l'utilisateur
    • analyser la réponse
    • afficher le message Bravo !, Perdu !

Exercice 3 : Rectangles

On souhaite réaliser un programme graphique qui permet à un utilisateur de dessiner deux rectangles (dont les bords sont parallèles au cadre de la fenêtre), et de déterminer si ces rectangles sont disjoints, inclus l'un dans l'autre ou se recouvrent partiellement.

rectangle

  1. Récupérer les fichiers rectangles.py et davistk.py et les placer dans votre répertoire de travail. Vous ne travaillerez que sur le fichier rectangles.py. L’autre fichier fournit la bibliothèque graphique davistk.py rectangles.py à l’aide de la ligne : from davistk import *

    Ouvrir le fichier rectangles.py dans votre éditeur, l'exécuter et cliquer plusieurs fois sur la fenêtre graphique qui s'ouvre, puis fermer la fenêtre.

  2. Dans la fenêtre graphique (contrairement à un repère cartésien habituel), le point de coordonnées \((0, 0)\) est tout en haut et à gauche, et le point de coordonnées \((599, 599)\) tout en bas à droite.

    Pour faciliter la suite du travail, modifier les variables x1 et y1 afin qu'elles représentent les coordonnées du coin en haut à gauche du rectangle bleu, et x2 et y2 afin qu'elles représentent les coordonnées du coin en bas à droite du rectangle bleu.

    Procéder de même pour le rectangle rouge et les variables x3, y3, x4 et y4.

  3. Écrire une expression booléenne permettant de déterminer si les deux rectangles sont (strictement) disjoints, c'est à dire n'ont aucun point en commun, et la tester dans l'interpréteur.

  4. Écrire une expression booléenne permettant de déterminer si le rectangle rouge est entièrement inclus dans le rectangle bleu, et la tester dans l'interpréteur.

  5. Écrire une expression booléenne permettant de déterminer si le rectangle bleu est entièrement inclus dans le rectangle rouge, et la tester dans l'interpréteur.

  6. Combiner l'ensemble afin d'afficher sur la fenêtre l'un des messages suivants :

    • Disjoints si les deux rectangles n'ont aucun point en commun ;
    • Recouvrement total si l'un des deux rectangles est entièrement inclus dans l'autre ;
    • Recouvrement partiel dans les autres cas.

    On utilisera la fonction texte, dont un exemple d'appel est donné dans le programme fourni.