Aller au contenu

Implémenter des calculs

abs() : calculer une valeur absolue

abs() permet d'obtenir la valeur absolue d’un nombre. Pour un nombre complexe, elle retourne son module :

print(abs(-15))    # 15
print(abs(-3.5))   # 3.5
print(abs(3 + 4j)) # 5.0 : module du nombre complexe

Equivalent en C#

Console.WriteLine(Math.Abs(-15));
Console.WriteLine(Math.Abs(-3.5));
Console.WriteLine(Complex.Abs(new Complex(3, 4))); // 5

En C#, Math.Abs(int.MinValue) lève une exception de type OverflowException, car la valeur positive correspondante dépasse la capacité du type int. Cette limite ne s’applique pas aux entiers Python, dont la taille s’adapte à la valeur, dans la limite de la mémoire disponible.

round() : arrondir une valeur

round() permet d'arrondir un nombre, éventuellement avec un nombre de décimales. Lorsqu’un nombre se trouve exactement à mi-chemin entre deux valeurs possibles, round() retient celle dont le dernier chiffre conservé est pair :

print(round(12.345, 2))  # 12.35
print(round(2.5))        # 2 car 2 est pair.
print(round(3.5))        # 4 car 4 est pair.
print(round(145, -1))    # 140 car entre 140 et 150, le chiffre des dizaines de 140 est pair.

Equivalent en C#

Console.WriteLine(Math.Round(2.5, MidpointRounding.ToEven)); // 2

Console.WriteLine(Math.Round(3.5, MidpointRounding.ToEven)); // 4

Console.WriteLine(Math.Round(2.675m, 2, MidpointRounding.ToEven)); // 2.68

Console.WriteLine(Math.Round(145m / 10m, 0, MidpointRounding.ToEven) * 10m); // 140

L’arrondi vers la valeur paire existe dans les deux langages. Les algorithmes et représentations peuvent toutefois produire des résultats différents avec les flottants. Math.Round() n’accepte pas de nombre de décimales négatif. Le type decimal en C# correspond plutôt au besoin couvert par decimal.Decimal que par float en Python.

pow() : calculer une puissance

Avec deux arguments, pow(a, b) correspond à a ^ b. Un troisième argument permet un calcul modulaire ; pour des entiers et un exposant positif, il correspond au reste de la puissance.

print(pow(2, 5))     # 32 : 2 élevé à la puissance 5
print(pow(2, 5, 7))  # 4 : reste de la division de 32 par 7

Equivalent en C#

Console.WriteLine(Math.Pow(2, 5));              // 32
Console.WriteLine(BigInteger.ModPow(2, 5, 7));  // 4

divmod() : obtenir un quotient et un reste

divmod(a, b) renvoie un tuple contenant le quotient et le reste de la division de a par b :

quotient, remainder = divmod(17, 5)
print(quotient)   # 3
print(remainder)  # 2

Equivalent en C#

int quotient = Math.DivRem(17, 5, out int remainder);
Console.WriteLine(quotient);  // 3
Console.WriteLine(remainder); // 2
Console.WriteLine(-17 / 5);   // -3
Console.WriteLine(-17 % 5);   // -2

sum() : additionner des éléments

sum() additionne les valeurs d'un itérable, avec une valeur initiale facultative :

numbers = [12, 7, 25]
print(sum(numbers))            # 44
print(sum(numbers, start=10))  # 54
print(sum([]))                 # 0

Equivalent en C#

int[] numbers = { 12, 7, 25 };
Console.WriteLine(numbers.Sum());            // 44
Console.WriteLine(numbers.Sum() + 10);       // 54
Console.WriteLine(Array.Empty<int>().Sum()); // 0

min() : rechercher le minimum

min() accepte un itérable ou plusieurs valeurs et fournit la valeur la plus petite. key définit un critère de comparaison.

print(min([12, 7, 25]))              # 7
print(min(12, 7, 25))                # 7
print(min(["Python", "C#"], key=len))  # C#
print(min([], default=0))            # 0

default est disponible uniquement dans la forme recevant un itérable. Sans ce paramètre, un itérable vide provoque la levée d'une exception de type ValueError.

Equivalent en C#

int[] numbers = { 12, 7, 25 };
Console.WriteLine(numbers.Min()); // 7

Console.WriteLine(new[] { "Python", "C#" }.MinBy(s => s.Length)); // C#

Console.WriteLine(Array.Empty<int>().DefaultIfEmpty(0).Min()); // 0

La méthode MinBy() conserve l’élément associé à la clé minimale, comme key en Python. Min(selector) renvoie au contraire la clé minimale projetée par le sélecteur.

max() : rechercher le maximum

max() fonctionne selon les mêmes principes que min() en renvoyant la valeur la plus grande.

print(max([12, 7, 25]))                 # 25
print(max(["Python", "C#"], key=len))   # Python
print(max([], default=0))               # 0

Equivalent en C#

int[] numbers = { 12, 7, 25 };
Console.WriteLine(numbers.Max()); // 25

Console.WriteLine(new[] { "Python", "C#" }.MaxBy(s => s.Length)); // Python

Console.WriteLine(Array.Empty<int>().DefaultIfEmpty(0).Max()); // 0

La méthode MaxBy() correspond à une sélection d’élément selon une clé. Pour deux valeurs, la méthode Math.Max(a, b) répond au besoin.