Betriebssysteme, Dateipfade und PowerShell mit VS Code

h:300

  • Sind größere Software-Projekt in einem Notebook möglich?
  • Was, wenn nur ein Mikro-Controller ohne Display zur Verfügung steht?

Visual Studio Code

  • Open Source Text-Editor von Microsoft
  • Lässt sich durch Erweiterungen zur vollständigen Entwicklungsumgebung anpassen

height:400


Terminals / Shells

  • Öffnen Sie ein PowerShell-Terminal in VS Code (Strg+Shift+ö)
  • wie lautet der Pfad zu dem Verzeichnis, in dem Sie starten?
  • geben Sie python -V ein
    • welche Version von python ist installiert?
    • Falls keine installiert ist, installieren Sie sie aus dem Windows Store
  • geben Sie python ein, um den Python Interpreter zu starten
    • speichern Sie "Hallo, Welt!" in einer Variablen und geben Sie sie in der nächsten Zeile aus
    • Verlassen sie den Interpreter mit quit()
  • Erstellen Sie eine Datei main.py erstellen, die die Druckanweisung enthält, und sie mit python main.py ausführen

Was ist ein Betriebssystem?

h:400


Was ist ein Betriebssystem?

  • Eine zentrale Software, die Hardware und Anwendungsprogramme verwaltet.
  • Beispiele:
  • Windows
  • macOS
  • Linux/Unix
  • Mobile Betriebssysteme wie Android und iOS
  • Aufgaben:
  • Verwaltung von Hardware-Ressourcen
  • Dateisystem- und Speicherorganisation
  • Nutzer- und Rechteverwaltung

Aufgaben eines Betriebssystems

  • Ressourcenverwaltung: Zuweisung von CPU, Arbeitsspeicher, Speicherplatz
  • Dateiverwaltung: Organisation und Zugriff auf Dateien und Ordner
  • Benutzerverwaltung: Verwaltung von Benutzerkonten und Zugriffsrechten
  • Schnittstellenbereitstellung: Bereitstellung von APIs und Befehlszeilen-Interfaces (Shells)

Bestandteile eines Betriebssystems

  • Kernel

    • Kern des Betriebssystem
    • Allokiert Rechenzeit, Arbeits- und externen Speicher
  • Shell

    • Nutzerinterface wie Eingabeaufforderung
    • Interpretiert Nutzereingaben
    • Eingabe über Kommandozeile statt grafischem Nutzerinterface

bg h:300 right:33%

* Beispiel: Windows Power Shell und Mac Terminal

Dateiverwaltung und Pfade

  • Dateisystem: Hierarchische Struktur, in der Dateien und Ordner organisiert werden.
  • Ermöglicht es, Daten strukturiert abzulegen und wiederzufinden.
  • Wichtig: Ein guter Umgang mit Pfadangaben ist essenziell für die Softwareentwicklung.

Absolute vs. relative Pfade

Absolute Pfade

  • Beschreiben den vollständigen Pfad von der Wurzel des Dateisystems.
  • Beispiel in Windows:
    C:\Users\Julian\Projekte\PythonApp\main.py

Relative Pfade

  • Beschreiben den Pfad relativ zum aktuellen Arbeitsverzeichnis.
  • Beispiel:
    Wenn das Arbeitsverzeichnis C:\Users\Julian\Projekte\PythonApp ist, dann verweist
    ./main.py direkt auf die Datei.

Wichtige Befehle in PowerShell

  • Wechseln des Verzeichnisses:
    cd <Pfad> oder Set-Location <Pfad>
  • Auflisten von Dateien:
    Get-ChildItem (Kurzform: ls oder dir)
  • Aktuelles Verzeichnis anzeigen:
    Get-Location

Beispiel:

cd C:\Users\Julian\Projekte\PythonApp
ls

Möglichkeiten Python Code auszuführen

  • Öffnen Sie einen neuen Order in VS Code, dieser wird zu Ihrem Arbeitsverzeichnis
  • Erstellen Sie eine Datei main.py erstellen, die die Druckanweisung enthält
for i in range(10):
    print(i)

1. In der Kommandozeile

python main.py
  • Bin ich im richtigen Ordner?
  • Bin ich in der richtigen Umgebung?
  • Zum Ausführen python <Dateiname>

Anlegen eines Versuchs im Beispiel create_experiment.py

from typing import Dict # Import des Dict Datentyps für Type-Hinting

def get_experiment_id() -> int:
    """Fragt nach der Experiment-ID und stellt sicher, dass die Eingabe korrekt ist (keine Floats oder Strings)."""
    try:
        # Eingabe der Experiment-ID
        experiment_id = int(input("Bitte geben Sie die erste Experiment-ID ein (nur Ganzzahlen): "))
        return experiment_id
    except ValueError:
        # Bei einem Fehler (z.B. Eingabe von einem String oder Float) erneut die Eingabe anfordern
        print("Ungültige Eingabe. Bitte geben Sie eine ganze Zahl ein.")
        return get_experiment_id()  # Rekursion, um die Eingabe zu wiederholen

def get_experiment_leader() -> str:
    """Fragt nach dem Namen des Versuchsleiters."""
    leader = input("Bitte geben Sie den Namen des Versuchsleiters ein: ")
    return leader

...

Funktionen, Module und Pakete

  • Funktionen sind wieder aufrufbare Code-Einheiten, denen Argumente als Parameter übergeben werden können
  • Funktionen geben einen Rückgabewert aus, der weiterverarbeitet werden kann

Als Diagnostiker:in möchte ich mir die Mittelwerte der Herzrate und Leistung anzeigen lassen, um die Leistungsfähigkeit zur beurteilen

bg right:33% height:200


🎯 Lernziele

Nach dieser Einheit sind Sie in der Lage dazu * Funktionen in Python zu definieren und aufzurufen * Rückgaben von Funktionen zu definieren und diese zu nutzen * Eigene Module in Python anzulegen


def calc_mean(list_of_measurements : list[int]):
  """ Eine Funktion, die eine Liste von Werten übernimmt und das arithmetische Mittel zurück gibt"""

  mittelwert = sum(list_of_measurements) / len(list_of_measurements)
  return mittelwert

mean = calc_mean(list_of_measurements = [1,2,3])
def <funktions_name>(<parameter>):
  """<Docstring: Kommentar zur Dokumentation>"""

  <Berechnungen der Funktion>
  return <Rückgabewert der Funktion>

Prozeduren

  • Funktionen ohne Rückgabewert werden auch als Prozeduren bezeichnet
def print_mean(list_of_measurements : list[int]):
    print(calc_mean(list_of_measurements))
    return None # Kann auch entfallen

Module in Python

  • Funktionen werden in Python of in Unterprogramme (eigene .py-Dateien) ausgelagert
  • Unterprogramme im Python nennt man Module
  • In der Regel sind dies eigene *.py Dateien

Eigene Module

  • Wird eine Python-Skript ausgeführt, so wird die Datei als Hauptmodul bezeichnet (__main__)
  • Alle Module im gleichen Ordner können als Untermodul importiert werden
src/
│
├── main.py
└── calculation.py
# main.py
import calculation

calculation.calc_mean([1,2,3])

# calculation.py
def calc_mean(list_of_measurements : list[int]):
  """ Eine Funktion, die eine Liste von Werten übernimmt und das arithmetische Mittel zurück gibt"""

  mittelwert = sum(list_of_measurements) / len(list_of_measurements)
  return mittelwert

✍️ Aufgabe

  • Erstellen Sie ein neues Notebook
  • Legen Sie ein Modul calculation.py an
  • Nutzen Sie es in Ihrem Notebook

Anstelle des gesamten Moduls können auch einzelne Funktionen importiert werden

from calculation import calc_mean

calc_mean([1,2,3])

Pakete

  • Ab einer gewissen Komplexität macht es Sinn mehrere Module in einem Paket zusammenzufassen
  • Hierzu wird ein Ordner mit dem Namen des Pakets angelegt
  • Im Ordner befinden sich die Module und eine Datei __init__.py (kann auch leer sein)
src/
│
├── main.py
└── /my_package
    ├── __init__.py
    └── calculation.py
from my_package import calculation

calculation.calc_mean([1,2,3])

Definition des Hauptprogramms

  • Python kann unterscheiden, ob eine Datei direkt ausgeführt wird oder als Modul importiert wird
  • Beispielweise in my_module_with_main.py
def bspfunktionfuerrueckgabe(eingabewert):
  rueckgabewert = eingabewert * 2
  return rueckgabewert

print("Ich stehe in der Datei:" + __name__)

if __name__ == "__main__":
  print("Datei wurde direkt aufgerufen und die Main wird ausgeführt")

Vorsicht!

  • Die Variable __name__ nimmt immer den Wert __main__ an, wenn die Datei selbst direkt ausgeführt wird
  • Dies is unabhängig vom eigentlichen Dateinamen

Hauptprogramm

  • Es is gute Praxis das Hauptprogramm main.py zu nennen und als Einstiegspunkt zu schreiben
  • Der Code des Hauptprogramms sollte in folgende if-Statement verpackt werden:
    if __name__ == "__main__":
      ...
    
  • So können wir dazwischen Trennen, ob wir das Programm selbst ausführen oder ggf. importieren wollten z.B. um einzelne Funktionen für andere Anwendungen zu nutzen

✍️ Freiwillige Übungs-Aufgabe

h:400

Google Colab


🎯 Lernziele

Nach dieser Einheit sind Sie in der Lage dazu * Funktionen in Python zu definieren und aufzurufen * Rückgaben von Funktionen zu definieren und diese zu nutzen * Eigene Module in Python anzulegen


🏆 Sakai-Aufgabe 3: Python-Installation und Funktionen

  • Installieren Sie Python auf Ihrem Rechner:
  • Nutzen Sie vorzugsweise den Windows Store oder laden Sie Python 3.13 herunter
  • Alternativ python.org herunter
  • Stellen Sie sicher, den Haken bei Add Python to PATH zu setzen

h:300


  • Erstellen Sie einem Ordner Aufgabe3 der nicht ein einem Netzwerk oder Cloud-Pfad liegt
  • und legen Sie darin ein Modul (Datei) calculation.py an
  • Öffnen Sie PowerShell (Windows) oder Terminal (Mac) und navigieren Sie in den Ordner indem Sie cd gefolgt von dem Pfad eingeben (z.B. cd C:\code\temp\Aufgabe3)
  • Geben Sie python -V ein, um sicherzustellen, dass Python installiert ist. Sollte eine Fehlermeldung auftreten, dass Python nicht gefunden wurde so haben Sie den Pfad nicht korrekt gesetzt. Folgen Sie dieser Anleitung

Wir möchten nun eine Funktion in estimate_max_hr() schreiben, die folgende User-Stories erfüllt:

Als Diagnostiker:in möchte ich die maximale Herzfrequenz eines Patienten auf Basis von Geschlecht und Alter schätzen, um die Leistungsfähigkeit zu beurteilen.


  • Erstellen Sie ein Modul my_functions.py mit folgendem Inhalt
    def estimate_max_hr(age_years : int , sex : str) -> int:
      """
      See https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4124545/ for different formulas
      """
      if sex == "male":
        max_hr_bpm =  223 - 0.9 * age_years
      elif sex == "female":
        max_hr_bpm = 226 - 1.0 *  age_years
      else:
        # der input() öffnet ein Eingabefenster für den Nutzer und speichert die Eingabe
        max_hr_bpm  = input("Enter maximum heart rate:")
      return int(max_hr_bpm)
    
    def build_person(first_name, last_name, sex, age) -> dict:
        """Returns a dictionary of information about a supervisor or subject."""
        person_dict = { "first_name" : first_name,
                 "last_name" : last_name,
                 "age" : age,
                 "estimate_max_hr" : estimate_max_hr(age,sex)}
        return person_dict
    
    def build_experiment(experiment_name, date, supervisor, subject) -> dict:
        """Returns a dictionary of information about an experiment."""
        experiment_dict = {"experiment_name" : experiment_name,
                "date" : date,
                "supervisor" :   supervisor,
                "subject" :   subject
                }
        return experiment_dict
    

  • Erstellen Sie ein Modul main.py mit folgendem Inhalt:
  • die Funktionen nutzt um ein Dictionary eines Experimentes incl. Versuchsperson und Vesuchsleitung zu erstellen und zu printen
  • Sie können zum Bearbeiten der Dateien jeden beliebigen Test-Editor oder VSCode verwenden
  • Das Modul main.py sollte die Abfrage if __name__ == "__main__": enthalten
  • Führen Sie das Skript aus, indem Sie python main.py in der Konsole eingeben
  • Laden Sie my_functions.py und main.py in ihrem GitHub-Repository hoch und teilen Sie den Link in Sakai
  • Schreiben Sie ein kurzen Kommentar, falls Sie Probleme mit der Python-Installation hatten und diese noch nicht funktioniert. In diesem Fall können Sie die Aufgabe auch in Google Colab lösen
  • 🤓 Sie können zudem optional versuchen, die my_functions.py in ein Paket zu packen