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 | |
|---|---|---|
| Eingabe | get_string("Text: ") aus cs50.h | get_string("Text: ") nach from cs50 import get_string |
| Ausgabe | printf("Grade %i\n", index); | print(f"Grade {index}") – print hängt den Zeilenumbruch selbst an |
| Teilen | int / int schneidet die Nachkommastellen ab | / liefert immer eine Kommazahl (float); kein Umwandeln nötig |
| Runden | round aus math.h; 2.5 wird zu 3 | eingebautes 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.pyin einem Ordner namenssentimental-readability. - Ihr Programm fragt mit
get_stringaus dercs50-Bibliothek und der AufforderungText: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+oderBefore 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, obcein 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/sentimentalStyle
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.pyAbgeben
Geben Sie im Ordner sentimental-readability ab:
inf upload readability/sentimentalDanach 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