Aller au contenu

Représenter et formater des valeurs

format() : contrôler la présentation

format() renvoie une chaîne selon une spécification de format, également utilisée dans les chaînes formatées.

price = 1234.5
print(format(price, ".2f"))    # 1234.50
print(format(42, "06d"))       # 000042
print(format(0.25, ".0%"))     # 25%
print(f"{price:.2f}")          # 1234.50

Equivalent en C#

double price = 1234.5;
Console.WriteLine(price.ToString("F2", CultureInfo.InvariantCulture)); // 1234.50
Console.WriteLine(42.ToString("D6")); // 000042
Console.WriteLine($"{price:F2}");

Les formats Python et .NET ont des syntaxes différentes : .2f devient par exemple F2. La culture peut modifier séparateurs, symboles et espaces en .NET. Pour un format stable destiné à un échange, spécifions la culture.

repr() : obtenir une représentation de diagnostic

repr() vise une représentation utile pour examiner un objet. Pour certains types, elle ressemble à une expression permettant de recréer sa valeur, sans que cela soit une garantie générale.

text = "Bonjour\nPython"
print(repr(text))  # 'Bonjour\nPython'

Contrairement à l'affichage direct de la chaîne, le saut de ligne est rendu visible sous forme d'échappement.

Equivalent en C#

string text = "Bonjour\nPython";
string diagnostic = System.Text.Json.JsonSerializer.Serialize(text);
Console.WriteLine(diagnostic); // "Bonjour\nPython"

Il n’existe pas de repr() général en C#. Sérialiser une chaîne en JSON rend certains caractères visibles, mais ne reproduit pas la représentation Python d’un objet arbitraire. Un ToString() personnalisé peut fournir un diagnostic adapté au type.

ascii() : échapper les caractères non ASCII

ascii() fonctionne comme repr(), mais échappe les caractères qui ne font pas partie d'ASCII.

print(ascii("été"))  # '\xe9t\xe9'

Elle ne supprime pas les accents : elle les représente autrement.

Equivalent en C#

string text = "été";
string escaped = System.Text.Json.JsonSerializer.Serialize(text);
Console.WriteLine(escaped); // Représentation JSON avec échappements Unicode

Le sérialiseur JSON par défaut échappe les caractères non ASCII, avec des règles différentes de ascii(), qui produit une représentation Python. Ce code illustre un besoin de diagnostic ; ce n’est pas une conversion syntaxiquement identique.

bin() : représenter un entier en binaire

print(bin(10))  # 0b1010

Le résultat est une chaîne préfixée par 0b.

Equivalent en C#

Console.WriteLine("0b" + Convert.ToString(10, 2)); // 0b1010

Pour un entier positif, Convert.ToString(value, 2) fournit les chiffres binaires. Pour un entier négatif de taille fixe, .NET utilise une représentation en complément à deux ; Python produit par exemple -0b1010 pour bin(-10).

oct() : représenter un entier en octal

print(oct(10))  # 0o12

Le résultat est une chaîne préfixée par 0o.

Equivalent en C#

Console.WriteLine("0o" + Convert.ToString(10, 8)); // 0o12

Le préfixe doit être ajouté si nous souhaitons reproduire le texte Python. Les différences de représentation des entiers négatifs s’appliquent aussi à l’octal.

hex() : représenter un entier en hexadécimal

print(hex(255))  # 0xff

Le résultat est une chaîne préfixée par 0x. Ces trois conversions ne changent pas la valeur numérique de l'entier d'origine.

Equivalent en C#

Console.WriteLine("0x" + 255.ToString("x")); // 0xff

Le format x produit des chiffres hexadécimaux minuscules ; X utilise des majuscules. Les valeurs négatives de taille fixe ne sont pas représentées comme les entiers Python.

chr() : obtenir un caractère Unicode

chr() renvoie le caractère correspondant à un point de code Unicode compris entre 0 et 0x10FFFF.

print(chr(65))      # A
print(chr(0x1F600)) # 😀

Equivalent en C#

Console.WriteLine(char.ConvertFromUtf32(65));      // A
Console.WriteLine(char.ConvertFromUtf32(0x1F600)); // 😀

Un char C# représente une unité UTF-16, pas nécessairement un point de code complet. ConvertFromUtf32() renvoie donc une chaîne. Elle rejette les points de code de substitution, alors que chr() peut construire une chaîne contenant un tel point de code.

ord() : obtenir un point de code Unicode

ord() réalise l'opération inverse sur une chaîne d'un seul caractère. Elle accepte également un objet bytes ou bytearray de longueur un.

print(ord("A"))  # 65
print(ord("€"))  # 8364

Equivalent en C#

Console.WriteLine(char.ConvertToUtf32("A", 0));  // 65
Console.WriteLine(char.ConvertToUtf32("€", 0));  // 8364
Console.WriteLine(char.ConvertToUtf32("😀", 0)); // 128512

ConvertToUtf32() tient compte des paires de substitution valides. Le cast (int)text[0] ne donne pas le point de code complet d’un caractère hors du plan multilingue de base.