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:
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:

Labels: , ,


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.

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 Projekt 2x-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: , ,


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.

Labels: , , , , , , ,


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):
  1. In Python gibt es nur andor und not, nicht jedoch &&|| bzw. ! (ausgenommen != für ungleich).
  2. 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.
  3. 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).
  4. 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.
  5. python3.x erlaubt von Haus aus Unicode (z.B. für Umlaute), bei python2.x muss man ein coding angeben.
  6. Ein Index beginnt immer bei 0! (bei Strings, Listen, Mengen usw.)
  7. 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].
  8. 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.
  9. 1/0 ist in keiner Sprache definiert, 1/3 == 0 in python2.x aber 1/3 != 0 (weil 0.3333333333...) in python3.x.
  10. 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).
  11. 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 ^Zbg und fg).
Natürlich müssen Sie auch die anderen Inhalte lernen.

    Labels: , , ,


    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
               1
             1   1
           1   2   1
         1   3   3   1
       1   4   6   4   1
     1   5  10  10   5   1
    
    n = 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 Projekt 2x-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: , ,


    This page is powered by Blogger. Isn't yours?

    Abonnieren Posts [Atom]