Python-Beispiele

1.1.2. Python-Beispiele#

Wie der Live-Code funktioniert und warum man auf einer Website überhaupt Python-Code ausführen kann, ist technisch ziemlich aufwändig in der Umsetzung.

Wichtig für Sie ist, was Sie auf der Website konkret tun können:

  • Sie können Python-Programme ausführen und sie direkt verändern.

Installieren von Paketen

  • Sie können Python-Pakete installieren und nutzen.

  • Python-Pakete stellen Ihnen Funktionalitäten bereit, sodass Sie viele Dinge nicht komplett selbst programmieren müssen.

  • Ein Beispiel ist das Paket pyfiglet: Damit können Sie Schriftbanner erzeugen.

Wenn Sie die folgende Code-Zelle ausführen, wird das Paket installiert. Anschließend „importieren“ wir es und nutzen dann die Banner-Funktion.

!pip install pyfiglet
import pyfiglet

myname = "Christina"
print(pyfiglet.figlet_format(f"Hello {myname}"))

Hinweis

Sie müssen den Programmcode hier noch nicht verstehen. Die Beispiele zeigen nur, was auf der Website möglich ist.

Programmierte Animationen

  • Sie können im Live-Code Animationen erstellen und abspielen.

# -----------------------------
# Einstellungen
# -----------------------------

myname = "Christina"         # Dein Name
fontsize = 28                # Schriftgröße
letter_spacing = 0.9         # Abstand zwischen Buchstaben (kleiner = enger, größer = weiter)
frame_interval = 60          # Geschwindigkeit der Animation (größer = langsamer)
random_colors = True         # True = zufällige Farben, False = schwarz

# -----------------------------
# Programm
# -----------------------------

%matplotlib inline
import matplotlib as mpl
mpl.rcParams["animation.html"] = "jshtml"
mpl.rcParams["animation.embed_limit"] = 50

import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import random

start_height = 1.4            # Startposition der Buchstaben (größer = weiter oben)
fly_frames = 10               # Dauer des Einfliegens (größer = langsamer)
target_height = 0.5           # Zielposition (vertikale Mitte)
message = f"Hello {myname}"   # Schriftzug

fig, ax = plt.subplots(figsize=(8, 2))
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
ax.axis("off")

font = dict(fontfamily="DejaVu Sans Mono", fontsize=fontsize)

# Horizontale Positionen automatisch berechnen
dx = letter_spacing / max(1, len(message) - 1)
x0 = 0.5 - dx * (len(message) - 1) / 2
xs = [x0 + i * dx for i in range(len(message))]

# Textobjekte erzeugen
letters = []
for i, ch in enumerate(message):
    color = (
        random.random(), random.random(), random.random()
    ) if random_colors else "black"

    txt = ax.text(
        xs[i],
        start_height,
        ch,
        ha="center",
        va="center",
        color=color,
        **font
    )
    letters.append(txt)

# Animationsfunktion
def update(frame):
    for i, txt in enumerate(letters):
        start = i
        end = i + fly_frames

        if frame < start:
            y = start_height
        elif frame >= end:
            y = target_height
        else:
            y = start_height + (target_height - start_height) * (frame - start) / fly_frames

        txt.set_position((xs[i], y))
    return letters

ani = FuncAnimation(
    fig,
    update,
    frames=len(message) + fly_frames + 1,
    interval=frame_interval,
    blit=True
)

plt.close(fig)
ani

Mini-Aufgabe

  • Ändern Sie im Block „Einstellungen“ fontsize und frame_interval und lassen Sie die Zelle erneut laufen.

  • Schalten Sie random_colors auf False (oder wieder auf True) und beobachten Sie den Effekt.

Komplexere Animationen

Oder, falls Ihnen das immer noch zu langweilig ist: Lassen Sie einen Roboter den Ausweg aus einem Labyrinth finden.

  • Die folgende „Welt“ enthält einen Roboter (blau), das Ziel (lila), begehbare Zellen (hellgrau) und unbegehbare Hindernisse (dunkelgrau). Wenn Sie auf „Run“ klicken, werden Roboter und Ziel zufällig in einer Umgebung platziert – einem Raster aus 5×7 Kacheln.

  • Wir möchten beobachten, wie der Roboter (irgendwann) ans Ziel kommt.

%matplotlib inline
import matplotlib as mpl
mpl.rcParams["animation.html"] = "jshtml"
mpl.rcParams["animation.embed_limit"] = 50


import roboworld as rw

world = rw.complex_maze(nrows=5, ncols=7)
world.show()

Mini-Aufgabe

Die Position der Hindernisse, des Roboters und des Ziels wird per Zufall bestimmt. Testen Sie das, indem Sie die Zelle erneut mit „Run“ ausführen.

In den folgenden Code-Zellen wird festgelegt, dass der Roboter nur nach vorne laufen und sich um 90° nach links drehen kann. Wie oft er sich vor dem nächsten Schritt nach links dreht, entscheidet der Zufall:

  • 0× links: geradeaus weiter

  • 1× links: nach links

  • 2× links: umdrehen

  • 3× links: nach rechts (dreimal links ist einmal rechts)

Führen Sie die folgende Code-Zelle aus, um den Zufallslauf (random walk) des Roboters zu beobachten.

import random as rnd

%matplotlib inline
import matplotlib as mpl
mpl.rcParams["animation.html"] = "jshtml"
mpl.rcParams["animation.embed_limit"] = 50


def random_move(robo):
    turns = rnd.choice([0,1,2,3]) # zufällig 0 ... 3 mal nach links drehen
    for _ in range(turns):
        robo.turn_left() # so oft nach links drehen wie oben gewählt
    if not robo.is_wall_in_front():
        robo.move()


robo = world.get_robo()
robo.disable_print()
while not robo.is_at_goal():
    random_move(robo)

rw.animate(world)

Mini-Aufgabe

  • Ändern Sie nrows und ncols und erzeugen Sie eine kleinere Welt (z. B. 4×6).

  • Hinweis: Die Code-Zellen bauen aufeinander auf. Die Animation nutzt die zuvor erzeugte Welt. Gehen Sie daher so vor:

    • Führen Sie zuerst die Welt-Zelle (oben, complex_maze(...)) mit „Run“ aus.

    • Starten Sie danach die Animations-Zelle (hier) mit „Run“.