Freitag, 26. November 2010
Multiple-Choice-Tests bearbeiten
Optionale Aufgabe (freiwillig)!
Schreiben Sie ein Programm, das eine Datenstruktur, mit der man Multiple-Choice-Tests erzeugen kann, aus einer Textdatei erstellt. Das Format der Textdatei soll anhand eines Beispiels gezeigt werden:
Schreiben Sie ein Programm, das eine Datenstruktur, mit der man Multiple-Choice-Tests erzeugen kann, aus einer Textdatei erstellt. Das Format der Textdatei soll anhand eines Beispiels gezeigt werden:
Das ist der einleitende Text, der einfach in einen String Namens "einleitung" gelesen werden soll. Mit allen Zeichen und Zeilenumbrüchen. Diese Einleitung endet mit zwei leeren Zeilen. Das ist die erste Frage. Der Text dieser Frage kann sich auch über mehrere Zeilen erstrecken. Allerdings soll so ein Text ohne die Zeilenumbrüche übernommen werden (Zeilenümbrüche durch Leerzeichen ersetzen). Die weiteren Informationen sind durch mindestens zwei Leerzeichen eingerückt gleich nach diesem Text. Optional darf eine Leerzeile stehen. Optionaler Text, der wie die Einleitung mit allen Umbrüchen so übernommen werden soll, wie er in der Datei ist, jedoch ohne die Einrückung. Alle weiteren Informationen kommen wieder eingerückt, optional mit einer Leerzeile abgetrennt. Die Punkte für diese Frage sind in runde Klammern zu setzen (am Anfang der Zeile mit Einrückung). Gibt es keine Punkte, so ist 1 zu verwenden. Optional kann in { } eine Zahl > 0 und <= 1 angegeben werden, welche als "Faktor" zu interpretieren ist. Wieder nur mit passender Einrückung. (Der Faktor soll angeben, welcher Anteil an richtigen und falschen Antworten dann bei der Erzeugung der Tests verwendet werden soll, 0.5 bedeutet die Hälfte). (2) {0.75} [X] Das ist eine richtige Antwort. [ ] Das ist eine falsche Antwort. [X] Das ist eine richtige Antwort, die sich über mehrere Zeilen erstrecken kann. [ ] Das ist eine falsche Antwort, die sich über mehrere Zeilen erstrecken kann. Die Einrückung ist wieder wesentlich. Die Zeilenumbrüche und die Einrückung sind zu entfernen. Das ist die nächste Frage, sie wird mit zwei Leerzeilen von der vorigen abgetrennt. Es muss keine weitere Information angegeben sein. In diesem Fall wäre es eine 1-Punkte-Frage ohne Auswahl- möglichkeiten, also eine direkt zu beantwortende Frage. Die Dritte Frage. Ist nun eine 1-Punkte Frage ohne Faktor und ohne Text. [ ] Falsche Lösung. [X] Richtige Lösung. [ ] Falsche Lösung.Am Ende der Datei brauchen natürlich keine Leerzeilen mehr sein. Das Programm soll solche Dateien einlesen und folgende Variable setzen:
einleitung
mit dem einleitenden Text. fragen
, einer Liste von Fragen. Jede Frage ist ein Dictionary mit folgenden Schlüssel und Werten:"frage"
mit dem Text der Frage."text"
mit dem optionalen Text (oder eben nicht)."punkte"
mit den gelesenen Punkten oder 1."faktor"
mit dem gelesenen Faktor (oder gar nicht)."richtig"
mit einer Liste der richtigen Antworten (ohne"[X]"
)."falsch"
mit einer Liste der richtigen Antworten (ohne"[ ]"
).
Labels: Aufgabe, POS1-2, Python
Freitag, 12. November 2010
Verwalten einer Hitliste (POS1: 2AHIF, 2CHIF)
Erstellen Sie ein Pythonprogramm, welches Musik-Charts verwalten kann. Das Use Case Diagramm zeigt die möglichen Anwendungsfälle.
Beispielsitzung
Erzeugen Sie Testdaten (Dateien mit Songs und Hitlisten), sodass das Programm nach dem Auschecken direkt getestet werden kann.
Checken Sie das Projekt am CVS ein und "commiten" Sie Ihre letzte Version.
Songs eingeben
Titel und Interpret sind einzugeben.
Voting erfassen
Zu einem bestimmten Titel soll die Anzahl der Stimmen (das Voting) eingegeben werden. Die Auswahl des Titels könnte z.B. über eine Suche erfolgen.
Hitliste ausgeben
Die Liste der Songs (Titel, Interpret, Voting) soll in der Reihenfolge des Votings (mehr Stimmen zuerst) ausgegeben werden.
Songs aus Datei lesen
Die Liste der Songs (Titel, Interpret - ohne Voting) soll aus einer Datei gelesen werden. Das Dateiformat kann beliebig gewählt werden. z.B. Zeilen in der Form
Titel;Interpret
.Songs in Datei speichern
Die Liste der Songs (Titel, Interpret - ohne Voting) soll in einer Datei gespeichert werden. Dateiformat wie oben.
Hitliste speichern
Die Hitliste (Titel, Interpret und Voting) soll in einer Datei gespeichert werden. Das Dateiformat kann beliebig gewählt werden. z.B. Zeilen in der Form
Titel;Interpret;Voting
.Hitliste laden
Die Hitliste (Titel, Interpret und Voting) soll aus einer Datei gelesen werden. Das Dateiformat wie oben.
Beispielsitzung
$ python charts.py 0 Ende 1 Songs eingeben 2 Voting erfassen 3 Hitliste 4 Songs aus Datei lesen 5 Songs in Datei speichern 6 Hitliste aus Datei lesen 7 Hitliste in Datei speichern >>> 1 Titel>>> Peter Gunn Interpret>>> Emerson, Lake & Palmer 0 Ende 1 Songs eingeben 2 Voting erfassen 3 Hitliste 4 Songs aus Datei lesen 5 Songs in Datei speichern 6 Hitliste aus Datei lesen 7 Hitliste in Datei speichern >>> 1 Titel>>> Haitian Fight Song Interpret>>> Charles Mingus 0 Ende 1 Songs eingeben 2 Voting erfassen 3 Hitliste 4 Songs aus Datei lesen 5 Songs in Datei speichern 6 Hitliste aus Datei lesen 7 Hitliste in Datei speichern >>> 5 Dateiname [songs.txt] >>> 0 Ende 1 Songs eingeben 2 Voting erfassen 3 Hitliste 4 Songs aus Datei lesen 5 Songs in Datei speichern 6 Hitliste aus Datei lesen 7 Hitliste in Datei speichern >>> 4 Dateiname [songs.txt] >>> 0 Ende 1 Songs eingeben 2 Voting erfassen 3 Hitliste 4 Songs aus Datei lesen 5 Songs in Datei speichern 6 Hitliste aus Datei lesen 7 Hitliste in Datei speichern >>> 3 Peter Gunn Emerson, Lake & Palmer 0 Haitian Fight Song Charles Mingus 0 Gamma Ray Birth Control 0 Spectrum Billy Cobham 0 Take Five Dave Brubek 0 Overnite Sensation Frank Zappa 0 Sing, Sing, Sing Gene Krupa 0 Bahamut Hazmat Modine 0 Cantaloupe Island Herbie Hankock 0 Blue Train John Coltraine 0 North Carolina Les McCann 0 Pressure Mary Broadcast Band 0 Mile Stones Miles Davis 0 0 Ende 1 Songs eingeben 2 Voting erfassen 3 Hitliste 4 Songs aus Datei lesen 5 Songs in Datei speichern 6 Hitliste aus Datei lesen 7 Hitliste in Datei speichern >>> 2 Titel (oder Teil)>>> Peter Voting für Peter Gunn >>> 23 0 Ende 1 Songs eingeben 2 Voting erfassen 3 Hitliste 4 Songs aus Datei lesen 5 Songs in Datei speichern 6 Hitliste aus Datei lesen 7 Hitliste in Datei speichern >>> 3 Peter Gunn Emerson, Lake & Palmer 23 Haitian Fight Song Charles Mingus 0 Gamma Ray Birth Control 0 Spectrum Billy Cobham 0 Take Five Dave Brubek 0 Overnite Sensation Frank Zappa 0 Sing, Sing, Sing Gene Krupa 0 Bahamut Hazmat Modine 0 Cantaloupe Island Herbie Hankock 0 Blue Train John Coltraine 0 North Carolina Les McCann 0 Pressure Mary Broadcast Band 0 Mile Stones Miles Davis 0 0 Ende 1 Songs eingeben 2 Voting erfassen 3 Hitliste 4 Songs aus Datei lesen 5 Songs in Datei speichern 6 Hitliste aus Datei lesen 7 Hitliste in Datei speichern >>> 2 Titel (oder Teil)>>> Gamm Voting für Gamma Ray >>> 25 0 Ende 1 Songs eingeben 2 Voting erfassen 3 Hitliste 4 Songs aus Datei lesen 5 Songs in Datei speichern 6 Hitliste aus Datei lesen 7 Hitliste in Datei speichern >>> 3 Gamma Ray Birth Control 25 Peter Gunn Emerson, Lake & Palmer 23 Haitian Fight Song Charles Mingus 0 Spectrum Billy Cobham 0 Take Five Dave Brubek 0 Overnite Sensation Frank Zappa 0 Sing, Sing, Sing Gene Krupa 0 Bahamut Hazmat Modine 0 Cantaloupe Island Herbie Hankock 0 Blue Train John Coltraine 0 North Carolina Les McCann 0 Pressure Mary Broadcast Band 0 Mile Stones Miles Davis 0 0 Ende 1 Songs eingeben 2 Voting erfassen 3 Hitliste 4 Songs aus Datei lesen 5 Songs in Datei speichern 6 Hitliste aus Datei lesen 7 Hitliste in Datei speichern >>> 7 Dateiname [charts.txt] >>> 0 Ende 1 Songs eingeben 2 Voting erfassen 3 Hitliste 4 Songs aus Datei lesen 5 Songs in Datei speichern 6 Hitliste aus Datei lesen 7 Hitliste in Datei speichern >>> 0 $
Abgabe
Nennen Sie das Projekt2x-name-python-charts
, wobei x "a" für 2AHIF und "c" für 2CHIF und name Ihr Familienname sein soll (bei Namensgleichheit machen Sie bitte 2x-name-vorname-python-charts
daraus). Das Programm selbst soll charts.py
heißen.Erzeugen Sie Testdaten (Dateien mit Songs und Hitlisten), sodass das Programm nach dem Auschecken direkt getestet werden kann.
Checken Sie das Projekt am CVS ein und "commiten" Sie Ihre letzte Version.
Labels: Aufgabe, POS1-2, Python
Donnerstag, 11. November 2010
Code-Kata
Beim Karate (z.B. Karatedo Doshinkan) gibt es Kata (dt. "Form", siehe auch Kata auf Wikipedia), eine spezielle Übungsform, bei der man als Training gegen einen oder mehrere (vorgestellte) Gegner kämpft. Dabei ist der Bewegungsablauf aber stilisiert und fix vorgegeben. Das oftmalige Wiederholen der Bewegungsabläufe in Form von Kata ist unerlässlich für den persönlichen Fortschritt. Denn nur Übung macht den Meister.
Auch Programmieren beherrscht man nur durch ständiges Training. Nur durch Üben wird man auch hier zum Meister. Aber nicht nur durch den Kampf (Programmieren für das Geschäft) sondern auch durch Katas. Diese Idee für's Programmieren hat Dave Thomas von den Pragmatischen Programmieren (meines Wissens) erstmalig aufgegriffen und publiziert: Code Kata
Sehr empfehlenswert für alle, die Programmieren meistern wollen.
Die Idee der Code Kata fasziniert und berührt mich besonders, da ich selber jahrelang trainiert habe.
Auch Programmieren beherrscht man nur durch ständiges Training. Nur durch Üben wird man auch hier zum Meister. Aber nicht nur durch den Kampf (Programmieren für das Geschäft) sondern auch durch Katas. Diese Idee für's Programmieren hat Dave Thomas von den Pragmatischen Programmieren (meines Wissens) erstmalig aufgegriffen und publiziert: Code Kata
Sehr empfehlenswert für alle, die Programmieren meistern wollen.
Die Idee der Code Kata fasziniert und berührt mich besonders, da ich selber jahrelang trainiert habe.
Labels: allgemeines, C, C#, C++, Java, POS1-1, POS1-2, PR5
Montag, 8. November 2010
Hinweise zum Theorietest POS1 2. Klasse (POS1: 2AHIF, 2CHIF)
Bitte beachten Sie folgende Punkte für den Theorietest (wie die traurige Erfahrung zeigt):
- In Python gibt es nur and, or und not, nicht jedoch &&, || bzw. ! (ausgenommen != für ungleich).
- Globale Variable können gelesen aber nicht verändert werden, ausgenommen man definiert die Variable explizit mit global. Das bedeutet, dass eine Variable lokal definiert wird, sobald man eine Zuweisung an diese Variable (vor einer lesenden Verwendung) macht.
- Ein Aufruf einer Funktion mit Returnwert in Form einer Subroutine (also nicht in einem Ausdruck) gibt natürlich den Returnwert nicht aus (den sieht man nur bei interaktiver Verwendung, weil in diesem Fall jeder Wert angezeigt wird).
- Oktale Konstante werden in python2.x nur mit führender 0 (Null, z.B. 023 == 19), in python3.x mit führendem 0o (Null gefolgt von kleinem o, z.B. 0o23 == 19) gekennzeichnet.
- python3.x erlaubt von Haus aus Unicode (z.B. für Umlaute), bei python2.x muss man ein coding angeben.
- Ein Index beginnt immer bei 0! (bei Strings, Listen, Mengen usw.)
- Wenn bei einem "slice" die Obergrenze größer als die Anzahl der Elemente ist, macht das nichts. Z.B. "hallo"[1:23] liefert "allo", wie auch "hallo"[1:] oder "hallo"[1:5].
- Parameter an eine Python-Funktion: es müssen immer mindestens soviele Parameter beim Aufruf angegeben werden als fixe Parameter vorgegeben sind (ohne Default). Das funktioniert auch, wenn man die Parameter als variable Liste (eigentlich Dictionary) übergibt, wenn das Dictionary die passenden Namen der Parameter als Schlüssel hat, die richtige Anzahl und beim Aufruf mit einem oder zwei * gekennzeichnet ist. Schauen Sie ins Skriptum ab Seite 38 nach.
- 1/0 ist in keiner Sprache definiert, 1/3 == 0 in python2.x aber 1/3 != 0 (weil 0.3333333333...) in python3.x.
- Shellvariable werden mit $ gekennzeichnet mit Ausnahme, die Variable steht links einer Zuweisung. Beispiel: bar=bar, (Variable $bar bekommt den String "bar") aber foo=$bar (der Variable $foo wird der Wert der Variable $bar zugewiesen) oder echo $foo bar (gibt "bar bar" aus, weil der Inhalt von $foo auch "bar" ist).
- Eine Shell kann natürlich mehr als nur ein Programm gleichzeitig starten, wenn man z.B. mehrere Kommandos mit der Pipe verbindet oder ans Ende des Kommandos ein & anhängt. Weiters gibt es ja noch die Möglichkeiten von ^Z, bg und fg).
Labels: allgemeines, Linux, POS1-2, Python
Donnerstag, 4. November 2010
Pascalsches Dreieck (POS1: 2AHIF, 2CHIF)
Schreiben Sie ein Programm, welches zu einem gegebenen N das Pascal'sche Dreieck ausgibt.
Beispiele:
n = 5
Das Programm soll das Dreieck schön formatiert auf der Konsole ausgeben.
Erzeugen Sie mit Ihrem Programm die Dreiecke mit
Checken Sie das Projekt am CVS ein und "commiten" Sie Ihre letzte Version.
Z.B. (a + b)2 = a2 + 2ab + b2 oder (a + b)5 = a5 + 5a4b + 10a3b2 + 10a2b3 + 5ab4 + b5.
z.B.: n = 4
Beispiele:
n = 5
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1n = 9:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1
Das Programm soll das Dreieck schön formatiert auf der Konsole ausgeben.
Abgabe
Nennen Sie das Projekt2x-name-python-pascal
, wobei x "a" für 2AHIF und "c" für 2CHIF und name Ihr Familienname sein soll (bei Namensgleichheit machen Sie bitte 2x-name-vorname-python-pascal
daraus). Das Programm selbst soll pascal.py
heißen.Erzeugen Sie mit Ihrem Programm die Dreiecke mit
n = 1
bis n = 10
in Dateien mit den Namen dreieck01.txt
bis dreieck10.txt
. Nehmen Sie diese Dateien mit in das Projekt auf.Checken Sie das Projekt am CVS ein und "commiten" Sie Ihre letzte Version.
Für Fortgeschrittene
Das Programm soll das Polynom von (a+b)n "berechnen" und ausgeben.Z.B. (a + b)2 = a2 + 2ab + b2 oder (a + b)5 = a5 + 5a4b + 10a3b2 + 10a2b3 + 5ab4 + b5.
z.B.: n = 4
4 4 3 2 2 3 4 (a + b) = a + 4a b + 6a b + 4ab + b
Labels: Aufgabe, POS1-2, Python
Abonnieren Posts [Atom]