Freifach Einführung ins Programmieren
Direkt-Link: https://fginfo.ksbg.ch/ffprog
- Jeweils Dienstags, 16:25 - 17:58 im H21.
- Nach Möglichkeit soll ein eigener Laptop mitgebracht werden.
- Wir programmieren mit TigerJython.
Programmier-Projekt
Wer programmiert die schlauste Schlange?
Version 0.1 (vom 8.3.2017): tjsnake.zip. Tester sind willkommen.
Anleitung
- Archiv entpacken (wirklich entpacken, nur weil Windows die Dateien im Archiv anzeigt, sind diese deswegen noch nicht entpackt).
- game.py in Tigerjython starten.
- Für eigene Strategie ivo_beispiel_strategy.py kopieren und wie folgt benennen: name_xyz_strategie.py, nur Kleinbuchstaben a-z und _ (underscore). Die Datei muss mit dem eigenen Namen beginnen und mit strategie.py aufhören.
- In game.py:
- Die eigene Strategie importen (ganz oben im Code)
- Eigene Strategie ganz unten in game.py eintragen.
- Code studieren, Fragen stellen.
Dokumentation
Entweder direkt Kommentare im Code oder online.
TigerJython
- Lehrgang: http://www.tigerjython.ch
- Download der Programmierumgebung: online oder schulintern.
Programm
Dienstag 19. 6. 2018
Vorschlag 1
Einblick in die “dynamische Programmierung”, was nichts direkt mit Computer-Programmierung, sondern mit einer Lösungstrategie für rekursive Probleme zu tun hat.
Problem: Bestimme die durchschnittliche Anzahl Versuche beim Zahlenratespiel, a) bei gegebener Strategie, b) bei gleichzeitiger Bestimmung der optimalen Strategie.
Vorschlag 2
TicTacToe:
- Gegeben ein 3×3-Array mit Einträgen 0, 1 oder 2 (leer, x, o).
- tictactoe.py
from gpanel import * # leeres Feld dim = 10 # Anzahl Felder winlen = 5 # Anzahl fuer Gewinn feld = [[0 for y in range(dim)] for x in range(dim)] player = 1 filled = 0 winner = 0 # Startpunkt x,y # Vektor vx,vy def testLine(x,y,vx,vy,feld): global winlen,dim what = feld[x][y] count = 1 if what>0 else 0 while True: x+=vx y+=vy if x<0 or y<0 or x>=dim or y>=dim: break if feld[x][y]==what: count+=1 else: what = feld[x][y] count=1 if what>0 else 0 if feld[x][y]==0: count = 0 if count==winlen: return what return 0 def win(feld): for x in range(dim): combos = [[x,0,0,1],\ [0,x,1,0],\ [0,x,1,1],\ [x,0,1,1],\ [x,dim-1,1,-1],\ [0,x,1,-1]] for combo in combos: winner = testLine(combo[0], combo[1], combo[2], combo[3],feld) if winner>0: return winner return 0 def ausgabe(feld): clear() # Fenster loeschen dim = len(feld) for i in range(1,dim): # Raster line(0,i,dim,i) line(i,0,i,dim) for x in range(dim): for y in range(dim): if (feld[x][y]==1): line(x+0.1, y+0.1, x+0.9,y+0.9) line(x+0.1, y+0.9, x+0.9,y+0.1) elif (feld[x][y]==2): move(x+0.5, y+0.5) circle(0.4) def onMousePressed(x, y): global feld global player global filled global winner global dim x = int(x) y = int(y) if winner>0 or filled == dim*dim: feld = [[0 for y in range(dim)] for x in range(dim)] player = 1 filled = 0 winner = 0 elif feld[x][y]==0: filled+=1 feld[x][y] = player player = 3-player ausgabe(feld) winner = win(feld) if (winner>0): print("Spieler %d hat gewonnen!" % winner) elif (filled == dim*dim): print("Unentschieden...") makeGPanel(0,dim-0.001, 0,dim-0.001,mousePressed = onMousePressed) lineWidth(5) ausgabe(feld)
- Gegeben ein 3×3-Array wie oben. Stellen Sie fest, ob schon jemand gewonnen hat.
- Programmieren Sie ein Spiel für 2 menschliche Spieler, die abwechslungsweise die Koordinaten eingeben. Die Eingabe soll überprüft werden.
- Programmieren Sie ein Strategie, die gegen einen menschlichen Spieler spielt.
Dienstag 12. 6. 2018
Zahlenraten:
Eingabe einer Zahl: (siehe auch(
zahl = inputInt("Bitte eine Zahl")
Generierung einer Zufallszahl:
from random import randint zufall = randint(0,100) # Zahlen von 0 bis und **mit** 100
- lehrkraefte/blc/informatik/ffprg1-2018/ffprg1-2018.txt
- Last modified: 2018/06/26 17:51
- by Ivo Blöchliger