Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung | Blog RSS

Stand: 2024-04-18
weitgehend formuliert von Claude 3 Opus

Umstieg von C auf Python, Teil 1

Elementare Datentypen in Python

Python ist eine dynamisch typisierte Sprache, im Gegensatz zu C, wo Variablen explizit mit einem Datentyp deklariert werden müssen. In Python werden Datentypen automatisch zugewiesen und können sich während der Laufzeit ändern. Trotzdem gibt es in Python ähnliche Datentypen wie in C, die man kennen sollte.

Ganzzahlen (int)

Ganzzahlen werden in Python mit dem Datentyp int dargestellt. Anders als in C gibt es keine Unterscheidung zwischen short, int, long oder long long. Python wählt automatisch die passende Größe für eine Ganzzahl.

x = 42
y = -1337

Gleitkommazahlen (float)

Gleitkommazahlen werden in Python mit dem Datentyp float dargestellt. Auch hier gibt es keine Unterscheidung zwischen float und double wie in C.

x = 3.14
y = -2.71828

Unterschiede zwischen C und Python: ++, –, ** und /

Python und C haben einige Unterschiede in der Syntax und Funktionsweise, insbesondere bei den Operatoren ++, -- und **.

In C werden die Operatoren ++ und -- häufig verwendet, um Variablen um 1 zu erhöhen oder zu verringern. Beispiel:

int i = 5;
i++; // i ist jetzt 6
i--; // i ist wieder 5

In Python existieren diese Operatoren nicht. Stattdessen verwendet man die Schreibweise += 1 oder -= 1, um eine Variable um 1 zu erhöhen oder zu verringern. Beispiel:

i = 5
i += 1 # i ist jetzt 6
i -= 1 # i ist wieder 5

In C wird die Potenzierung mit der Funktion pow() aus der math.h-Bibliothek durchgeführt. Beispiel:

#include <math.h>

double result = pow(2, 3); // result ist 8

Python hingegen verwendet den Operator ** für die Potenzierung. Beispiel:

result = 2 ** 3 # result ist 8

Die Verwendung von ** ist oft intuitiver und führt zu besser lesbarem Code.

In C liefert die Division für ganzzahlige Typen wieder ganze Zahlen, zum Beispiel wird 7/3 zu 2. Python liefert hier dagegen eine Gleitkommazahl. Um in Python ganzzahlige Divisionsergebnisse zu erhalten, muss man den Doppelstrich wie 7//3 schreiben.

Boolesche Werte (bool)

Boolesche Werte werden in Python mit dem Datentyp bool dargestellt. Sie können die Werte True oder False annehmen, ähnlich wie in C die Werte 1 oder 0.

x = True
y = False

Logische Operatoren: not, and, or

Python unterstützt die logischen Operatoren not, and und or, die ähnlich wie in C funktionieren.

Hier sind einige Beispiele:

if not bedingung:
    # Anweisungen, die ausgeführt werden, wenn die Bedingung falsch ist

if bedingung1 and bedingung2:
    # Anweisungen, die ausgeführt werden, wenn beide Bedingungen wahr sind

if bedingung1 or bedingung2:
    # Anweisungen, die ausgeführt werden, wenn mindestens eine der Bedingungen wahr ist

Beachte, dass Python im Gegensatz zu C die Operatoren && und || nicht verwendet. Stattdessen werden die Schlüsselwörter and und or genutzt.

Mit diesem Wissen sollten C-Programmierer schnell in der Lage sein, bedingte Anweisungen und logische Operatoren in Python zu verwenden.

Hier ist ein Beispiel für einen komplizierteren Ausdruck mit den logischen Operatoren not, and und or in Python:

x = 10
y = 20
z = 30

result = not (x > 5) or ((y < 25) and (z == 30))
print(result)

Erklärung:

  1. Zuerst wird die Variable x mit dem Wert 10, y mit dem Wert 20 und z mit dem Wert 30 initialisiert.

  2. Der komplexe Ausdruck not (x > 5) or ((y < 25) and (z == 30)) wird ausgewertet:

  3. Das Ergebnis True wird schließlich auf der Konsole ausgegeben.

Dieser Ausdruck zeigt, wie man die logischen Operatoren not, and und or in Python kombinieren kann, um komplexere Bedingungen zu formulieren. Analog zu C wird not vor and ausgeführt und and vor or; wenn man eine andere Reihenfolge will, muss man entsprechende Klammern setzen.

Ebenfalls analog zu C wertet Python bei x and y das y nicht mehr aus, wenn x schon False ist, so dass das and logischerweise nur False werden kann, und es wertet bei x or y das y nicht aus, wenn x schon True ist, so dass das or logischerweise nur True werden kann. Oft benutzt man die Ausdrucksweise ist_Ressource_verfügbar() and frage_Resource_ab(), denn die Ressource wird dann nur abgefragt, wenn sie auch verfügbar ist.

Type Hints

Seit Python 3.5 gibt es die Möglichkeit, Variablen mit sogenannten Type Hints zu versehen. Diese geben an, welchen Datentyp eine Variable erwartet. Type Hints werden von Python jedoch nicht erzwungen und dienen hauptsächlich zur besseren Lesbarkeit und Verständlichkeit des Codes.

x: int = 42
y: float = 3.14
z: bool = True

Type Hints können auch verwendet werden, um anzugeben, dass eine Variable mehrere Datentypen annehmen kann:

x: int | float = 42
x = 3.14  # gültig, da x auch float sein kann

Insgesamt sind die grundlegenden Datentypen in Python ähnlich wie in C, auch wenn Python dynamisch typisiert ist und Type Hints optional sind. Mit diesem Wissen können C-Programmierer schnell in Python einsteigen und die Grundlagen der Sprache verstehen.

Strings (Zeichenketten)

In Python sind Strings eine grundlegende Datenstruktur zur Speicherung und Manipulation von Textdaten. Im Gegensatz zu C müssen Strings in Python nicht als Arrays von Zeichen definiert werden, sondern können direkt als Literale verwendet werden.

Stringliterale und Konkatenation

Stringliterale, also Buchstabe für Buchstabe wörtlich angegebene Zeichenketten, werden in Python in einfachen ('...') oder doppelten ("...") Anführungszeichen eingeschlossen. Strings können mit dem +-Operator verkettet (konkateniert) werden:

name = 'Alice'
greeting = 'Hallo, ' + name + '!'
print(greeting)  # Ausgabe: Hallo, Alice!

Stringfunktionen

Python bietet eine Vielzahl von eingebauten Funktionen zur Manipulation von Strings. Hier sind einige häufig verwendete Funktionen:

Beispiel:

text = '  Hallo, Welt!  '
print(len(text))           # Ausgabe: 15
print(text.lower())        # Ausgabe: '  hallo, welt!  '
print(text.strip())        # Ausgabe: 'Hallo, Welt!'
print(text.split(', '))    # Ausgabe: ['  Hallo', 'Welt!  ']

Type Hints

Für Strings wird der Typ str verwendet:

name: str = 'Alice'

Type Hints dienen hauptsächlich der besseren Lesbarkeit und Verständlichkeit des Codes und werden von Tools zur statischen Codeanalyse verwendet. Sie haben jedoch keine Auswirkungen auf die Laufzeit des Programms.

Formatierte Strings (f-Strings)

Mit f-Strings können Ausdrücke direkt in Stringliterale eingebettet werden, indem sie in geschweifte Klammern {} eingeschlossen werden:

name = 'Alice'
age = 25
print(f'Mein Name ist {name} und ich bin {age} Jahre alt.')
# Ausgabe: Mein Name ist Alice und ich bin 25 Jahre alt.
In den Schweifklammern der f-Strings lassen sich Formatierungsanweisungen geben. Zum Beispiel platziert {wert:8.2f} den Inhalt der Gleitkommavariablen wert mit zwei Nachkommastellen in einem Feld mit 8 Zeichen Breite.

Bedingte Anweisungen mit if, elif und else

In Python werden bedingte Anweisungen ähnlich wie in C verwendet, allerdings mit einer etwas anderen Syntax. Anstatt geschweifte Klammern {} zu verwenden, nutzt Python Einrückungen, um den Gültigkeitsbereich eines Blocks zu definieren.

Eine if-Anweisung in Python sieht folgendermaßen aus:

if bedingung:
    # Anweisungen, die ausgeführt werden, wenn die Bedingung wahr ist
    anweisung1
    anweisung2

Wenn die Bedingung wahr ist, werden die eingerückten Anweisungen ausgeführt. Im Gegensatz zu C muss keine runde Klammer () um die Bedingung gesetzt werden.

Mit elif (kurz für else if) können weitere Bedingungen überprüft werden, falls die vorherige Bedingung nicht erfüllt war:

if bedingung1:
    # Anweisungen für bedingung1
elif bedingung2:
    # Anweisungen für bedingung2
else:
    # Anweisungen, wenn keine der Bedingungen erfüllt ist

Vergleich von ?: in C und if-else in Python

In C gibt es den ternären Operator ?:, der eine kompakte Schreibweise für einfache if-else-Anweisungen ermöglicht. Hier ein Beispiel:

int a = 5;
int b = 10;
int max = (a > b) ? a : b;

In diesem Fall wird max der Wert von a zugewiesen, wenn a > b wahr ist, andernfalls erhält max den Wert von b. Der ternäre Operator ist eine prägnante Möglichkeit, eine einfache Bedingung auszuwerten und basierend auf dem Ergebnis einen Wert zuzuweisen.

In Python gibt es eine ähnliche Syntax wie den ternären Operator, die als conditional expression bezeichnet wird:

a = 5
b = 10
max = a if a > b else b

Schleifen

Python bietet zwei Arten von Schleifen: while-Schleifen und for-Schleifen. Beide ermöglichen es, einen Codeblock wiederholt auszuführen, bis eine bestimmte Bedingung erfüllt ist.

while-Schleifen

Eine while-Schleife führt einen Codeblock aus, solange eine Bedingung wahr ist. Die Syntax ist ähnlich wie in C:

while bedingung:
    # Anweisungen

for-Schleifen und range

for-Schleifen werden verwendet, um über eine Sequenz von Elementen zu iterieren. In Python ist die Syntax etwas anders als in C:

for element in sequenz:
    # Anweisungen

Die Funktion range wird oft in Kombination mit for-Schleifen verwendet, um eine Sequenz von Zahlen zu generieren:

for i in range(start, stop, step):
    # Anweisungen

break und continue

break und continue sind zwei Anweisungen, die den Ablauf von Schleifen beeinflussen können:

Beispiel für break:

for i in range(1, 6):
    if i == 4:
        break
    print(i)

Ausgabe:

1
2
3

Beispiel für continue:

for i in range(1, 6):
    if i == 3:
        continue
    print(i)

Ausgabe:

1
2
4
5

Verschachtelte Schleifen

Schleifen können ineinander verschachtelt werden, um komplexere Iterationen durchzuführen. Hier ist ein Beispiel für zwei ineinander verschachtelte for-Schleifen:

for i in range(1, 4):
    for j in range(1, 4):
        print(f'({i}, {j})', end=' ')
    print()

Ausgabe:

(1, 1) (1, 2) (1, 3)
(2, 1) (2, 2) (2, 3)
(3, 1) (3, 2) (3, 3)

Funktionen

Funktionen sind ein grundlegendes Konzept in Python, das es ermöglicht, Code zu strukturieren, wiederzuverwenden und lesbarer zu machen. Wenn du bereits Erfahrung mit C hast, wirst du feststellen, dass Funktionen in Python ähnlich funktionieren, jedoch mit einigen Unterschieden und zusätzlichen Funktionen.

Funktionsdefinition

In Python werden Funktionen mit dem Schlüsselwort def definiert, gefolgt vom Funktionsnamen und den Parametern in Klammern. Der Funktionskörper wird eingerückt und enthält den Code, der ausgeführt wird, wenn die Funktion aufgerufen wird.

def greet(name):
    print(f'Hallo, {name}!')

Funktionsaufruf

Um eine Funktion aufzurufen, schreibst du einfach den Funktionsnamen gefolgt von Klammern und den erforderlichen Argumenten.

greet('Alice')  # Ausgabe: Hallo, Alice!

Rückgabewerte

Funktionen in Python können Werte mit dem Schlüsselwort return zurückgeben. Wenn keine solche explizite Rückgabeanweisung vorhanden ist oder wenn return ohne Wert dahinter steht, gibt die Funktion None zurück.

def add(a, b):
    return a + b

result = add(3, 5)
print(result)  # Ausgabe: 8

Funktionsausführung beenden

Sobald ein return-Statement in einer Python-Funktion erreicht wird, wird die Ausführung der Funktion sofort beendet, wie in C. Alle nachfolgenden Anweisungen in der Funktion werden nicht mehr ausgeführt.

Beispiel:

def beispiel_funktion():
    print('Vor dem return')
    return
    print('Nach dem return')  # Wird nicht ausgeführt

beispiel_funktion()

Ausgabe:

Vor dem return

Eine Python-Funktion kann wie eine C-Funktion mehrere return-Statements enthalten. Das erste erreichte return-Statement beendet die Funktion und gibt den entsprechenden Wert zurück.

Beispiel:

def ist_positiv(zahl):
    if zahl > 0:
        return True
    else:
        return False
    print('Nach den returns')  # Wird nicht ausgeführt

print(ist_positiv(5))   # Ausgabe: True
print(ist_positiv(-2))  # Ausgabe: False

Type Hints

Im folgenden geben die Type Hints a: int und b: int an, dass die Funktion multiply zwei ganzzahlige Parameter erwartet. Der Type Hint -> int gibt an, dass die Funktion einen ganzzahligen Wert zurückgibt.

def multiply(a: int, b: int) -> int:
    return a * b

result = multiply(4, 6)
print(result)  # Ausgabe: 24

Eingebaute mathematische Funktionen

Python bietet das eingebaute math-Modul, das eine Vielzahl von mathematischen Funktionen bereitstellt. Um es zu verwenden, muss es zunächst importiert werden:

import math

Einige nützliche Funktionen aus dem math-Modul sind:

Eine wichtige Konstante im math-Modul ist math.pi, die den Wert der mathematischen Konstante Pi (π) enthält. Pi ist das Verhältnis des Umfangs eines Kreises zu seinem Durchmesser und hat einen Wert von etwa 3,14159.

Hier ist ein Beispiel, wie man math.pi in Python verwenden kann:

import math

radius = 5
umfang = 2 * math.pi * radius
flaeche = math.pi * radius ** 2

print(f'Umfang: {umfang:.2f}')
print(f'Fläche: {flaeche:.2f}')

Ausgabe:

Umfang: 31.42
Fläche: 78.54