Aller au contenu

Multiplication sans *⚓︎

Programmer la fonction multiplication :

  • prenant en paramètres deux nombres entiers a et b,

  • renvoyant le produit de ces deux nombres.

Exemples
🐍 Console Python
>>> multiplication(3, 5)
15
>>> multiplication(-4, -8)
32
>>> multiplication(-2, 6)
-12
>>> multiplication(3, -4)
-12
>>> multiplication(-2, 0)
0

Contrainte

Les seules opérations autorisées sont l'addition et la soustraction !

Indications
  • On rappelle que si \(n\) est un nombre négatif, \(-n\) est un nombre positif.

  • On a \(5 \times (-3) = -5\times 3=0 +(- 5)+(- 5)+(- 5)\) !

###
from itertools import productbksl-nlbksl-nl# Testsbksl-nlassert multiplication(3, 5) == 15bksl-nlassert multiplication(-4, -8) == 32bksl-nlassert multiplication(-2, 6) == -12bksl-nlassert multiplication(3, -4) == -12bksl-nlassert multiplication(-2, 0) == 0bksl-nlbksl-nl# Tests supplémentairesbksl-nlbksl-nlpremiers = [a for a in range(-10, 11)]bksl-nlseconds = [a for a in range(-10, 11)]bksl-nlfor a, b in product(premiers, seconds):bksl-nl assert multiplication(a, b) == a py-str b, f"Erreur sur le produit {a}py-str{b}"bksl-nlbksl-nlbksl-nlclass Entier(int):bksl-nl def py-undpy-undfloatpy-undpy-und(self, /):bksl-nl raise Exception(bksl-nl f"Vous avez essayé de convertir le nombre en un 'float'... Pourquoi ?"bksl-nl )bksl-nlbksl-nl def py-undpy-undintpy-undpy-und(self, /):bksl-nl raise Exception(bksl-nl f"Vous avez essayé de convertir le nombre en un 'int'... Pourquoi ?"bksl-nl )bksl-nlbksl-nl def py-undpy-undmulpy-undpy-und(self, valeur):bksl-nl raise Exception(bksl-nl f"Vous avez utilisé la multiplication... C'est explicitement interdit !"bksl-nl )bksl-nlbksl-nl def py-undpy-undpowpy-undpy-und(self, valeur, mod=None, /):bksl-nl raise Exception(bksl-nl f"Vous avez utilisé la puissance... qui est une multiplication !"bksl-nl )bksl-nlbksl-nl def py-undpy-undrmulpy-undpy-und(self, valeur, /):bksl-nl raise Exception(bksl-nl f"Vous avez utilisé la multiplication... C'est explicitement interdit !"bksl-nl )bksl-nlbksl-nl def py-undpy-undrpowpy-undpy-und(self, value, mod=None, /):bksl-nl raise Exception(bksl-nl f"Vous avez utilisé la puissance... qui est une multiplication !"bksl-nl )bksl-nlbksl-nl def py-undpy-undstrpy-undpy-und(self, /):bksl-nl raise Exception(bksl-nl f"Vous avez essayé de convertir le nombre en 'str'... Pourquoi ?"bksl-nl )bksl-nlbksl-nlbksl-nlassert multiplication(Entier(2), Entier(3)) == 6bksl-nlbksl-nl 5/5

def multiplication(a, b):bksl-nl ...bksl-nlbksl-nlbksl-nl# Testsbksl-nlassert multiplication(3, 5) == 15bksl-nlassert multiplication(-4, -8) == 32bksl-nlassert multiplication(-2, 6) == -12bksl-nlassert multiplication(3, -4) == -12bksl-nlassert multiplication(-2, 0) == 0bksl-nlbksl-nldef multiplication(a, b):bksl-nl if b < 0:bksl-nl b = -bbksl-nl a = -abksl-nlbksl-nl somme = 0bksl-nl for i in range(b):bksl-nl somme += abksl-nlbksl-nl return sommebksl-nlbksl-nl

A

Pour effectuer le produit \(a\times b\) on distingue deux cas de figures :

  • \(b \ge 0\) : dans ce cas, on se contente d'additionner \(b\) fois le nombre \(a\) à \(0\),
  • \(b \lt 0\) : dans ce cas, on reporte le signe de \(b\) sur \(a\). \(-b\) devient positif et \(a\) change de signe. Il reste alors à additionner \(-b\) fois le nombre \(-a\) à \(0\).

Ainsi :

  • \(2\times 3 = 0+2+2+2=6\)
  • \(-2\times 3 = 0+(-2)+(-2)+(-2)=-6\)
  • \(2\times -3 = 0+(-2)+(-2)+(-2)=-6\)
  • \(-2\times -3 = 0+(+2)+(+2)+(+2)=6\)

Z