Un joueur piégé dans une pièce fermée, dispose d’un paquet d’étiquettes de lettres alphabétiques distinctes. Pour sortir, il doit trouver le code secret d’ouverture de la porte qui est représenté par les couples de lettres alphabétiques ayant un écart minimal absolu entre leurs codes ASCII.
Dans ce contexte, on envisage de développer une application, enrichie par une interface graphique, qui simule la détermination de ce code secret selon le principe suivant :
- saisir un entier N (5≤N≤26),
- remplir un tableau T par N lettres alphabétiques majuscules distinctes générées aléatoirement,
- déterminer l’écart minimal absolu entre les codes ASCII des différents couples de lettres (T[ i ], T[ j ]) avec i < j, - déterminer la clé formée par la concaténation des lettres alphabétiques de chaque couple ayant cet écart minimal. Exemple :
Pour le tableau T suivant contenant 5 lettres alphabétiques majuscules distinctes :
![]()
Les couples sont : (A,R) ; (A,H) ; (A,F) ; (A,P) ; (R,H) ; (R,F) ; (R,P) ; (H,F) ; (H,P) ; (F,P)
Le tableau suivant présente l’ensemble des couples de lettres ainsi que l’écart absolu entre leurs codes ASCII respective : 
- L’écart minimal absolu est égale à 2.
- Le code secret est RP-HF
Travail demandé
1. Créer l’interface graphique illustrée dans la figure Fig-1 suivante et l’enregistrer sous le nom InterfaceCode.

2. Créer un programme en python et l’enregistrer sous le nom CodeSecret, dans lequel on demande :
a. D’implémenter l’algorithme suivant de la procédure Remplir qui permet de remplir un tableau T par N lettres alphabétiques majuscules distinctes, générées aléatoirement.

b. D’écrire une fonction booléenne Existe (T, K, C) qui permet de vérifier l’existence d’un caractère C dans un tableau T contenant K caractères.
c. D’écrire une fonction EcartMin (T, N) qui retourne la valeur absolue de l’écart minimal entre les codes ASCII des couples de lettres du tableau T.
d. D’écrire une fonction Couple (T, N) qui détermine une chaîne de caractères formée par la concaténation des lettres des couples du tableau T, ayant un écart minimal séparés, par le symbole "-". Cette fonction doit exploiter la fonction EcartMin.
e. D’écrire un module Play, qui s’exécute suite au clic sur le bouton "Chercher", permettant :
- de récupérer la valeur du nombre N saisi, de s’assurer de sa validité comme décrit précédemment et d’afficher, le cas échéant, le message adéquat via le label dédié à l’affichage, comme illustré dans les figures Fig-2 et Fig-3,
- d’exploiter les modules Remplir et Couple afin d’afficher le message adéquat via le label dédié à l’affichage, comme illustré dans la figure Fig-4.
f. D’exploiter l’annexe présentée ci-après tout en apportant les modifications nécessaires à l’intégration de l’interface graphique InterfaceCode.

Pour créer une application en Python et Designer QT afin de concevoir une application, enrichie par une interface graphique, qui simule l’attribution d’adresses IP aux machines d’un réseau local par un serveur DHCP et vérifie si deux machines d’adresses données IP1 et IP2 font partie de ce réseau local, on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLabel nommé 'affichage' pour afficher les messages générés par le programme
QLineEdit nommé 'n' pour entrer l'entier n.
QPushButton nommé 'chercher_bt' pour exécuter le module Play()

Enregistrez le fichier avec l'extension .ui, par exemple InterfaceCode.ui.
Voici un exemple de script Python qui utilise l'interface graphique générée par Qt Designer.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# ========================================================= # IMPORTATION DES BIBLIOTHÈQUES # ========================================================= # Permet de charger une interface graphique créée avec Qt Designer from PyQt5.uic import loadUi # Permet de créer et gérer l’application PyQt5 from PyQt5.QtWidgets import QApplication # Bibliothèque utilisée pour manipuler les tableaux (array) from numpy import * # Bibliothèque utilisée pour générer des nombres aléatoires import random # ========================================================= # CRÉATION DU TABLEAU POUR STOCKER LES LETTRES # ========================================================= # Tableau de 26 éléments destiné à stocker des lettres majuscules t = array([str] * 26) # ========================================================= # CRÉATION DE L’APPLICATION PYQT5 # ========================================================= # Création de l’application PyQt5 app = QApplication([]) # Chargement de l’interface graphique créée avec Qt Designer windows = loadUi("InterfaceCode.ui") # ========================================================= # FONCTION : VÉRIFIER SI UNE LETTRE EXISTE DÉJÀ # ========================================================= def existe(t, k, c): # Initialisation de l’indice i = 0 # Recherche de la lettre dans le tableau while t[i] != c and i < k - 1: i = i + 1 # Retourne True si la lettre n’existe pas return t[i] != c # ========================================================= # PROCÉDURE : REMPLIR LE TABLEAU AVEC DES LETTRES UNIQUES # ========================================================= def remplir(t, n): # Génération de la première lettre aléatoire t[0] = chr(65 + random.randint(0,25)) # Génération des autres lettres for i in range(1, n): # Génération d’une lettre majuscule aléatoire t[i] = chr(65 + random.randint(0,25)) # Vérifier que la lettre n’existe pas déjà while existe(t, i - 1, t[i]) == False: # Génération d’une nouvelle lettre t[i] = chr(65 + random.randint(0,25)) # ========================================================= # FONCTION : CALCULER L’ÉCART MINIMAL ENTRE LES LETTRES # ========================================================= def ecartmin(t, n): # Initialisation de l’écart minimal min = abs(ord(t[0]) - ord(t[1])) # Parcours du tableau pour comparer toutes les lettres for i in range(n - 1): for j in range(i + 1, n): # Mise à jour du minimum si un écart plus petit est trouvé if min > abs(ord(t[i]) - ord(t[j])): min = abs(ord(t[i]) - ord(t[j])) # Retourner l’écart minimal return min # ========================================================= # FONCTION : RECHERCHER LES COUPLES AYANT L’ÉCART MINIMAL # ========================================================= def couple(t, n): # Calcul de l’écart minimal min = ecartmin(t, n) # Chaîne qui contiendra les couples trouvés liste = '' # Parcours des couples de lettres for i in range(n - 1): for j in range(i + 1, n): # Vérifier si le couple possède l’écart minimal if min == abs(ord(t[i]) - ord(t[j])): # Ajouter le couple à la liste liste = liste + t[i] + t[i + 1] + '-' # Retourner la liste sans le dernier tiret return liste[0:len(liste) - 1] # ========================================================= # FONCTION PRINCIPALE EXÉCUTÉE LORS DU CLIC SUR LE BOUTON # ========================================================= def play(): # Effacer l’ancien résultat affiché windows.affichage.clear() # Vérifier que l’utilisateur a saisi une valeur pour n if windows.n.text() != '': # Conversion de n en entier n = int(windows.n.text()) # Vérifier que n est compris entre 5 et 50 if (5 <= n <= 50): # Remplissage du tableau avec des lettres aléatoires remplir(t, n) # Affichage du code secret windows.affichage.setText( 'Le code secret est ' + couple(t, n) ) else: # Message d’erreur si n est hors intervalle windows.affichage.setText("n doit être entre 5 et 50") else: # Message d’erreur si aucun nombre n’est saisi windows.affichage.setText("Veuillez saisir un nombre !") # ========================================================= # AFFICHAGE ET EXÉCUTION DE L’APPLICATION # ========================================================= # Affichage de la fenêtre principale windows.show() # Connexion du bouton "chercher" à la fonction play() windows.chercher_bt.clicked.connect(play) # Lancement de la boucle principale de l’application app.exec_() |
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
Site robotique réalisé par Mohamed Ali Haj Salah - Prof Info