Python 3.6.2 bringt beinhaltet diverse neue Features. Eines davon ist die Möglichkeit Zahlen mit Unterstrichen übersichtlicher zu formatieren. Anschließend sehen wir uns an, wie Zahlen auch bei der Ausgabe mit Trennzeichen versehen werden können.
Wer in der Software Entwicklung Zahlen verwendet ist oft dazu genötigt zwei mal hinzusehen. Hat meine meine Wertzuweisung wirklich neun Nullen? Wer in Zukunft in Python den Wert für eine Milliarde schreiben will tut sich nun erheblich leichter. PEP 515 erlaubt die Verwendung von Unterstrichen in Zahlen.
Nachfolgend sind einige Typische Anwendungsbeispiele zu finden. Dezimalzahlen können mit der üblichen Tausender Trennung formatiert werden. Hex – und Binärzahlen mit einer Trennung nach jeweils 8 bzw. 4 Bit. Eine Trennung kann auch innerhalb eines Strings erfolgen, der mit int() in eine Zahl konvertiert wird.
1 2 3 4 5 6 7 8 9 10 11 |
# Tausender Trennung print(1_000_000_000) # 8 Bit Trennung bei Hex Zahlen print(0x25_FF_33) # 4 Bit Trennung bei Binärzahlen print(0b1101_1010_0011_1111) # String in Binärzahl konvertieren print(int('0b_1111_0000', 2)) |
Ausgabe:
1 2 3 4 |
1000000000 2490163 55871 240 |
Für die Ausgabe steht uns (noch) keine Standardfunktion zur Verfügung. Dazu helfen wir uns selbst und implementieren die Funktion format_number(num, num_type = 'dec', sep = '_')
. Diese Funktion bekommt eine Zahl, erzeugt daraus einen String und durchläuft diesen von hinten nach vorne. Im Abstand von dist wird der entsprechende Trennstring (sep) eingefügt. Zum Schluss wird der formatierte String wieder in die richtige Reihenfolge gebracht und zurückgegeben. Standardmäßig wird die Zahl im Dezimalformat formatiert. Der User kann jedoch auch das Hexadezimal Format oder das Binärformat wählen. Des Weiteren ist es möglich, den String für die Trennung festzulegen.
Zum Test unserer Funktion berechnen wir den Energiegehalt von 10 000 kg Masse mit der Formel E = m*c**2 und geben das Ergebnis in drei verschiedenen Formaten aus.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# Zahl für Ausgabe mit Unterstrichen formatieren def format_number(num, num_type = 'dec', sep = '_'): # num_type = 'dec' num_string = str(num) prefix = '' dist = 3 num_formated = '' # Format Hexadezimal if num_type == 'hex': num_string = hex(num)[2:] prefix = '0x' dist = 2 # Format Binär elif num_type == 'bin': num_string = bin(num)[2:] prefix = '0b' dist = 4 # Trennzeichen einfügen for i, l in enumerate(num_string[::-1]): if i > 0 and i%dist == 0: num_formated += sep num_formated += l # formatierten String in korrekter Reihenfolge zurückgeben return prefix + num_formated[::-1] # Energiegehalt von 10 000 kg Masse berechnen mit E=m*c**2 m = 10_000 c = 299_792_458 E = m*c**2 # Ergebis in drei verschiedenen Formaten ausgeben print(format_number(E), 'kgm²/s²') print(format_number(E, sep = '|'), 'kgm²/s²') print(format_number(E, sep = '*'), 'kgm²/s²') print(format_number(E, sep = '-*-'), 'kgm²/s²') print(format_number(E, num_type = 'hex'), 'kgm²/s²') print(format_number(E, num_type = 'bin'), 'kgm²/s²') |
Ausgabe:
1 2 3 4 5 6 |
898_755_178_736_817_640_000 kgm²/s² 898|755|178|736|817|640|000 kgm²/s² 898*755*178*736*817*640*000 kgm²/s² 898-*-755-*-178-*-736-*-817-*-640-*-000 kgm²/s² 0x30_b8_bb_d1_40_8a_b9_92_40 kgm²/s² 0b11_0000_1011_1000_1011_1011_1101_0001_0100_0000_1000_1010_1011_1001_1001_0010_0100_0000 kgm²/s² |
Das komplette Beispiel herunterladen: python_zahlen.zip
Hinterlasse jetzt einen Kommentar