# Lesbarkeit (Python)

Quelle: https://dev.inf.zone/exercises/10/readability/

## Aufgabe

**Auf einen Blick**

- **Was:** die Aufgabe [Lesbarkeit](https://dev.inf.zone/exercises/03/readability/) aus Übung 3, diesmal in Python. Das Programm schätzt, ab welcher (US-amerikanischen) Klassenstufe man einen englischen Text verstehen kann.
- **Datei:** `readability.py` in einem Ordner `sentimental-readability`.
- **Eingabe:** ein Text nach der Aufforderung `Text: `, wie in C.
- **Ausgabe:** wie in C `Grade X`, ab 16 `Grade 16+`, unter 1 `Before Grade 1`.

### 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](https://dev.inf.zone/exercises/03/readability/#so-funktioniert-der-coleman-liau-index). 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

[Terminal-Aufzeichnung ansehen](https://asciinema.org/a/WnE6pZNnDkDm8NtuxrTqY1Nu4)

## 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](https://dev.inf.zone/exercises/03/readability/#so-funktioniert-der-coleman-liau-index), 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](https://docs.python.org/3/library/stdtypes.html#string-methods).

## 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.

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

### Style

Führen Sie den folgenden Befehl aus, um den Stil Ihres Codes mit `style50` zu analysieren:

```bash
style50 readability.py
```

## Abgeben

Geben Sie im Ordner `sentimental-readability` ab:

```bash
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`](https://dev.inf.zone/faq/uebung-solutions/#inf-installieren).
