lehrkraefte:snr:informatik:python:wichtiges-zur-projektarbeit

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:snr:informatik:python:wichtiges-zur-projektarbeit [2021/11/09 16:22]
Olaf Schnürer [Beispiel]
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 2aLM ======+====== Wichtiges zur Projektarbeit der Klassen 2aLM und 2dNP ======
  
 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: idealerweise nach der Doppellektion am 8. Dezember, spätestens am 14. Dezember um 23:59 Uhr (vermutlich per Email an mich)   * Abgabe der lauffähigen Python-Programme: idealerweise nach der Doppellektion am 8. Dezember, spätestens am 14. Dezember um 23:59 Uhr (vermutlich per Email an mich)
-  * 15. Dezember (letzte Doppellektion vor Weihnachten): Kurzpräsentation der Projekte durch alle Gruppenmitlgieder, danach jeweils kurze Fragerunde (ca. 5 Minuten pro Gruppe, je nach Anzahl der Gruppen)+  * 15. Dezember (letzte Doppellektion vor Weihnachten): Kurzpräsentation der Projekte durch alle Gruppenmitglieder, danach jeweils kurze Fragerunde (ca. 5 Minuten pro Gruppe, je nach Anzahl der Gruppen). Bei Abwesenheit eines Gruppenmitglieds wird die Präsentation nachgeholt.
   * 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 46: Line 47:
 ===== Beispiel ===== ===== Beispiel =====
  
-Hier ist mein Projekt, für das ich mir eine 6 geben würde 8-): +Hier ist mein Projekt, für das ich mir eine 6 geben würde 8-) - eine ähnliche Simulation findet sich auf [[https://en.wikipedia.org/wiki/Percolation|Wikipedia: Percolation]].
 <code python> <code python>
 # Autor: Olaf Schnürer # Autor: Olaf Schnürer
Line 59: Line 59:
 # #
 # Wir stellen uns vor, dass oberhalb des Gesteins beliebig viel Wasser vorhanden # Wir stellen uns vor, dass oberhalb des Gesteins beliebig viel Wasser vorhanden
-# ist und simulieren, wie dieses in das Gestein vordringt (Luft kann dabei beliebig entweichen).+# ist und simulieren, wie dieses in das Gestein eindringt (Luft kann dabei beliebig entweichen).
 # #
 # Mögliche Anschlussfrage: Ab welcher Wahrscheinlichkeit erreicht # Mögliche Anschlussfrage: Ab welcher Wahrscheinlichkeit erreicht
Line 71: Line 71:
 from random import randint, random from random import randint, random
  
 +# Abmessungen des Gesteins:
 Xmax = 400 Xmax = 400
 Ymax = 200 Ymax = 200
 +
 +# Seitenlänge eines Quadrats in Bildschirm-Pixel 
 skalierung = 4 skalierung = 4
-FARBE = ["white", "gray"]+ 
 +# Wahrscheinlichkeit für Fels
 p = 0.41 p = 0.41
  
Line 83: Line 87:
     rectangle(x * skalierung, y * skalierung, (x + 1) * skalierung, (y + 1) * skalierung)     rectangle(x * skalierung, y * skalierung, (x + 1) * skalierung, (y + 1) * skalierung)
  
-makeGPanel(Size(Xmax * skalierung, Ymax * skalierung)) +# Öffne Fenster und vereinbare Koordinaten. 
-window(0, Xmax * skalierung, 0, Ymax * skalierung) +makeGPanel(Size(Xmax * skalierung, Ymax * skalierung + 30)) 
-feld = [[FARBE[1] if random() < p else FARBE[0] for j in range(-1, Ymax + 1)] for i in range(-1, Xmax + 1)]+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 "if-(then-)else"-Abrage machen kann.
 +feld = [["gray" if random() < p else "white" for j in range(-1, Ymax + 1)] for i in range(-1, Xmax + 1)]
 +
 +# Die folgenden beiden for-Schleifen erzeugen eine "bounding box"
 +# aus Fels. (Das erspart später das Abfragen, ob man gerade einen Punkt am Rand betrachtet.)
 for i in range(-1, Xmax + 1): for i in range(-1, Xmax + 1):
-    feld[i][-1] = FARBE[1] +    feld[i][-1] = "gray" 
-    feld[i][Ymax] = FARBE[1]+    feld[i][Ymax] = "gray"
  
 for j in range(-1, Ymax + 1): for j in range(-1, Ymax + 1):
-    feld[-1][j] = FARBE[1] +    feld[-1][j] = "gray" 
-    feld[Xmax][j] = FARBE[1]+    feld[Xmax][j] = "gray"
  
 +# Zeichne das poröse Gestein.
 for i in range(0, Xmax): for i in range(0, Xmax):
     for j in range(0, Ymax):     for j in range(0, Ymax):
Line 101: Line 113:
 # getKeyCodeWait() # getKeyCodeWait()
  
-# Erstelle Liste blauer Felder in oberster Zeile+# Erstelle Start-Liste blauer Felder alias Wasser:  
 +# Alle "Luftfelder" in der obersten Zeile werden aufgenommen. 
 +# Für jedes Wasserfeld werden seine Koordinaten gespeichert.
 blaue_felder = []                 blaue_felder = []                
 for i in range(0, Xmax): for i in range(0, Xmax):
-    if feld[i][Ymax - 1] == FARBE[0]:+    if feld[i][Ymax - 1] == "white":
         feld[i][Ymax - 1] = "blue"         feld[i][Ymax - 1] = "blue"
         blaue_felder.append([i, Ymax - 1])                 blaue_felder.append([i, Ymax - 1])        
-        zeichne_quadrat(i, Ymax - 1, "blue"+#        zeichne_quadrat(i, Ymax - 1, "blue"
-        +
 # print(blaue_felder)     # 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: while len(blaue_felder) > 0:
     aktuell = blaue_felder.pop(0)     aktuell = blaue_felder.pop(0)
Line 130: Line 147:
         feld[x][y+1] = "blue"         feld[x][y+1] = "blue"
         blaue_felder.append([x, y+1])         blaue_felder.append([x, y+1])
 +# Folgende Zeile auskommentieren, wenn sich das Wasser schneller ausbreiten soll.
     delay(1)     delay(1)
 #    getKeyCodeWait() #    getKeyCodeWait()
-                + 
 +# Textausgabe 
 +text(Xmax * skalierung/3, -20, "Zum Schliessen irgendeine Taste drücken.", Font("Courier", Font.PLAIN, 20), "white", "red"
 + 
 +# Warten, bis der Benutzer eine Taste drückt.                
 getKeyCodeWait() getKeyCodeWait()
 +
 +# Fenster schliessen.
 dispose()         dispose()        
 </code> </code>
  • lehrkraefte/snr/informatik/python/wichtiges-zur-projektarbeit.1636471363.txt.gz
  • Last modified: 2021/11/09 16:22
  • by Olaf Schnürer