Python-Grundlagen Teil II

Zweiter Präsenzworkshop für junge Menschen ohne Vorkenntnisse - auf dem Weg zum 7. Kyū (Weißgurt).

Übungen

Aufgabe 1 - Wiederholung

Das nächste Programm soll eine Grundlage für einen Münzwechsler darstellen. Die Benutzerin gibt einen Geldbetrag von 1 bis 99 Cent ein. Der eingegebene Betrag soll dann in den Münzen mit 1, 2, 3, 10, 20 und 50 Cent ausgegeben werden - aber bitte so, dass möglichst wenig Münzen benötigt werden. Wenn du keinen Ansatz hast wie das geht, dann schau dir bitte mal an, welche unterschiedlichen Möglichkeiten der Division Python hat. Du kannst dividieren, wie du es aus der Schule kennst. Mit was \/\/ kannst du dir den Teil vor dem Komma ausgeben lassen, mit \%, also Modulo, den Teil hinter dem Komma. Falls dir Modulo noch nichts sagt, gibt es hier eine Erklärung. Überlege dir, was du eigentlich bei der Division in diesem Fall wirklich brauchst.

Aufgabe_1_Muenzwechsler.py
Wieviel Geld zahlst du ein? 74

Ausgabe:
50 Cent: 1
20 Cent: 1
2 Cent: 2

Aufgabe 2

Also Vorbereitung für einen Highscore: Der oder die Benutzende soll Namen oder Städte eintragen. Nach einem vordefinierten Abbruchcode (beispielsweise fertig) sollen die Namen in der Liste einmal vorwärts und einmal rückwärts ausgegeben werden. Verwende dabei nicht liste.sort().

Beispiel:

Gib eine Stadt ein: >Berlin

Gib eine Stadt ein: >Tokyo

Gib eine Stadt ein: >Paris

Gib eine Stadt ein: >fertig

Ausgabe:

Berlin, Tokyo, Paris

Paris, Tokyo, Berlin

Aufgabe 3

Fortsetzung zu Aufgabe 2 - die Liste soll mit Zahlen von 1 bis n ausgegeben werden. Frage die Benutzende, welchen Eintrag sie verändern möchte, beispielsweise Eintrag 3, also im Beispiel Paris. Erfolgt ein Eintrag, wird dieser geändert, wird ein leeres Feld übergeben, so soll der Eintrag gelöscht werden. Danach wird die Liste erneut entsprechend angepasst ausgegeben. Sorge mit einem try-except dafür, dass die Möglichkeit abgefangen wird, dass die Benutzende keine oder eine ungültige Zahl eingibt. Das sollte die Benutzende natürlich auch gesagt bekommen.

Aufgabe 4 - Zusatz

Baue eine vereinfachte Version des Spiels Galgenmännchens (engl. hangman). Aus einer Liste von Wörtern wird zufällig ein Wort ausgewählt. Für die jeweiligen Buchstaben werden Unterstriche angezeigt. Die Benutzerin kann einen Buchstaben raten. Rät sie richtig, wird dieser statt des leeren Unterstrichs dargestellt. Andernfalls wird stückchenweise ein Galgenmännchens mit Sternchen aufgebaut.

Ob ein Buchstabe in einem Wort enthalten ist, prüfst du mit dem Befehl „in“. Die Groß- und Kleinschreibung findet dabei Beachtung.

Galgenmaennchen.py
a = "Wort"
b = "o"
c = "O"

b in a
True

c in a
False

Grafikvorschlag:

_______
 |/      |
 |      (_)
 |      \|/
 |       |
 |      / \
 |
_|___

Aufgabe 5

Packe die einzelnen Funktionen des Programms in Funktionen. Es sollte also die Funktion geben print_list, change_list, remove_list.

Snippet 1

Lege ein neues Projekt und benenne es so, wie dein Spiel heißen soll. Lege eine „requirements.txt“ an und trage dort „pygame“ ein. Lege dann eine „main.py“ mit folgendem Inhalt an:

Game.py
import pygame, os, sys
from pygame.locals import *

pygame.init()
fpsClock = pygame.time.Clock()
surface = pygame.display.set_mode((800, 600))
background = pygame.Color(100, 149, 237)
image = pygame.image.load(`canvas.png`)
meeple = pygame.image.load(`meeple1g.png`)
player_x = 100
player_y = 100

Den Hintergrund kannst du dir hier und den Sprite hier herunter laden.

Snippet 2

Game.py
while True:
    surface.fill(background)
    surface.blit(image, (0,0))

    pygame.display.update()
    fpsClock.tick(30)

Snippet 3 - Vorbei

Game.py
for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()

Snippet 4 - Bewegung

Game.py
if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                ...

Aufgabe 6

Sorge dafür, dass deine Figur sich mit den Cursor-Tasten bewegen lässt.

Aufgabe 7

Derzeit kann der Sprite noch vom Spielfeld fallen. Das verhindere bitte.

Aufgabe 8

Füge einen zweiten Sprite ein. Den kannst du hier herunterladen. Sorge dafür, dass dieser sich mit A, S, D und W bewegen lässt und dass dieser nicht vom Spielfeld fallen kann.

Aufgabe 9

Gibt über ein print „Treffer“ aus, wenn sich die beiden Spielfiguren berühren.

Aufgabe 10

Überlege dir, wie du Teile gut in Funktionen packen kannst, so dass der Code übersichtlicher wird und im Idealfall Wiederholungen vermieden werden.

Aufgabe 11

Verändere den zweiten Sprite so, dass er zufällig über das Spielfeld läuft - natürlich ohne herunterzufallen. Mit deiner Ausgangsfigur sollst du versuchen, vor ihm zu fliehen. Wenn es zu einem Kontakt kommt, dann soll nicht nur Treffer ausgegeben werden, sondern auch, der wievielte.

Cheatsheet

Cheatsheet.py
while test != 10:
   print("Tue Dinge")
# While-Schleife - läuft solange, wie test ungleich 10 ist

while True:
# Endlosschleife

from random import randrange
# Importiert das Modul bzw. die Bibliothek für Zufallszahlen innerhalb eines bestimmten Rahmens

count = randrange(1, 100)
# weist der Variable count eine Zufallszahl von 1 bis 100 zu.

list_of_Numbers = [52, 'foo', 93.25]
# Legt eine Liste mit dem Integer 52, dem String 'foo' und der Gleitkommazahl 93,25 an

list_of_Numbers[1]
# gibt 'foo' aus

liste.append('bar')
# ergänzt die Liste um den String 'bar'

liste[3] = 'bahr'
# verändert das 4. Element der Liste von 'bar' zu 'bahr'

liste.sort()
liste.sort(reverse=True)
# sortiert eine Liste vorwärts und rückwärts (geht aber nicht bei gemisten Listen)

liste.insert(0, 5)
# fügt an Stelle 0 den Integer 5 ein

liste.remove('bahr')
# entfernt das Element 'bahr' aus der List

liste.pop[0]
# entfernt das 0. Element aus der Liste

len(list_of_Numbers)
# gibt die Anzahl der Elemente einer Liste ausgibt

for number in list_of_Numbers:
  print(number)
# iteriert über eine Liste

[print(number) for number in list_of_Numbers]
# iteriert über eine Liste

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

# nimmt mit add(3, 5) zwei Zahlen entgegen und gibt das Ergebnis c zurück

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

# wie zuvor, aber ohne den Umweg über c

def calc(a,b):
    c = a + b
    d = a - b
    return c, d

print(calc(5, 4))

# Rückgabe von mehr als einem Wert, Ergebnis ist ein sog. Tupel

try:
    print("Läuft!")
except Exception:
    print("Fehler!")

# Kann Fehler im try-Teil abfangen. Falls es zu einem Fehler kommt, wird der try-Teil ausgeführt.