Exercice 5
Écrire un programme en Python PyQt5 qui demande à l'utilisateur de saisir un entier n et de lui afficher factorielle n! Comme le montre la figure suivante:
Solution
Notez que vous devez installer PyQt5 pour exécuter ce code. Vous pouvez l'installer en utilisant la commande:
1 |
pip install pyqt5 |
- Nous allons utiliser la classe QWidget de PyQt5: pour créer une fenêtre principale (MainWindow).
- La fenêtre contiendra un QLabel: pour afficher les instructions, un champ de saisie (QLineEdit) pour que l'utilisateur entre un nombre entier, et un autre QLabel pour afficher le résultat du calcul.
- Lorsque l'utilisateur appuie sur la touche "Entrée": dans le champ de saisie, la fonction calculate_factorial est appelée. Elle essaie de convertir la saisie en un entier (int(self.input_field.text())), puis calcule la factorielle de ce nombre en utilisant la fonction récursive factorial.
- Le label result_label: affiche finalement le résultat.
- Si l'utilisateur entre une valeur non valide: (par exemple, une chaîne de caractères au lieu d'un entier), un message d'erreur sera affiché sur le label result_label.
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 |
import sys from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QVBoxLayout, QFrame def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) class MainWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle("Factorial Calculator") self.setGeometry(100, 100, 300, 150) # Set window dimensions (left, top, width, height) self.layout = QVBoxLayout() self.frame = QFrame() self.frame.setFrameStyle(QFrame.Panel | QFrame.Raised) self.label = QLabel("Enter an integer:") self.input_field = QLineEdit() self.input_field.returnPressed.connect(self.calculate_factorial) self.result_label = QLabel("Factorial will be shown here") self.layout.addWidget(self.frame) frame_layout = QVBoxLayout(self.frame) frame_layout.addWidget(self.label) frame_layout.addWidget(self.input_field) frame_layout.addWidget(self.result_label) self.layout.addStretch() # Add stretchable space at the bottom self.setLayout(self.layout) self.label.setStyleSheet("font-size: 16px") # Increase label font size self.input_field.setStyleSheet("font-size: 16px") # Increase input field font size self.result_label.setStyleSheet("font-size: 20px") # Increase result label font size def calculate_factorial(self): try: n = int(self.input_field.text()) result = factorial(n) self.result_label.setText(f"{n}! = {result}") except ValueError: self.result_label.setText("Invalid input. Please enter an integer.") if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) |
Younes Derfoufi
CRMEF OUJDA
1 thought on “Solution Exercice 5: Factorielle d'un entier sur une application PyQt5 Python”