heyde.schule
Aufgaben zur Programmierung: Blackjack

Aufgabe 1:

  1. Erstelle eine Python-App, die zunächst eine Liste mit den 52 Pokerkarten erstellt (Karo, Herz, Pik, Kreuz, 2,3,4,5,6,7,8,9,10,Junge,Dame, König, Ass) erstellt. Dabei soll jede Karte wiederum als Liste abgespeichert werden, bestehend aus ihrer Farbe, ihrer Bezeichnung und ihrem Wert.
  2. Erkundige dich über die Wertigkeiten beim Blackjack selbstständig und vervollständige so das Deck.
  3. Nach der Definition soll nun das Deck gemischt werden (das Deck ist eine Liste). Danach soll die erste Karte des Decks dem Nutzer als Text ausgegeben werden.
  4. Der Nutzer entscheidet sich, ob er nun noch eine Karte möchte oder der Dealer am Zug ist.
  5. Das Ganze wiederholt sich, bis der Spieler den Dealer an die Reihe kommen lässt, oder die Summe der Werte der aufgedeckten Karten 21 übersteigt. Ist die Summe an einem Punkt genau 21 hat der Spieler sofort gewonnen. Übersteigt die Summe an einem Punkt 21, so hat der Spieler sofort verloren.
  6. In jedem anderen Fall wird nun (für den Dealer) so oft eine Karte vom Stapel gezogen, bis seine Karten ebenfalls einen Wert von 21 übersteigen. Wenn das passiert, gewinnt der Spieler. Hat der Dealer aber zwischendurch eine Wertsumme, die über der des Spielers liegt, verliert der Spieler.
  7. Alle soeben aufgedeckten Karten, sowie die insgesamt aktuell aufgedeckten Karten sollen für jeden Spielschritt ausgedruckt werden.

Hinweise:

  • Deck erstellen:
Deck = [['Herz','Junge',10],['Pik','Dame',10],...
  • Erstelle für die aufgedeckten Karten des Spielers und des Dealers jeweils eine Liste und befülle sie mit den Karten (Karten sind selbst auch listen mit 3 Elementen), die du aus dem Deck entnimmst.
  • Die folgende Funktion mischt ein Liste:
from random import *
shuffle(Deck)
  • Die folgende Funktion verkleinert eine Liste um das nte Element und gibt dieses Element zurück:
karte = Deck.pop(n)
  • Die folgende Funktion fügt einer Liste ein Element hinzu:
Spielerkarten.append(karte)
  • Die Wertsummen sollten zunächst in separaten Variablen gespeichert werden.

🛡🔑🛡

Aufgabe 2

  1. Erweitere das Spiel so, dass zum Berechnen der Spielerkartenwerte/ der Dealer Kartenwerte eine selbstgeschriebene Funktion mit dem Namen berechneKartenwertsumme(Liste) verwendet wird.
  2. Die Funktion soll eine Liste aus Karten als Eingabewert erwarten (Also eine Liste aus Listen) und die Summe der Kartenwerte der Liste als Integer zurückgeben.

Tipp:

  • Die Kartenwerte stehen an Indexposition 2 in den Kartenlisten. Es muss also die übergebene Liste mithilfe einer for-Schleife durchgegangen werden und dann jeweils der dritte Wert auf die Summe (die vorher mit dem Wert 0 angelegt wurde) addiert werden. Danach wird die Summe zurückgegeben.


🛡🔑🛡


Aufgabe 3:

  1. Erweitere das Spiel so, dass statt die Karten als Unterlisten zu printen, eine Funktion printKarte(Liste) benutzt wird, die die Liste Stück für Stück als String zusammensetzt und dann auf der Konsole ausgibt.
  2. Auf diese weise können Colorcodes benutzt werden, um Text farbig darzustellen. Implementiere Colorcodes in die Kartentexte.

Tipp:

  • Die Colorcodes können oben einmal definiert werden, anstatt sie jedes Mal neu in die String zu schreiben:
BLACK = '\033[30m'
RED = '\033[31m'
GREEN = '\033[32m'
YELLOW = '\033[33m' # orange on some systems
BLUE = '\033[34m'
MAGENTA = '\033[35m'
CYAN = '\033[36m'
LIGHT_GRAY = '\033[37m'
DARK_GRAY = '\033[90m'
BRIGHT_RED = '\033[91m'
BRIGHT_GREEN = '\033[92m'
BRIGHT_YELLOW = '\033[93m'
BRIGHT_BLUE = '\033[94m'
BRIGHT_MAGENTA = '\033[95m'
BRIGHT_CYAN = '\033[96m'
WHITE = '\033[97m'
RESET = '\033[0m' # called to return to standard terminal text color
  • Die Benutzung erfolgt, indem man dann die vordefinierten Far-Variablen mit den eigenen Strings verknüpft:
print(BLACK + "black" + RESET)
print(RED + "red" + RESET)
print(GREEN + "green" + RESET)
print(YELLOW + "yellow" + RESET)
print(BLUE + "blue" + RESET)
print(MAGENTA + "magenta" + RESET)
print(CYAN + "cyan" + RESET)
print(LIGHT_GRAY + "light gray" + RESET)
print(DARK_GRAY + "dark gray" + RESET)
print(BRIGHT_RED + "bright red" + RESET)
print(BRIGHT_GREEN + "bright green" + RESET)
print(BRIGHT_YELLOW + "bright yellow" + RESET)
print(BRIGHT_BLUE + "bright blue" + RESET)
print(BRIGHT_MAGENTA + "bright magenta" + RESET)
print(BRIGHT_CYAN + "bright cyan" + RESET)
print(WHITE + "white" + RESET)

Aufgaben zur Programmierung: Ratespiel
Aufgabe 1

  1. Erstelle ein Programm, welches zu Beginn eine zufällige Zahl in einer Variable speichert. Diese zahl ist die "Lösungszahl".
  2. Danach wird der Benutzer wiederholt nach einer Zahl gefragt, welche er eingeben soll.
  3. Ist die Zahl die gemerkte Zahl, so beendet sich das Programm, sonst wiederholt sich die Frage nach der Benutzerzahl.


  • Befehl für zufällige Zahl:
    • randint(untere Grenze, obere Grenze)
  • Damit der Befehl funktioniert muss die random-Bibliothek eingebunden werden. Die erste Zeile muss also lauten:
    • from random import *


    • Bonus: Alle möglichen fehlerhaften Eingaben werden abgefangen/führen nicht zum Abbruch des Programms (try - except)

    Lösung:

    🛡🔑🛡

    Aufgabe 2:

    • Erweitere das Programm so, dass, nach jedem erfolglosen Rateversuch, dem Nutzer zurückgemeldet wird, ob seine geratene Zahl zu groß oder zu klein war.

    Lösung:

    🛡🔑🛡

    Aufgabe 3:

    • Erweitere das Programm so, dass der Nutzer die Obergrenze der Zufallszahl selbst bestimmen darf.
    • Fange alle Fehler bei dieser Eingabe ab, und frage solange nach einer Obergrenze, bis eine gültige Zahl eingegeben wurde.

    Lösung:

    🛡🔑🛡

    Aufgabe 4

    • Erweitere das Programm so, dass als Obergrenze nur Zahlen akzeptiert werden, die größer als die Obergrenze sind.

    Lösung:

    🛡🔑🛡

    Aufgaben zur Programmierung: Auslosen von Namen
    Aufgabe 1

    1. Erstelle ein Programm, welches den Nutzer wiederholt nach der Eingabe von Namen fragt und diese Namen in eine Liste speichert.
    2. Gibt der Benutzer statt eines Namens das Wort "ende" ein, so wird die Eingabe der Namen beendet und die Liste wird dem Nutzer ausgegeben.

    Hinweis:

    • Die Liste muss zuvor mit [] initialisiert werden.
      • Bsp:

      liste = []
      • Der Befehl zum Hinzufügen eines Elements zu einer Liste lautet liste.append(element), wobei liste die liste ist und element das anzuhängende Element:
        • Bsp:

        liste.append('Thomas Müller')

        Musterlösung:

        🛡🔑🛡

        Aufgabe 2

        1. Erweitere das Programm so, dass das Wort ende in jeder beliebigen Schreibweise akzeptiert wird. (Ende, eNdE, enDe usw...)

        Hinweis:

        lowertext = originaltext.lower()
        uppertext = originaltext.upper()
        Musterlösung mit lower():
        🛡🔑🛡
        Aufgabe 3

        1. Erweitere das Programm so, dass nach der Eingabe der Liste ein zufälliger Name aus der Liste ausgegeben wird.

        Hinweis:

        • die Funktion len(liste) gibt die Anzahl der Elemente einer Liste zurück. Sie wird auf einer Liste ausgeführt.
        • (Alternativ kann auch die Methode __len__() verwendet werden.)
        • Bsp:
        anzahlElemente = len(liste)

        Alternativ:

        anzahlElemente = liste.__len__()

        Musterlösung:

        🛡🔑🛡

        Aufgabe 4

        1. Erweitere das Programm so, dass nach der Eingabe der Liste nach einer Anzahl der zufällig auszugebenden Namen gefragt wird. Danach wird genau diese Anzahl an zufälligen Namen aus der Liste ausgegeben. 
        2. Wird eine größere Zahl als die Anzahl der Elemente der Liste gefordert, so soll der Benutzer die Eingabe wiederholen, bis er eine gültige Zahl eingibt.
        3. Es dürfen keine Elemente der Liste doppelt ausgegeben werden.


        Hinweise:

        • pop() ist eine Methode von Listen, die das n-te Element der Liste dauerhaft aus der Liste entfernt und dieses Element zurückgibt (sodass man es sich in einer Variable speichern/"merken" kann.
        element_an_position_n = liste.pop(n)
        • die range(n)-Funktion erzeugt eine Liste mit n Elementen. Das in Kombination mit der for-Schleife erzeugt automatisch n Schleifendurchläufe.
        • Möchte ich eine Aktion z.B. 6 Mal wiederholen schreibe ich:
        for i in range(5):
        • Die Durchlaufvariable i ist dabei zweitrangig, sie muss angegeben werden und enthält im ersten Durchlauf den Integer-Wert 1, dann den Wert 2, bis zum Wert 5. Wenn sie nicht benötigt wird, ist das egal, ihre Angabe im Schleifenkopf ist aber leider nicht vermeidbar.
        Sonderaufgabe

        1. Programmiere eine Funktion inputInteger(a,b), die eine Ganzzahl vom Benutzer erfragt und dies solange wiederholt, bis dieser eine gültige Ganzzahl zwischen Grenze a und Grenze b eingibt und diese dann zurückgibt.
        def inputInteger(a,b):


        Pluspunkte inf2

        inf2
        Winterhalbjahr 24/25
        (05. August 2024 - 16. Februar 2025)
        8950
        2
        0815
        2
        0812
        2
        7272
        2
        6128
        1
        0438
        1
        0305
        1
        0804
        0
        0161
        0
        0
        3690
        0
        7385
        0
        0710
        -1

        Pluspunkte inf1

        inf1
        Winterhalbjahr 24/25
        (05. August 2024 - 16. Februar 2025)
        1003
        4
        12345
        3
        1379
        3
        1348
        2
        0406
        1
        1812
        1
        1902
        1
        1312
        0
        2405
        0
        0357
        -2
        2509
        -2
        0

        Vorträge

        Vortragsmodalitäten:

        • Partnerarbeit (Freie Wahl) oder Einzelarbeit
        • Präsentationsdauer min. 10, max. 15 Minuten
        • Themen sind frei wählbar, der Arbeitsauftrag lautet: Haltet einen Vortrag über angewandte Informatik in einem selbstgewählten Themengebiet. Er soll einen Ausblick auf einen Teilbereich der angewandten Informatik geben. Den konkreten Teilbereich bestimmt ihr selbst. Ordnet das Thema auch geschichtlich ein und berichtet über Vorteile der Anwendung der Informatik in euren Themengebieten, wie auch über Hürden, die diese mit sich bringen. Gebt einen Ausblick in die Zukunft. Umfang und Tiefgang des Themas bestimmt Ihr. Es muss ein informativer, unterhaltsamer, fachlich korrekter Vortrag entstehen, und Rückfragen kompetent beantwortet werden. Im Anschluss findet eine Reflexion statt. Pflichtinhalte sind:
          • Strukturierte Einordnung der Bedeutung des Anwendungsgebiets für die Menschheit
          • Mindestens oberflächliche Erklärung der Funktionsweise ausgewählter Beispiele
          • Erklärung jeglicher Fachbegriffe in einfacher Sprache
          • Angabe von Quellen
        • Beispiel: Im Fachbereich der Medizin wurden an verschiedensten Stellen informatische Konzepte angewandt, das reicht von der digitalen patientenverwaltung, über die Diagnose von Krankheiten und der KI-Erkennung von Krebsarten über bildgebende Verfahren bis hin zur robotischen Operation. Welche Entwicklung hat es in welcher Reihenfolge gegeben, was steht noch bevor, welche Probleme könnte es dabei geben und welche Vorteile hat man jetzt schon deswegen? Wie funktionieren die informatischen Lösungen technisch (grob zusammengefasst)?
        • Wird ein Thema doppelt gewählt, muss sich der Inhalt ergänzen, nicht überschneiden. Die Abstimmung unter diesen Gruppen halten die Gruppen selbst.
        • Übersichtliche Präsentation muss ungefragt, digital und mit Namen versehen, noch vor dem Vortrag, per Mail gesendet werden. (mail@paulheyde.de)
        • Das Abgabeformat ist pdf, pptx, ppt, odp, html oder mp4.
        • Bewertungskriterium: 25% Präsentationsdokument, 25% Präsentation, 25% Nachfragensicherheit, 25% Reflexion
          Tipp:
        • Vortragsbeginn: 3. September (Angepeilt ist 1 Vortrag pro Doppelstunde)
        • Reihenfolge der Vorträge: Erst freiwillige, dann zufällig

        Wissenschaft Informatik

        Klausurrelevante Themen:

        • Wissenschaft Informatik (Skript)
        • Algorithmentheorie (Skript)
        • Pythonprogrammierung:
          • Zuweisungsoperationen (x = 4), Variablennamen und Variablenzuweisung
          • Funktionen in Python (Funktionsdefinition, Funktionsaufruf) (Siehe Skript Pythonprogrammierung)
          • Übertragung der Pythonprogrammierung auf die dahinterarbeitende Hardware (Siehe Skript Algorithmenvisualisierung)
        • Die Klausur ist Multiple-Choice, die zwei letzten Themen werden nur angerissen, z.B. wird ein Beispielcode gezeigt und es soll erklärt werden, wie oft welche Variablen neu belegt werden, bzw. wo ggf. Fehler entstehen können usw.
        • Bei Fragen bitte per Mail an mich wenden


        Link zum Skript zum Thema Wissenschaft Informatik (vollumfänglich Klausurrelevant!)

        Link zum Skript zum Thema Algorithmentheorie (vollumfänglich Klausurrelevant!)

        Link zum Skript zum Thema Pythonprogrammierung (teilweise Klausurrelevant!)

        • Hier sind nur die Folien bis zu den Verzweigungen/Schleifen relevant.

        Link zum Skript Programmablaufvisualisierung (teilweise Klausurrelevant!)

        • Dieses Skript enthält ausführliche und bildhafte Erläuterungen rund um das Thema Programmablauf. Dabei wird auf die Rolle des Prozessors/Computers eingegangen und detailiert die Vorgehensweise des Computers beim Ablauf von Programmen erklärt. Bitte bis zur zur letzten Oktoberwoche anschauen.
        • Danach werden vor der Klausur nochmal Fragen geklärt. Die Vorträge verschieben sich.


        Python Online-Interpreter

        Für das Testen der Übungsaufgaben werden folgende Interpreter empfohlen:

        https://www.online-python.com/

        https://www.programiz.com/python-programming/online-compiler/