Archives dans 2022

Surcharge d’opérateur Python

La surcharge d’opérateur est un concept de la programmation orientée objet qui permet de redéfinir le comportement des opérateurs pour une classe donnée. Cela permet de définir comment les objets de la classe doivent être comparés, additionnés, etc. en utilisant les opérateurs habituels tels que

==

,

+

,

*

, etc.

Voici un exemple simple de surcharge d’opérateur en Python:

 

class Vector:
  def __init__(self, x, y):
    self.x = x
    self.y = y

  def __add__(self, other):
    return Vector(self.x + other.x, self.y + other.y)

  def __mul__(self, other):
    return Vector(self.x * other, self.y * other)

  def __str__(self):
    return "Vector ({}, {})".format(self.x, self.y)

# Créer deux objets de la classe Vector
v1 = Vector(1, 2)
v2 = Vector(3, 4)

# Additionner les deux objets
v3 = v1 + v2
print(v3)  # Output: "Vector (4, 6)"

# Multiplier un objet par un scalaire
v4 = v3 * 2
print(v4)  # Output: "Vector (8, 12)"

# Comparer les deux objets
print(v3 == v4)  # Output: False

 

Héritage multiple Python

L’héritage multiple est un concept de la programmation orientée objet qui permet à une classe de dériver de plusieurs classes en même temps. Cela signifie qu’une classe peut hériter des propriétés et méthodes de plusieurs classes parentes et les utiliser dans sa propre définition.

Voici un exemple simple d’héritage multiple en Python:

 

class Animal:
  def __init__(self, name, species):
    self.name = name
    self.species = species

  def make_sound(self):
    print("Some generic animal sound")

class Swimming:
  def __init__(self, swim_speed):
    self.swim_speed = swim_speed

  def swim(self):
    print(f"Swimming at speed {self.swim_speed}")

class Fish(Animal, Swimming):
  def __init__(self, name, swim_speed):
    super().__init__(name, species="Fish")
    Swimming.__init__(self, swim_speed)

# Créer un objet de la classe Fish
fish1 = Fish("Nemo", "fast")

# Accéder aux propriétés de l'objet
print(fish1.name)  # Output: "Nemo"
print(fish1.species) # Output: "Fish"
print(fish1.swim_speed)  # Output: "fast"

# Appeler les méthodes de l'objet
fish1.make_sound()  # Output: "Some generic animal sound"
fish1.swim()  # Output: "Swimming at speed fast"

Dans cet exemple, la classe

Fish

hérite de la classe

Animal

et de la classe

Swimming

. Elle utilise le mot-clé

class

suivi du nom de la classe et des parenthèses pour déclarer la classe

Fish

. Dans les parenthèses, nous spécifions le nom des classes parentes, qui sont

Animal

et

Swimming

. La classe

Fish

hérite automatiquement toutes les propriétés et méthodes de la classe

Animal

et de la classe

Swimming

.

La classe

Fish

définit également sa propre méthode

__init__

, qui appelle les méthodes

__init__

de la classe

Animal

et de la classe

Swimming

en utilisant la fonction

super()

et en appelant la méthode directement. Cela permet de définir la propriété

species

de l’objet comme étant “Fish” et la propriété

swim_speed

en fonction de l’argument passé au constructeur.

Lorsque nous créons un objet de la classe

Fish

avec

fish1 = Fish("Nemo", "fast")

, nous pouvons accéder aux propriétés

name

,

species

et

swim_speed

de l’objet3.

Héritage Python

L’héritage est un concept de la programmation orientée objet qui permet à une classe de dériver de (ou d’hériter de) une autre classe. Lorsqu’une classe hérite d’une autre classe, elle peut utiliser toutes les propriétés et méthodes de la classe parente, ainsi que définir de nouvelles propriétés et méthodes ou redéfinir celles héritées.

Voici un exemple simple d’héritage en Python:

 

class Animal:
  def __init__(self, name, species):
    self.name = name
    self.species = species

  def make_sound(self):
    print("Some generic animal sound")

class Dog(Animal):
  def __init__(self, name, breed):
    super().__init__(name, species="Dog")
    self.breed = breed

  def make_sound(self):
    print("Woof!")

# Créer un objet de la classe Dog
dog1 = Dog("Fido", "Labrador")

# Accéder aux propriétés de l'objet
print(dog1.name)  # Output: "Fido"
print(dog1.species) # Output: "Dog"
print(dog1.breed)  # Output: "Labrador"

# Appeler les méthodes de l'objet
dog1.make_sound()  # Output: "Woof!"

Dans cet exemple, la classe

Dog

hérite de la classe

Animal

. Elle utilise le mot-clé

class

suivi du nom de la classe et des parenthèses pour déclarer la classe

Dog

. Dans les parenthèses, nous spécifions le nom de la classe parente, qui est

Animal

. La classe

Dog

hérite automatiquement toutes les propriétés et méthodes de la classe

Animal

.

La classe

Dog

définit également sa propre méthode

__init__

, qui appelle la méthode

__init__

de la classe parente en utilisant la fonction

super()

. Cela permet de définir la propriété

species

de l’objet comme étant “Dog”. La classe

Dog

définit également la propriété

breed

et redéfinit la méthode

make_sound

, qui imprime “Woof!” au lieu du message générique défini dans la classe parente.

Lorsque nous créons un objet de la classe

Dog

avec

dog1 = Dog("Fido", "Labrador")

, nous pouvons accéder aux propriétés

name

,

species

et

breed

de l’objet et appeler la méthode

make_sound

. La méthode

make_sound

de l’objet

dog1

est la méthode redéfinie de la classe

Dog

, qui imprime

Objet et classe Python

En Python, une classe est un modèle pour créer des objets. Elle définit les propriétés et les comportements que les objets créés à partir de cette classe auront. Un objet est une instance de la classe, c’est-à-dire un objet concret créé à partir de la classe.

Dans cet exemple, la classe Dog définit les propriétés name et breed, ainsi que la méthode bark. La méthode __init__ est un constructeur qui initialise les propriétés de l’objet lorsqu’il est créé. La méthode bark imprime simplement “Woof!” sur la sortie standard.

Pour créer un objet de la classe Dog, nous utilisons le mot-clé class suivi du nom de la classe et des parenthèses. Nous passons les arguments

"Fido"

et

"Labrador"

au constructeur lors de la création de l’objet. Nous pouvons ensuite accéder aux propriétés de l’objet en utilisant la syntaxe

objet.propriété

et appeler les méthodes de l’objet en utilisant la syntaxe

objet.méthode()

.

Dans l’exemple ci-dessus, l’objet dog1 a les propriétés name et breed et la méthode bark. Nous pouvons créer d’autres objets de la classe Dog en utilisant la même syntaxe et en passant différents arguments au constructeur. Chaque objet créé sera une instance unique de la classe Dog avec ses propres propriétés et comportements.

Voici un exemple simple de classe en Python:

 

class Dog:
  def __init__(self, name, breed):
    self.name = name
    self.breed = breed

  def bark(self):
    print("Woof!")

# Créer un objet de la classe Dog
dog1 = Dog("Fido", "Labrador")

# Accéder aux propriétés de l'objet
print(dog1.name)  # Output: "Fido"
print(dog1.breed) # Output: "Labrador"

# Appeler une méthode de l'objet
dog1.bark()  # Output: "Woof!"

 

Programme Python pour obtenir le dernier élément de la liste

Voici comment vous pouvez écrire un programme en Python pour obtenir le dernier élément de la liste my_list:

 

def get_last(my_list):
  # Obtenir le dernier élément de la liste
  last = my_list[-1]
  return last

# Test the function
print(get_last([1, 2, 3]))  # Output: 3
print(get_last([]))         # Output: IndexError
print(get_last([1]))        # Output: 1

La fonction get_last prend un argument: my_list, qui est la liste dont vous voulez obtenir le dernier élément. Elle utilise l’indexation en négatif pour obtenir le dernier élément de la liste et affecte la valeur à la variable last. Enfin, la fonction renvoie la valeur de last.

Les trois tests à la fin de l’exemple vérifient que la fonction fonctionne correctement pour différentes valeurs de my_list. Le premier appel de la fonction avec [1, 2, 3]  en tant qu’argument devrait renvoyer 3 , qui est le dernier élément de la liste. Le deuxième appel de la fonction avec une liste vide en tant qu’argument devrait générer une exception IndexError, car il n’y a pas d’élément à retourner. Le troisième appel de la fonction avec [1] en tant qu’argument devrait renvoyer  1, qui est le seul élément de la liste.

Programme Python pour concaténer deux listes

Voici comment vous pouvez écrire un programme en Python pour concaténer deux listes list1 et list2:

La fonction concatenate prend deux arguments:  list1 et list2, qui sont les listes à concaténer. Elle utilise l’opérateur  + pour concaténer les deux listes et affecte le résultat à la variable result. Enfin, la fonction renvoie la valeur de result.

Les trois tests à la fin de l’exemple vérifient que la fonction fonctionne correctement pour différentes valeurs de list1 et list2. Le premier appel de la fonction avec  ( [1, 2, 3], [4, 5, 6])  en tant qu’arguments devrait renvoyer ([1, 2, 3, 4, 5, 6]), qui est la concaténation des deux listes. Les deux autres appels de la fonction devraient renvoyer  [1, 2, 3] et [1, 2, 3], respectivement, car ils concatènent une liste vide avec une liste non vide.

def concatenate(list1, list2):
  # Concaténer les deux listes
  result = list1 + list2
  return result

# Test the function
print(concatenate([1, 2, 3], [4, 5, 6]))  # Output: [1, 2, 3, 4, 5, 6]
print(concatenate([], [1, 2, 3]))         # Output: [1, 2, 3]
print(concatenate([1, 2, 3], []))         # Output: [1, 2, 3]

 

Programme Python pour trouver le plus grand parmi trois nombres

Voici comment vous pouvez écrire un programme en Python pour trouver le plus grand parmi trois nombres a, b et c:

La fonction  find_largest prend trois arguments: a, b et c , qui sont les nombres  largest . Enfin, la fonction renvoie la valeur de largest.

Les trois tests à la fin de l’exemple vérifient que la fonction fonctionne correctement pour différentes valeurs de a, b et c. Le premier appel de la fonction avec  ( 1, 2 ,3) en tant qu’arguments devrait renvoyer  3 , car c’est le plus grand nombre. Les deux autres appels de la fonction devraient également renvoyer , car c’est le plus grand nombre dans chaque cas.

 

def find_largest(a, b, c):
  # Trouver le plus grand nombre
  if a > b and a > c:
    largest = a
  elif b > c:
    largest = b
  else:
    largest = c
  return largest

# Test the function
print(find_largest(1, 2, 3))  # Output: 3
print(find_largest(3, 2, 1))  # Output: 3
print(find_largest(2, 3, 1))  # Output: 3

 

Programme Python pour échanger deux variables

Voici comment vous pouvez écrire un programme en Python pour échanger deux variables a et b:

 

def swap(a, b):
  # Echanger les valeurs de a et b
  a, b = b, a
  return a, b

# Test the function
x = 1
y = 2
print(swap(x, y))  # Output: (2, 1)

La fonction swap prend deux arguments: a et b, qui sont les variables à échanger. Elle utilise l’opération d’assignation en chaîne pour échanger leurs valeurs. Cette opération permet de déclarer plusieurs variables en même temps et de leur affecter des valeurs en une seule ligne de code. Dans cet exemple, a et b  sont déclarées en même temps et leur nouvelle valeur est affectée en utilisant leurs valeurs précédentes. La fonction renvoie les nouvelles valeurs de a et b sous forme de tuple.

Le code de test à la fin de l’exemple définit les variables  x et y , puis appelle la fonction swap avec et y comme arguments. Le résultat de l’appel de la fonction est imprimé, ce qui devrait afficher (2, 1)  sur la sortie standard.

Programme Python pour résoudre une équation quadratique

Voici comment écrire un programme Python pour résoudre une équation du second degré de la forme “ax^2 + bx + c = 0”:

 

import math

def solve_quadratic(a, b, c):
  # Calculer les discriminants
  discriminant = b**2 - 4*a*c
  
  # Calculer les racines
  if discriminant > 0:
    root1 = (-b + math.sqrt(discriminant)) / (2*a)
    root2 = (-b - math.sqrt(discriminant)) / (2*a)
    return (root1, root2)
  elif discriminant == 0:
    root = -b / (2*a)
    return (root,)
  else:
    return ()

# Test the function
print(solve_quadratic(1, -3, 2))  # Output: (2.0, 1.0)
print(solve_quadratic(1, 2, 1))   # Output: (-1.0, -1.0)
print(solve_quadratic(1, -7, 12)) # Output: (4.0, 3.0)

Ce programme utilise la formule générale pour résoudre une équation quadratique:

x = (-b +/- sqrt(b^2 - 4ac)) / (2a)

L'algorithme vérifie d'abord si le discriminant (b^2 - 4ac) est positif, nul ou négatif. Si le discriminant est positif, il y a deux racines réelles différentes. Si le discriminant est nul, il y a une seule racine réelle. Si le discriminant est négatif, il n'y a pas de racines réelles.

 

Les Décorateurs

En Python, un décorateur est un patron de conception qui vous permet d’étendre la fonctionnalité d’une fonction sans modifier son code. Cela est réalisé en enveloppant la fonction dans une autre fonction, qui prend la fonction originale en argument et retourne une version modifiée de celle-ci.

Dans cet exemple, le décorateur

greet

est défini comme une fonction qui prend une fonction en argument (

func

) et retourne une fonction wrapper. La fonction wrapper est définie à l’intérieur de la fonction

greet

et retourne une version modifiée de la fonction originale en ajoutant une salutation à son résultat.

La syntaxe

@greet

au-dessus de la fonction

message

est un raccourci pour dire

message = greet(message)

. Cela s’appelle “décorer” la fonction

message

avec le décorateur

greet

. Lorsque vous appelez

message()

, cela appelle la fonction wrapper, qui à son tour appelle la fonction originale

message

et retourne le résultat modifié.

Voici un exemple de décorateur simple qui ajoute une salutation à une fonction qui retourne un message :

 

 

def greet(func):
def wrapper():
return "Hello, " + func()
return wrapper

@greet
def message():
return "world"

print(message()) # Output: "Hello, world"

 


1 2 3 4