Zum Inhalt springen
Vorschau auf das nächste Semester, noch nicht veröffentlicht.
Zur aktuellen Seite

Lesbarkeit (Python)

Aufgabe

Was gleich bleibt, was sich ändert

Buchstaben, Wörter und Sätze zählen Sie nach denselben Regeln wie in C und berechnen denselben Coleman-Liau-Index. Regeln und ein durchgerechnetes Beispiel stehen auf der C-Seite. Werfen Sie auch einen Blick auf Ihren C-Code: Sie können ihn Schritt für Schritt übertragen.

Anders ist nur die Sprache:

C (Übung 3)Python
Eingabeget_string("Text: ") aus cs50.hget_string("Text: ") nach from cs50 import get_string
Ausgabeprintf("Grade %i\n", index);print(f"Grade {index}") – print hängt den Zeilenumbruch selbst an
Teilenint / int schneidet die Nachkommastellen ab/ liefert immer eine Kommazahl (float); kein Umwandeln nötig
Rundenround aus math.h; 2.5 wird zu 3eingebautes round, liefert einen int; 2.5 wird zu 2 (bei genau .5 zur geraden Zahl)

Bei den Testtexten unten liegt kein Index genau auf .5; C und Python liefern dort dieselben Klassenstufen.

Demo

Spezifikation

  • Implementieren Sie Ihr Programm in Python in einer Datei namens readability.py in einem Ordner namens sentimental-readability.
  • Ihr Programm fragt mit get_string aus der cs50-Bibliothek und der Aufforderung Text: nach einem Text.
  • Es zählt Buchstaben, Wörter und Sätze nach den Regeln 1 bis 3 der C-Seite, berechnet den Index nach den Regeln 4 und 5 und rundet ihn mit round.
  • Es gibt nach Regel 6 genau eine Zeile aus: Grade X, Grade 16+ oder Before Grade 1.

Hilfestellung

Klicken Sie auf die folgenden Tipps, um einige Ratschläge zu erhalten. Versuchen Sie aber zunächst, selbst so weit wie möglich zu kommen.

Zählen mit String-Methoden

In Python brauchen Sie für das Zählen kaum eigene Schleifen:

  • for c in text: durchläuft den Text Zeichen für Zeichen; c.isalpha() prüft, ob c ein Buchstabe ist. Anders als in C zählen dabei auch Umlaute wie ä als Buchstabe; bei den englischen Testtexten spielt das keine Rolle.
  • text.split() zerlegt den Text an Leerzeichen in eine Liste von Wörtern; len(...) liefert deren Anzahl. Mehrfache Leerzeichen stören dabei nicht.
  • text.count(".") zählt, wie oft . im Text vorkommt.

Mehr String-Methoden stehen in der Python-Dokumentation.

Testen

Führen Sie Ihr Programm mit python readability.py aus und prüfen Sie mit den folgenden Texten, ob die angegebene Klassenstufe erscheint. Kopieren Sie nur den Text, ohne zusätzliche Leerzeichen.

  • One fish. Two fish. Red fish. Blue fish. (Before Grade 1)
  • Would you like them here or there? I would not like them here or there. I would not like them anywhere. (Grade 2)
  • Congratulations! Today is your day. You're off to Great Places! You're off and away! (Grade 3)
  • Harry Potter was a highly unusual boy in many ways. For one thing, he hated the summer holidays more than any other time of year. For another, he really wanted to do his homework, but was forced to do it in secret, in the dead of the night. And he also happened to be a wizard. (Grade 5)
  • In my younger and more vulnerable years my father gave me some advice that I've been turning over in my mind ever since. (Grade 7)
  • Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, "and what is the use of a book," thought Alice "without pictures or conversation?" (Grade 8)
  • When he was nearly thirteen, my brother Jem got his arm badly broken at the elbow. When it healed, and Jem's fears of never being able to play football were assuaged, he was seldom self-conscious about his injury. His left arm was somewhat shorter than his right; when he stood or walked, the back of his hand was at right angles to his body, his thumb parallel to his thigh. (Grade 8)
  • There are more things in Heaven and Earth, Horatio, than are dreamt of in your philosophy. (Grade 9)
  • It was a bright cold day in April, and the clocks were striking thirteen. Winston Smith, his chin nuzzled into his breast in an effort to escape the vile wind, slipped quickly through the glass doors of Victory Mansions, though not quickly enough to prevent a swirl of gritty dust from entering along with him. (Grade 10)
  • A large class of computational problems involve the determination of properties of graphs, digraphs, integers, arrays of integers, finite families of finite sets, boolean formulas and elements of other countable domains. (Grade 16+)

Korrektheit

Führen Sie in Ihrem Terminal den folgenden Befehl aus, um die Korrektheit Ihrer Arbeit zu überprüfen. Testen Sie Ihr Programm aber zuerst selbst.

check50 -l inf-zone/exercises/2026/readability/sentimental

Style

Führen Sie den folgenden Befehl aus, um den Stil Ihres Codes mit style50Prüfprogramm von CS50, das zeigt, wo Ihr Code von den Formatierungsregeln abweicht. In Grün zeigt es, was Sie ergänzen sollten, in Rot, was wegfallen soll. Glossar → zu analysieren:

style50 readability.py

Abgeben

Geben Sie im Ordner sentimental-readability ab:

inf upload readability/sentimental

Danach sehen Sie, welche Tests Ihr Programm besteht und ob die Übung für die Bonuspunkte zählt. Wie Sie inf installieren und sich anmelden, steht unter Abgeben mit inf.

Diese Seite als Markdown: ansehen herunterladen