bots

Hallo!

Hier ein paar Abschnitte zu Python – wir beschränken uns auf das, was wir für den Bots-Workshop auf jeden Fall brauchen, und werden das am Beispiel eines einfachen TicTacToe-Spiels durchnehmen.

Hier die kurzen Kapitel:

  1. Schleifen
  2. Datentypen und Felder/Listen

1. Schleifen

Wie die meisten Programmiersorachen gibt es in Python die Möglichkeit, Dinge zu wiederholen.

Methode 1: wiederhole 5 mal…

Kopiert Euch dieses Stück Code und führt es aus:

for x in range(6):
   print(x) 
else:
   print("Endlich fertig!")

Diese Schleifen lassen sich auch „schachteln“:

adj = ["red", "big", "tasty"] 
fruits = ["apple", "banana", "cherry"] 
for x in adj:
   for y in fruits:
     print(x, y)

Methode 2: „wiederhole solange bis“

Natürlich kann man unser erstes Beispiel auch als while-Schleife darstellen:

x=0 
while (x<6):
      print(x) 
      x = x + 1 
else:
      print ("Endlich fertig!")

Und jetzt ein etwas längeres Stück Code. Einfach mal ausprobieren:

import random  
n = 20  
rate_mal= int(n * random.random()) + 1  
guess = 0  
while guess != rate_mal:
     guess = int(input("Neue Zahl: ") )
     if guess > 0:
          if guess > rate_mal:
               print ("Zahl zu groß" )
          elif guess < rate_mal: 
               print ("Zahl zu klein" )      
     else:           
          print ("Schade, Sie geben also auf!" )          
          break  
else:      
     print ("Glückwunsch! Das war's!")

2. Datentypen und Felder /Listen

Wir haben anfangs schon ein Feld benutzt, ohne es zu merken: das Ding in den eckigen Klammern

fruits = ["apple", "banana", "cherry"]

Beispiel: das Tic Tac Toe-Feld als Liste .

Ein TicTacToe-Feld kann man sich ja auch als Liste von Zahlen vorstellen:

Durchnummeriertes Feld bei TicTacToe

in Python würde dieses Feld so aussehen:

spielfeld = [" ",  
               "1","2","3", 
                "4","5","6",
                "7","8","9"]

…oder ohne Zeilenumbrüche geschrieben:

spielfeld = [" ","1","2","3","4","5","6","7","8","9"]

Jedes Element eines Feldes hat eine Indexnummer, das erste hat die Indexnummer 0. Deshalb können wir unser Spielfeld so ausdrucken:

spielfeld = [" ","1","2","3","4","5","6","7","8","9"] 
# Spielfeld ausgeben  
print (spielfeld[1] + "|" + spielfeld[2] + "|" + spielfeld[3] )  
print (spielfeld[4] + "|" + spielfeld[5] + "|" + spielfeld[6] )  
print (spielfeld[7] + "|" + spielfeld[8] + "|" + spielfeld[9] )

So, un jetzt können wir statt der Zahlen einen aktuellen Spielstand in das Feld eingeben (bestehend aus X, O und noch unbesetzten Feldern):

spielfeld = [" ","X"," ","X"," ","O"," ","X"," ","O"] 
# Spielfeld ausgeben 
print (spielfeld[1] + "|" + spielfeld[2] + "|" + spielfeld[3] ) 
print (spielfeld[4] + "|" + spielfeld[5] + "|" + spielfeld[6] ) 
print (spielfeld[7] + "|" + spielfeld[8] + "|" + spielfeld[9] )

Ihr seht: die Indexzahlen funtionieren weiterhin; das zweite Element der Liste ist ein „X“…

Stellt Euch vor, wir haben ein größeres Spielfeld (z. B. für Vier gewinnt)

—> Das in einem Feld abzuspeichern wir schnell unübersichtlich…

Lösung: zweidimensiomale Felder.

Für Vier gewinnt wäre das ein Feld von 10 x 10, und es gibt folglich auch zwei Indices /wie x und y in einem Koordinatensystem.

Die allgemeine Schreibweise Feld[0,0] spricht das Feld in der linken, oberen Ecke an, die Schreibweise Feld[3,3] das Feld in der Mitte usw. Warum 0 und warum 3 und nicht 4? Ganz einfach, weil bei fast allen Programmiersprachen die Nummerierung bei 0 beginnt und nicht bei 1.

Übertragen auf unser TicTacToe-Beispiel würde das zweidimensionale Feld so aussehen:

feld = [[1, 2, 3], [ 4, 5, 6], [7, 8, 9]]

beziehungsweise

feld = [["X", " ", "X"], ["O","O", " "], [" ", "X", "O"]]

Jetzt sind also die Spilefelder in Zeilen gruppiert. Um ein einzelnes Feld anzusprechen, brauchen wir zwei Indexziffern (also sprich „Zeile“ und „Spalte“:

feld = [["X", " ", "X"], ["O","O", " "], [" ", "X", "O"]]
print (feld[2][2])

Kopiert Euch den Code und führt ihn aus. Welchse Feld wird ausgegeben?

Hier eine bildhafte Repräsentation:

Um das neue Spielfeld komplett auszugeben, brauch Ihr eine geschachtelte Schleife:

feld = [["X", " ", "X"], ["O","O", " "], [" ", "X", "O"]]
for zeile in feld:
    for spalte in zeile:
        print(spalte,end = " ")
    print()

— Ende —

Wer von Euch sich jetzt etwas unsicher/überfordert fühlt, dem oder der würde ich raten, sich mit diesem Python-Tutorial zu beschäftigen:

https://cscircles.cemc.uwaterloo.ca/de/

Hier vor allem die Kapitel 2 und 6

sowie

https://snakify.org/de/

Hier vor allem Kapitel3, 4 und 9