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:21] – [Beispiel] Olaf Schnürer | lehrkraefte:snr:informatik:python:wichtiges-zur-projektarbeit [2022/05/23 10:40] (current) – [Allgemeines und Zeitplan] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Wichtiges zur Projektarbeit der Klassen 2aLM und 2dNP ====== | ||
| + | |||
| + | Ich habe versucht, einige wichtige Informationen zusammenzustellen. Bei Fragen oder Bemerkungen bitte direkt an mich wenden. | ||
| + | ===== Allgemeines und Zeitplan ===== | ||
| + | |||
| + | * Es sind Zweier- und Einsergruppen erlaubt, im folgenden Gruppe genannt. | ||
| + | * Jede Gruppe schreibt ein Python-Programm im Rahmen eines selbstgewählten Projektes. | ||
| + | * Jede Gruppe beschreibt mir ihr Projekt möglichst bis zum 17. November, damit ich einschätzen kann, ob es realistisch ist, und damit ich eventuell rechtzeitig Änderungen vorschlagen kann. | ||
| + | * 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: | ||
| + | * 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). | ||
| + | * Alle Mitglieder einer Gruppe bekommen dieselbe Note. | ||
| + | * Jede Gruppe darf selbst eine Note vorschlagen, | ||
| + | |||
| + | ===== Themenwahl ===== | ||
| + | |||
| + | * Jede Gruppe sucht ein Thema, das in der verfügbaren Zeit sinnvoll bearbeitet werden kann. Das Thema sollte weder zu schwierig noch zu einfach sein. | ||
| + | * Wer auf der Suche nach einem geeigneten Thema ist, möge etwa an Simulationen (z. B. Virusausbreitung), | ||
| + | * Inspiration darf man sich gerne im Internet holen, etwa von [[https:// | ||
| + | * Wer Probleme bei der Themenwahl hat, wende sich an mich: Ich habe eine Liste mit Vorschlägen, | ||
| + | |||
| + | |||
| + | ===== Zeitmanagement ===== | ||
| + | * Versucht, möglichst schnell ein Programm zu schreiben, das ihr "im Notfall" | ||
| + | * Kümmert euch erst dann um Optimierungen, | ||
| + | * Wenn ihr aus wichtigen Gründen nicht genügend Zeit habt (etwa nicht bei allen vier Doppellektionen anwesend sein könnt), teilt mir dies bitte mit, damit ich meine Bewertung entsprechend anpassen kann. | ||
| + | |||
| + | ===== Ehrlichkeit | ||
| + | alias " | ||
| + | |||
| + | * Jede Gruppe bearbeitet ihr Projekt eigenständig. Ausdrücklich erlaubt ist es, Hilfe von Lehrpersonen, | ||
| + | * Inspiration darf man sich überall holen. Wesentliche Inspirationsquellen müssen aber offen benannt werden, etwa durch einen Kommentar im Programm. (Etwa: "Die Idee für diesen Programmteil kommt von der folgenden Web-Seite." | ||
| + | * Verboten ist es beispielsweise, | ||
| + | * " | ||
| + | |||
| + | ===== Einige Punkte, auf die ich bei der Bewertung achte ===== | ||
| + | |||
| + | * Das Python-Programm ist lauffähig. | ||
| + | * Am Anfang des Programms ist kurz als Kommentar erklärt, was das Programm tut. | ||
| + | * Das Python-Programm ist übersichtlich geschrieben. (Sinnvolle, erklärende Kommentare im Programmcode sind erlaubt.) | ||
| + | * Bei Interaktion mit dem Benutzer soll klar sein, was dieser tun soll oder darf. | ||
| + | * Wichtige Konzepte des Programmierkurses werden sinnvoll verwendet (etwa if-Selektion, | ||
| + | * Kompliziertheit des Programms: Wie schwierig war es, die Projektidee in ein Programm umzusetzen? | ||
| + | * Das Programm ist " | ||
| + | |||
| + | ===== Beispiel ===== | ||
| + | |||
| + | 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 ===== | ||
| + | |||
| + | [[lehrkraefte: | ||
| + | |||