02 Datentypen
| Datentyp | Beschreibung | Wertebereich |
|---|---|---|
int |
Ganze Zahlen | Theoretisch unbegrenzt (abhängig vom Speicher) |
float |
Gleitkommazahlen | Ca. ±1.8 × 10³⁰⁸ (IEEE 754, 64-Bit) |
complex |
Komplexe Zahlen | Kombination aus zwei float-Werten (Real- und Imaginärteil) |
bool |
Wahrheitswerte | {True, False} |
str |
Zeichenketten | Beliebige Zeichenfolgen (Unicode) |
tuple |
Tupel (unveränderlich) | Beliebige Anzahl von Elementen unterschiedlicher Typen |
frozenset |
Unveränderliche Menge | Ungeordnete, nicht doppelte Elemente beliebiger immutable Typen |
bytes |
Byte-Sequenz | Folge von Bytes (0–255) |
NoneType |
Repräsentiert "kein Wert" | {None} |
| Datentyp | Beschreibung | Wertebereich |
|---|---|---|
list |
Liste (Array in anderen Sprachen) | Beliebige Anzahl von Elementen unterschiedlicher Typen |
dict |
Wörterbuch (Key-Value-Paare) | Schlüssel: Immutable Typen, Werte: Beliebige Typen |
set |
Menge (keine doppelten Werte) | Ungeordnete, nicht doppelte Elemente beliebiger immutable Typen |
bytearray |
Veränderbare Byte-Sequenz | Folge von Bytes (0–255) |
s = "Hallo"
s = 'Hallo'
s = """Hallo
Welt"""
s = ('Hallo '
'Welt')
s = 'Welt'
print(f'Hallo {s}') # Hallo Welt
f-Strings sind Konkatenationen vorzuziehen, da sie sich schneller schreiben lassen und besser zu lesen sind:
first_name = 'Max'
last_name = 'Mustermann'
print('Hallo ' + first_name + ' ' + last_name)
print(f'Hallo {first_name} {last_name}')
s = 'Hallo'
print(s[0]) # Ausgabe: H
print(s[-1]) # Ausgabe: o
print(s[2:]) # Ausgabe: llo
print(s[:2]) # Ausgabe: Ha
print(s[2:4]) # Ausgabe: ll
s = 'Hallo Welt'
l = s.split(' ')
print(l) # ['Hallo', 'Welt']
s = 'Hallo+Welt'
print(s.replace('+', ' ')) # Hallo Welt
s = 'c:\\mein\\pfad'
s_raw = r'c:\mein\pfad' # raw string
print(s, s_raw) # c:\mein\pfad c:\mein\pfad
from pathlib import Path
str = '/user/somestuff/my_file.txt'
p = Path(str)
print(p.absolute()) # /user/somestuff/my_file.txt
print(p.parent) # /user/somestuff
print(p.stem) # my_file
print(p.is_dir()) # False
print(p.is_file()) # True
Bei der Division entsteht ein float, auch wenn das Ergebnis gerade ist. Vermeiden kann man dies mit dem //-Operator.
result = 4 / 2
print(f'{result}; Typ: {type(result)}') # 2.0; Typ: <class 'float'>
result = 4 // 2
print(f'{result}; Typ: {type(result)}') # 2; Typ: <class 'int'>
Formatierung:
n1 = 1000
n2 = 1
print(n1) # 1000
print(f'{n2:4d}') # 1
Die Nachkommastellen werden nicht exakt abgespeichert, daher sollten float-Werte niemals mit == vergleichen werden. Stattdessen eignet sich die Verwendung von math.isclose().
Beispiel:
import math
result = 1/10 + 1/10 + 1/10
value = 0.3
print(f'{result:.32f}') # 0.30000000000000004440892098500626
print(f'{value:.32f}') # 0.29999999999999998889776975374843
print(result == value) # False
print(math.isclose(result, value)) # True
Aufrunden:
print(math.floor(1.2)) # 1
Abrunden:
print(math.ceil(1.2)) # 2
Auf 2 Nachkommastellen runden:
print(round(1.23456, 2)) # 1.23
Auf das nächstgelegene Vielfache von 10 (= 10^1) runden:
print(round(644.123, -1)) # 640.0
Auf das nächstgelegene Vielfache von 100 (= 10^2) runden:
print(round(644.123, -2)) # 600.0
a^b ist falsch, da ^ der XOR-Operator ist!
import math
a = 2
b = 3
# Es gibt 2 Möglichkeiten:
print(a ** b) # 8
print(math.pow(a, b)) # 8.0