Nom Prénom: Maryame Mouine
Master: IICIA 2024 - 2026
Devoir : Création et Manipulation d'une Classe Vecteur Héritée de list
Objectifs :
1. Comprendre et manipuler l'héritage en Python.
2. Savoir étendre les fonctionnalités d'une classe existante.
3. Appliquer des opérations mathématiques sur des objets personnalisés.
Consignes :
Vous devez créer une classe nommée Vecteur, héritant de la classe list en Python, et implémenter
plusieurs méthodes spécifiques pour manipuler les objets de cette classe comme des vecteurs
mathématiques
Travail à Réaliser :
# Bonjour, je suis Maryame Mouine et ci-dessou le programme Python du devoir.
# Bonne exécution
import math
# Définition de la classe Vecteur
class Vecteur(list):
#------------------------------------------------------------------------------------------------------------------------------
# Addition de vecteurs (surcharge de l'opérateur +)
def __add__(self, other):
if len(self) != len(other):
raise ValueError("Les vecteurs doivent avoir la même dimension pour l'addition.")
return Vecteur([a + b for a, b in zip(self, other)])
#------------------------------------------------------------------------------------------------------------------------------
# Multiplication par un scalaire (surcharge de l'opérateur *)
def __mul__(self, scalar):
return Vecteur([x * scalar for x in self])
#------------------------------------------------------------------------------------------------------------------------------
# Produit scalaire
def dot(self, other):
if len(self) != len(other):
raise ValueError("Les vecteurs doivent avoir la même dimension pour le produit scalaire.")
return Vecteur(a * b for a, b in zip(self, other))
#------------------------------------------------------------------------------------------------------------------------------
# Norme du vecteur
def norm(self):
return math.sqrt(sum(x**2 for x in self))
#------------------------------------------------------------------------------------------------------------------------------
# Représentation lisible
def __repr__(self):
return f"Vecteur({super().__repr__()})"
#------------------------------------------------------------------------------------------------------------------------------
# Fonction pour demander la saisie de vecteurs
def demander_vecteur(num):
while True:
try:
vecteur = input(f"Saisir les éléments du vecteur {num} (séparés par des espaces) : ")
vecteur_list = list(map(int, vecteur.split()))
return Vecteur(vecteur_list)
except ValueError:
print("Veuillez saisir des nombres entiers valides séparés par des espaces.")
#------------------------------------------------------------------------------------------------------------------------------
# Jeu d'instruction utilisateur
# 1. Demander les deux vecteurs
v1 = demander_vecteur(1)
v2 = demander_vecteur(2)
#------------------------------------------------------------------------------------------------------------------------------
# 2. Affichage des vecteurs
print("Vecteur 1 :", v1)
print("Vecteur 2 :", v2)
#------------------------------------------------------------------------------------------------------------------------------
# 3. Vérification de la longueur des vecteurs
if len(v1) != len(v2):
print("Erreur : Les vecteurs n'ont pas la même longueur.")
else:
#------------------------------------------------------------------------------------------------------------------------------
# 4. Test d'addition de vecteurs
v3 = v1 + v2
print("Addition de vecteurs :", v3)
#------------------------------------------------------------------------------------------------------------------------------
# 5. Produit scalaire
dot_product = v1.dot(v2)
print("Produit scalaire :", dot_product)
#------------------------------------------------------------------------------------------------------------------------------
# 6. Norme des vecteurs
norm_v1 = v1.norm()
norm_v2 = v2.norm()
print("Norme de v1 :", norm_v1)
print("Norme de v2 :", norm_v2)
#------------------------------------------------------------------------------------------------------------------------------
# 7. Demander à l'utilisateur de saisir un scalaire
scalar = float(input("Saisir un scalaire pour la multiplication : "))
v4 = v1 * scalar
# Multiplication par un scalaire (surcharge de l'opérateur *)
print(" La multiplication par scalaire saisie est:", v4)
# C'est la fin du programme! Bonne journée
Explications :
1. Héritage de list : La classe Vecteur hérite de la classe Python list pour bénéficier de ses
fonctionnalités de base tout en y ajoutant des méthodes spécifiques.
2. Méthodes spéciales (__add__, __mul__, __repr__) : Ces méthodes permettent de redéfinir le
comportement des opérateurs +, * et d'assurer une représentation lisible.
3. Vérifications : Les dimensions des vecteurs sont vérifiées avant toute opération mathématique
pour éviter des erreurs logiques.
4. Gestion des exceptions : Les erreurs comme l'incompatibilité des dimensions ou l'utilisation
d'un type invalide (par exemple, multiplication avec une chaîne de caractères) déclenchent des
exceptions explicites.
Exemple d’exécution:
Saisir les éléments du vecteur 1 (séparés par des espaces) : 1 2 3
Saisir les éléments du vecteur 2 (séparés par des espaces) : 2 3 4
Vecteur 1 : Vecteur([1, 2, 3])
Vecteur 2 : Vecteur([2, 3, 4])
Addition de vecteurs : Vecteur([3, 5, 7])
Produit scalaire : Vecteur([2, 6, 12])
Norme de v1 : 3.7416573867739413
Norme de v2 : 5.385164807134504
Saisir un scalaire pour la multiplication : 4
La multiplication par scalaire saisie est: Vecteur([4.0, 8.0, 12.0])