Skip to content

Commit

Permalink
Merge pull request #402 from pep-dortmund/334-autogenerate-vorlagepy
Browse files Browse the repository at this point in the history
334 autogenerate vorlagepy
  • Loading branch information
chrbeckm authored Aug 8, 2024
2 parents 3399c66 + 6d722df commit f924969
Show file tree
Hide file tree
Showing 63 changed files with 246 additions and 265 deletions.
6 changes: 6 additions & 0 deletions common/gen_vorlage.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/bash

grep -q '# begin solution' ${1//vorlage/loesung} && : >$1
[ ! -f $1 ] || cp ${1//vorlage/loesung} $1
[ ! -f $1 ] || sed -i -e '/# begin solution/,/# end solution/d' $1
[ -s $1 ] || rm $1
10 changes: 10 additions & 0 deletions common/generate_vorlage.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FILES := $(sort $(wildcard */loesung*.py))
targets := $(subst loesung,vorlage,$(FILES))


all: $(FILES) $(targets)
# $(foreach (loesung,vorlage), ($(FILES), $(targets)), $(call gen_vorlage,$(loesung),$(vorlage));)

$(targets): %: ../../common/gen_vorlage.sh
@echo $@
bash $< $@
1 change: 1 addition & 0 deletions exercises-toolbox/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
*.pdf
*.dummy
vorlage.py
FB53-Coronafallzahlen.csv
4 changes: 2 additions & 2 deletions exercises-toolbox/1-python/1-greetings/aufgabe.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

1. Aufgabe:

Öffne die Datei "greetings.py". Eine Liste von Strings wurde bereits
Öffne die Datei "vorlage.py". Eine Liste von Strings wurde bereits
vorbereitet. Füge deinen Namen an einer beliebigen Stelle der Liste ein. Prüfe,
ob du alles richtig gemacht hast, indem du das Programm mit "python greetings.py"
ob du alles richtig gemacht hast, indem du das Programm mit "python vorlage.py"
laufen lässt. Es sollten keinerlei Fehlermeldungen erscheinen.

2. Aufgabe:
Expand Down
11 changes: 0 additions & 11 deletions exercises-toolbox/1-python/1-greetings/greetings.py

This file was deleted.

10 changes: 10 additions & 0 deletions exercises-toolbox/1-python/1-greetings/loesung.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
names = ["World", "Toolbox Workshop", "Kevin"]


# hier ergänzen
# begin solution
for name in names:
print("Hello " + name)
# end solution

# Gewünschte Ausgabe:
# Hello World
# Hello Toolbox Workshop
# Hello Kevin
# Hello <Dein Name>
2 changes: 1 addition & 1 deletion exercises-toolbox/1-python/2-average/aufgabe.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

Aufgabe:

In der beiliegenden Python-Datei `average.py` ist eine Liste mit Zahlen
In der beiliegenden Python-Datei `vorlage.py` ist eine Liste mit Zahlen
vorbereitet. Berechne ihren arithmetischen Mittelwert und gib ihn aus.
3 changes: 0 additions & 3 deletions exercises-toolbox/1-python/2-average/average.py

This file was deleted.

3 changes: 3 additions & 0 deletions exercises-toolbox/1-python/2-average/loesung.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
data = [42, 3.1415, 2.7182, 1, 2]

# Hier den Mittelwert berechnen und ausgeben
# begin solution
avg = 0
for x in data:
avg += x
Expand All @@ -11,3 +13,4 @@
avg = sum(data) / len(data)

print("Der Mittelwert ist ", avg)
# end solution
2 changes: 1 addition & 1 deletion exercises-toolbox/1-python/3-fizzbuzz/aufgabe.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Angeblich eine beliebte Aufgabe in Bewerbungsgesprächen für Programmierer.

Aufgabe:

Öffne die Datei "fizzbuzz.py" und ergänze sie wie folgt: Gib die Zahlen von 1
Öffne die Datei "vorlage.py" und ergänze sie wie folgt: Gib die Zahlen von 1
bis 100 aus, wobei du aber Zahlen, die durch 3 teilbar sind, durch "Fizz" und
Zahlen, die durch 5 teilbar sind, durch "Buzz" ersetzt. Ist eine Zahl sowohl
durch 3 als auch durch 5 teilbar, so gib stattdessen "Fizzbuzz" aus.
Expand Down
3 changes: 0 additions & 3 deletions exercises-toolbox/1-python/3-fizzbuzz/fizzbuzz.py

This file was deleted.

3 changes: 3 additions & 0 deletions exercises-toolbox/1-python/3-fizzbuzz/loesung.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
for n in range(1, 101):
# Programm ergänzen / ändern
# begin solution
if n % 3 == 0 and n % 5 == 0:
print("Fizzbuzz")
elif n % 3 == 0:
print("Fizz")
elif n % 5 == 0:
print("Buzz")
else:
# end solution
print(n)
2 changes: 2 additions & 0 deletions exercises-toolbox/1-python/4-histogram/loesung.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# begin solution
def histogram(nums):
for num in nums:
if num < 0:
Expand All @@ -6,4 +7,5 @@ def histogram(nums):
print(num * "*")


# end solution
histogram([6, 2, -1, 10, 1, 8])
2 changes: 2 additions & 0 deletions exercises-toolbox/1-python/5-readwrite/loesung1.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# begin solution
import sys

if len(sys.argv) > 1:
Expand All @@ -7,3 +8,4 @@

with open(filename, "r") as f:
print(f.read())
# end solution
2 changes: 2 additions & 0 deletions exercises-toolbox/1-python/5-readwrite/loesung2.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
# begin solution
with open("test.txt", "w") as f:
f.write(str(42))
# end solution
2 changes: 2 additions & 0 deletions exercises-toolbox/1-python/6-wordcount/loesung1.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# begin solution
with open("text.txt") as f:
words = f.read().split()

Expand All @@ -18,3 +19,4 @@ def get_count(x):

for key, count in result[:20]:
print(f"{key}: {count}")
# end solution
2 changes: 2 additions & 0 deletions exercises-toolbox/1-python/6-wordcount/loesung2.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# begin solution
with open("text.txt") as f:
words = f.read().split()

Expand All @@ -19,3 +20,4 @@ def get_count(x):

for key, count in result[:20]:
print(f"{key}: {count}")
# end solution
2 changes: 2 additions & 0 deletions exercises-toolbox/1-python/6-wordcount/loesung3.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# begin solution
from collections import Counter

with open("text.txt") as f:
Expand All @@ -7,3 +8,4 @@

for key, count in counts.most_common(20):
print("{}: {}".format(key, count))
# end solution
30 changes: 0 additions & 30 deletions exercises-toolbox/1-python/7-fstrings/fstrings.py

This file was deleted.

24 changes: 24 additions & 0 deletions exercises-toolbox/1-python/7-fstrings/loesung.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Für die 1. und 2. Aufgabe:
title = "Wiegen von Metallen"
date = "24.09.2018"

Expand All @@ -6,26 +7,48 @@
masses = [9.1, 10.29, 12.485, 130.01]

# Für die 1. Aufgabe:
# Gewünschte Ausgabe:
# Versuch: Wiegen von Metallen durchgeführt am 24.09.2018
print()
# begin solution
print("Versuch:", title, "durchgeführt am", date)
# end solution

# Ausgabe mit Anführungszeichen:
# Versuch 'Wiegen von Metallen' durchgeführt am 24.09.2018
print()
# begin solution
print("Versuch:", "'" + title + "'", "durchgeführt am", date)
# end solution

# Für die 2. Aufgabe:
# print(f"")
# begin solution
print() # Für den Abstand zur letzten Lösung
# Versuch: Wiegen von Metallen durchgeführt am 24.09.2018
print(f"Versuch: {title} durchgeführt am {date}")

# Versuch 'Wiegen von Metallen' durchgeführt am 24.09.2018
print(f"Versuch: '{title}' durchgeführt am {date}")
# end solution

# Für die 3.Aufgabe:
# begin solution
print() # Für den Abstand zur letzten Lösung
# end solution
for metal, mass in zip(metals, masses):
print()
# begin solution
print(f"{metal}: {mass}")
# end solution

# Gewünschte Ausgabe:
# Eisen: 9.1
# Kupfer: 10.29
# Zink: 12.485
# Blei: 130.01

# begin solution
# Für die 4.Aufgabe:
print() # Für den Abstand zur letzten Lösung
for metal, mass in zip(metals, masses):
Expand All @@ -38,3 +61,4 @@
for metal, mass in zip(metals, masses):
offset = 11 - len(metal)
print(f"{metal}:", f"{mass:>{offset}.2f}")
# end solution
1 change: 1 addition & 0 deletions exercises-toolbox/1-python/Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
include ../../common/common.mk
include ../../common/loesung.py.mk
include ../../common/generate_vorlage.mk

all: 5-readwrite/test.txt

Expand Down
27 changes: 18 additions & 9 deletions exercises-toolbox/2-numpy/1-arrays/loesung.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import numpy as np

# begin solution
# Aufgabe 1)

a = np.zeros(shape=3)
Expand Down Expand Up @@ -29,33 +30,40 @@
print(f"\t {name}.shape: {array.shape}")

# Aufgabe 3)
# Nur Array e) und f) lassen sich addieren, bei allen anderen passen die Größen nicht zusammen.
# Nur Array e) und f) lassen sich addieren, bei allen
# anderen passen die Größen nicht zusammen.
print("\nAufgabe 3)")
print(f"Array d + f: {e + f}")


# Aufgabe 4)
print("\nAufgabe 4)")
# Anzahl der Zeilen ist die Anzahl der Elemente in f (ein Element pro Zeile), Anzahl der Spalten ist damit 1
# Das Produkt aus den Argumenten von reshape muss immer der Anzahl an Elementen entsprechen.
# Anzahl der Zeilen ist die Anzahl der Elemente in f (ein Element
# pro Zeile), Anzahl der Spalten ist damit 1
# Das Produkt aus den Argumenten von reshape muss immer der Anzahl
# an Elementen entsprechen.
e_2d = e.reshape(1, len(e))
print(f"Array e.reshape(1, len(e)):\n{e_2d}")
# Man kann eine Dimension mit einer -1 versehen, diese wird dann automatisch ausgerechnet.
# Man kann eine Dimension mit einer -1 versehen, diese wird dann
# automatisch ausgerechnet.
e_2d = e.reshape(1, -1)
print(f"Array e.reshape(1, -1):\n{e_2d}")

f_2d = f.reshape(len(f), 1)
print(f"Array f.reshape(len(f), 1):\n{f_2d}")
# Man kann eine Dimension mit einer -1 versehen, diese wird dann automatisch ausgerechnet.
# Man kann eine Dimension mit einer -1 versehen, diese wird dann
# automatisch ausgerechnet.
f_2d = f.reshape(-1, 1)
print(f"Array f.reshape(-1, 1):\n{f_2d}")


# Aufgabe 5)
# Das, was hier passiert nennt sich 'numpy-broadcasting' und ist eine sehr 'mächtiges' feature von numpy arrays.
# Es ist nicht notwendig dieses Feature von Anfang an zu verstehen, es erweist sich nur irgendwann als
# sehr nützlich.
# Details findest du in der Dokumentation: https://numpy.org/doc/stable/user/basics.broadcasting.html
# Das, was hier passiert nennt sich 'numpy-broadcasting' und ist eine
# sehr 'mächtiges' feature von numpy arrays.
# Es ist nicht notwendig dieses Feature von Anfang an zu verstehen, es
# erweist sich nur irgendwann als sehr nützlich.
# Details findest du in der Dokumentation:
# https://numpy.org/doc/stable/user/basics.broadcasting.html

print("\nAufgabe 5*)")
print("Zum Vergleich noch mal die beiden Summanden:")
Expand All @@ -64,3 +72,4 @@
print(f"Array f_2d:\n{f_2d}")
print(f"f_2d.shape: {f_2d.shape}")
print(f"Array e_2d + f_2d:\n{e_2d + f_2d}")
# end solution
19 changes: 18 additions & 1 deletion exercises-toolbox/2-numpy/2-indexing/loesung.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,24 @@
print("Spielfeld zu Beginn des Spiels:")
print(field)

# begin solution
# comment for vorlage.py
# end solution
# Was das hier ist lernen wir noch, kann getrost ignoriert werden.
# In der Zwischenzeit die Kurzfassung: Das 'macht' die Bilder.
fig, ax = plt.subplots(1, 1, layout="constrained")
mat = ax.matshow(field, cmap="Set1", vmax=5, vmin=-1)
fig.savefig("Spielfeld_Loesung_Beginn.pdf")

# Hier die Lösung für Aufgabe 1 und 2 eintragen (ein Beispiel ist angegeben):
# Durch Ausführen dieser Datei kann Schritt für Schritt der Fortschritt
# überprüft werden.
field[0, 6:8] = -1
# begin solution
# Lösung für Aufgabe 1:

# 2er Schiffe:
field[0, 6:8] = -1
# field[0, 6:8] = -1
field[1:3, 2] = -1
field[4, 3:5] = -1
field[7:9, 0] = -1
Expand All @@ -53,8 +63,15 @@

# Mit Masken geht alles noch einfacher!

# end solution

print("Spielfeld zum Ende des Spiels:")
print(field)

# begin solution
# comment for vorlage.py
# end solution
# Was das hier ist lernen wir noch, kann getrost ignoriert werden.
# In der Zwischenzeit die Kurzfassung: Das 'macht' die Bilder.
mat.set_array(field)
fig.savefig("Spielfeld_Loesung_Ende.pdf")
Loading

0 comments on commit f924969

Please sign in to comment.