Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
lehrkraefte:snr:informatik:python:wichtiges-zur-projektarbeit [2021/11/09 15:39] Olaf Schnürer [Allgemeines und Zeitplan] |
lehrkraefte:snr:informatik:python:wichtiges-zur-projektarbeit [2022/05/23 12:40] (current) Olaf Schnürer [Allgemeines und Zeitplan] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Wichtiges zur Projektarbeit der Klasse | + | ====== Wichtiges zur Projektarbeit der Klassen |
Ich habe versucht, einige wichtige Informationen zusammenzustellen. Bei Fragen oder Bemerkungen bitte direkt an mich wenden. | Ich habe versucht, einige wichtige Informationen zusammenzustellen. Bei Fragen oder Bemerkungen bitte direkt an mich wenden. | ||
Line 9: | Line 9: | ||
* Arbeit an den Projekten in 4 Doppellektionen (oder auch ab sofort): 17. und 24. November, 1. und 8. Dezember 2021 | * Arbeit an den Projekten in 4 Doppellektionen (oder auch ab sofort): 17. und 24. November, 1. und 8. Dezember 2021 | ||
* Abgabe der lauffähigen Python-Programme: | * Abgabe der lauffähigen Python-Programme: | ||
- | * 15. Dezember (letzte Doppellektion vor Weihnachten): | + | * 15. Dezember (letzte Doppellektion vor Weihnachten): |
* Wer will, dass sein Python-Programm im Rahmen der Kurs-Seiten (mit dem dortigen Copyright) veröffentlicht wird, gibt mir Bescheid (am besten mit der Abgabe). | * Wer will, dass sein Python-Programm im Rahmen der Kurs-Seiten (mit dem dortigen Copyright) veröffentlicht wird, gibt mir Bescheid (am besten mit der Abgabe). | ||
- | * ? Jede Gruppe darf selbst eine Note vorschlagen | + | * Alle Mitglieder einer Gruppe bekommen dieselbe Note. |
+ | * Jede Gruppe darf selbst eine Note vorschlagen, am Ende entscheide aber ich. | ||
===== Themenwahl ===== | ===== Themenwahl ===== | ||
Line 27: | Line 28: | ||
===== Ehrlichkeit | ===== Ehrlichkeit | ||
- | alias " | + | alias " |
* Jede Gruppe bearbeitet ihr Projekt eigenständig. Ausdrücklich erlaubt ist es, Hilfe von Lehrpersonen, | * Jede Gruppe bearbeitet ihr Projekt eigenständig. Ausdrücklich erlaubt ist es, Hilfe von Lehrpersonen, | ||
Line 46: | Line 47: | ||
===== Beispiel ===== | ===== Beispiel ===== | ||
- | ? Beispielprogramm angeben ? | + | Hier ist mein Projekt, für das ich mir eine 6 geben würde 8-) - eine ähnliche Simulation findet sich auf [[https:// |
+ | <code python> | ||
+ | # Autor: Olaf Schnürer | ||
+ | # | ||
+ | # Simulation eines Versickerungsprozesses (Perkolation). | ||
+ | # | ||
+ | # Zuerst erzeugen wir ein " | ||
+ | # von Pixeln (= Bildpunkten, | ||
+ | # mit einer fixierten Wahrscheinlichkeit p dunkel gefärbt. Dunkle Pixel stehen | ||
+ | # für wasserundurchlässigen Fels. Die restlichen Pixel stehen für Luft. | ||
+ | # | ||
+ | # Wir stellen uns vor, dass oberhalb des Gesteins beliebig viel Wasser vorhanden | ||
+ | # ist und simulieren, wie dieses in das Gestein eindringt (Luft kann dabei beliebig entweichen). | ||
+ | # | ||
+ | # Mögliche Anschlussfrage: | ||
+ | # das Wasser " | ||
+ | # etwa für alle p zwischen 0.4 und 0.5 in Schritten von 0.01 jeweils 100 Simulationen | ||
+ | # laufen lassen (ohne grafische Ausgabe, damit es schneller geht) und | ||
+ | # dann in einem " | ||
+ | # Wahrscheinlichkeit erreicht wird. (Monte-Carlo-Methode) | ||
+ | |||
+ | from gpanel import * | ||
+ | from random import randint, random | ||
+ | |||
+ | # Abmessungen des Gesteins: | ||
+ | Xmax = 400 | ||
+ | Ymax = 200 | ||
+ | |||
+ | # Seitenlänge eines Quadrats in Bildschirm-Pixel | ||
+ | skalierung = 4 | ||
+ | |||
+ | # Wahrscheinlichkeit für Fels | ||
+ | p = 0.41 | ||
+ | |||
+ | def zeichne_quadrat(x, | ||
+ | setColor(farbe) | ||
+ | fillRectangle(x * skalierung, y * skalierung, (x + 1) * skalierung, (y + 1) * skalierung) | ||
+ | setColor(" | ||
+ | rectangle(x * skalierung, y * skalierung, (x + 1) * skalierung, (y + 1) * skalierung) | ||
+ | |||
+ | # Öffne Fenster und vereinbare Koordinaten. | ||
+ | makeGPanel(Size(Xmax * skalierung, Ymax * skalierung + 30)) | ||
+ | window(0, Xmax * skalierung, -30, Ymax * skalierung) | ||
+ | |||
+ | # poröses Gestein wird zufällig erzeugt | ||
+ | # Der folgende Code verwendet, dass man beim Erzeugen von Listen | ||
+ | # zusätzlich eine " | ||
+ | feld = [[" | ||
+ | |||
+ | # Die folgenden beiden for-Schleifen erzeugen eine " | ||
+ | # aus Fels. (Das erspart später das Abfragen, ob man gerade einen Punkt am Rand betrachtet.) | ||
+ | for i in range(-1, Xmax + 1): | ||
+ | feld[i][-1] = " | ||
+ | feld[i][Ymax] = " | ||
+ | |||
+ | for j in range(-1, Ymax + 1): | ||
+ | feld[-1][j] = " | ||
+ | feld[Xmax][j] = " | ||
+ | |||
+ | # Zeichne das poröse Gestein. | ||
+ | for i in range(0, Xmax): | ||
+ | for j in range(0, Ymax): | ||
+ | zeichne_quadrat(i, | ||
+ | |||
+ | # getKeyCodeWait() | ||
+ | |||
+ | # Erstelle Start-Liste blauer Felder alias Wasser: | ||
+ | # Alle " | ||
+ | # Für jedes Wasserfeld werden seine Koordinaten gespeichert. | ||
+ | blaue_felder = [] | ||
+ | for i in range(0, Xmax): | ||
+ | if feld[i][Ymax - 1] == " | ||
+ | feld[i][Ymax - 1] = " | ||
+ | blaue_felder.append([i, | ||
+ | # zeichne_quadrat(i, | ||
+ | |||
+ | # print(blaue_felder) | ||
+ | |||
+ | # Solange die Liste blauer Felder nicht leer ist, | ||
+ | # wird jeweils das erste blaue Feld betrachtet, eingefärbt und eventuelle Luftnachbarn | ||
+ | # werden hinten an die Liste drangehängt. | ||
+ | while len(blaue_felder) > 0: | ||
+ | aktuell = blaue_felder.pop(0) | ||
+ | x = aktuell[0] | ||
+ | y = aktuell[1] | ||
+ | # print(blaue_felder) | ||
+ | # print(x, y) | ||
+ | zeichne_quadrat(x, | ||
+ | if (x > 0) and (feld[x-1][y] == " | ||
+ | feld[x-1][y] = " | ||
+ | blaue_felder.append([x-1, | ||
+ | if (x < Xmax - 1) and (feld[x+1][y] == " | ||
+ | feld[x+1][y] = " | ||
+ | blaue_felder.append([x+1, | ||
+ | if (y > 0) and (feld[x][y-1] == " | ||
+ | feld[x][y-1] = " | ||
+ | blaue_felder.append([x, | ||
+ | if (y < Ymax - 1) and (feld[x][y+1] == " | ||
+ | feld[x][y+1] = " | ||
+ | blaue_felder.append([x, | ||
+ | # Folgende Zeile auskommentieren, | ||
+ | delay(1) | ||
+ | # getKeyCodeWait() | ||
+ | |||
+ | # Textausgabe | ||
+ | text(Xmax * skalierung/ | ||
+ | |||
+ | # Warten, bis der Benutzer eine Taste drückt. | ||
+ | getKeyCodeWait() | ||
+ | |||
+ | # Fenster schliessen. | ||
+ | dispose() | ||
+ | </ | ||
===== Link zur Kursseite ===== | ===== Link zur Kursseite ===== | ||