Exercice 6
Créer un programme en Python basé sur la bibliothèque PyQt5 qui affiche à l'utilisateur une fenêtre PyQt lui demandant de saisir les valeurs de deux entiers m et n et d'afficher sur un QLabel si les deux entiers saisis sont premier entre eux ou non de deux façons différentes:
- La première: en utilisant la fonction gcd()
- La deuxième: sans utiliser la fonction gcd()
Comme le montre la figure suivante:
Solution
1ère méthode: En utilisant la fonction gcd()
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 |
import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit, QPushButton from math import gcd class PremierEntreEuxChecker(QWidget): def __init__(self): super().__init__() # Initialiser l'interface utilisateur self.init_ui() def init_ui(self): # Créer les widgets self.label_m = QLabel('Entier m:') self.edit_m = QLineEdit() self.edit_m.setStyleSheet("font-weight: bold; font-size: 14px;") self.label_n = QLabel('Entier n:') self.edit_n = QLineEdit() self.edit_n.setStyleSheet("font-weight: bold; font-size: 14px;") self.result_label = QLabel('Résultat:') self.result_label.setStyleSheet("font-weight: bold; font-size: 14px;") self.check_button = QPushButton('Vérifier') # Connecter le clic du bouton à la fonction de vérification self.check_button.clicked.connect(self.check_primalite) # Créer la mise en page layout = QVBoxLayout() layout.addWidget(self.label_m) layout.addWidget(self.edit_m) layout.addWidget(self.label_n) layout.addWidget(self.edit_n) layout.addWidget(self.check_button) layout.addWidget(self.result_label) # Définir la mise en page principale du widget self.setLayout(layout) # Configurer la fenêtre self.setWindowTitle('Vérificateur de primalité') self.setGeometry(300, 300, 300, 200) def check_primalite(self): # Récupérer les valeurs saisies par l'utilisateur m_str = self.edit_m.text() n_str = self.edit_n.text() try: # Convertir les chaînes en entiers m = int(m_str) n = int(n_str) # Vérifier si les entiers sont premiers entre eux en utilisant la fonction gcd de la bibliothèque math if gcd(m, n) == 1: result_text = f'{m} et {n} premiers entre eux.' else: result_text = f'{m} et {n} ne sont pas premiers entre eux.' except ValueError: result_text = 'Veuillez saisir des entiers valides.' # Afficher le résultat sur le QLabel self.result_label.setText('Résultat: ' + result_text) if __name__ == '__main__': # Initialiser l'application PyQt app = QApplication(sys.argv) # Créer une instance de la classe du vérificateur de primalité window = PremierEntreEuxChecker() # Afficher la fenêtre window.show() # Lancer l'application sys.exit(app.exec_()) |
2ème méthode: Sans utiliser la fonction gcd()
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 |
import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit, QPushButton from math import sqrt class PremierEntreEuxChecker(QWidget): def __init__(self): super().__init__() # Initialiser l'interface utilisateur self.init_ui() def init_ui(self): # Créer les widgets self.label_m = QLabel('Entier m:') self.edit_m = QLineEdit() self.edit_m.setStyleSheet("font-weight: bold; font-size: 14px;") self.label_n = QLabel('Entier n:') self.edit_n = QLineEdit() self.edit_n.setStyleSheet("font-weight: bold; font-size: 14px;") self.result_label = QLabel('Résultat:') self.result_label.setStyleSheet("font-weight: bold; font-size: 14px;") self.check_button = QPushButton('Vérifier') # Connecter le clic du bouton à la fonction de vérification self.check_button.clicked.connect(self.check_primalite) # Créer la mise en page layout = QVBoxLayout() layout.addWidget(self.label_m) layout.addWidget(self.edit_m) layout.addWidget(self.label_n) layout.addWidget(self.edit_n) layout.addWidget(self.check_button) layout.addWidget(self.result_label) # Définir la mise en page principale du widget self.setLayout(layout) # Configurer la fenêtre self.setWindowTitle('Vérificateur de primalité') self.setGeometry(300, 300, 300, 200) def pgcd(self, a, b): # Calculer le PGCD de deux entiers (algorithme d'Euclide) while b: a, b = b, a % b return a def check_primalite(self): # Récupérer les valeurs saisies par l'utilisateur m_str = self.edit_m.text() n_str = self.edit_n.text() try: # Convertir les chaînes en entiers m = int(m_str) n = int(n_str) # Vérifier si les entiers sont premiers entre eux en utilisant le PGCD if self.pgcd(m, n) == 1: result_text = f'{m} et {n} sont premiers entre eux.' else: result_text = f'{m} et {n} ne sont pas premiers entre eux.' except ValueError: result_text = 'Veuillez saisir des entiers valides.' # Afficher le résultat sur le QLabel self.result_label.setText('Résultat: ' + result_text) if __name__ == '__main__': # Initialiser l'application PyQt app = QApplication(sys.argv) # Créer une instance de la classe du vérificateur de primalité window = PremierEntreEuxChecker() # Afficher la fenêtre window.show() # Lancer l'application sys.exit(app.exec_()) |
Younes Derfoufi
CRMEF OUJDA