Würfeln mit Armin

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

In de.comp.os.unix.programming (jaaa, Usenet gibt's noch) hat jemand einen Algorithmus den er auf Facebook gefunden hat, in Perl umgesetzt, den ich mal nach Python portiert habe. Das Programm spuckt Laschet-Aussagen zu Corona aus, wie „Was wir jetzt brauchen ist eine sechsmalige optionale Impfmatrix bis zur Bundestagswahl zur sofortigen Beschönigung der dritten Welle.“ oder „Was wir jetzt brauchen ist eine zweiwöchige softe Brückenmaßnahme bis nach den Abiturprüfungen zur willkürlichen Steigerung der Wahlprognosen.“

Code: Alles auswählen

#!/usr/bin/env python3
import random
import re

STEPS = [
    ["Was wir jetzt brauchen ist ein/e"],
    ["ein-", "zwei-", "drei-", "vier-", "fünf-", "sechs-"],
    ["tägige/r", "wöchige/r", "monatige/r", "fache/r", "malige/r", "hebige/r"],
    [
        "harte/r",
        "softe/r",
        "optionale/r",
        "intransparente/r",
        "alternativelose/r",
        "unumkehrbare/r",
    ],
    ["Wellenbrecher-", "Brücken-", "Treppen-", "Wende-", "Impf-", "Ehren-"],
    [
        "Lockdown:m",
        "Stopp:m",
        "Maßnahme:w",
        "Kampagne:w",
        "Sprint:m",
        "Matrix:w",
    ],
    ["bis"],
    [
        "zum Sommer",
        "auf Weiteres",
        "zur Bundestagswahl",
        "2030",
        "nach den Abiturprüfungen",
        "in die Puppen",
    ],
    ["zur"],
    [
        "sofortigen",
        "nachhaltigen",
        "allmählichen",
        "unausweichlichen",
        "wirtschaftsschonenden",
        "willkürlichen",
    ],
    [
        "Senkung",
        "Steigerung",
        "Beendigung",
        "Halbierung",
        "Vernichtung",
        "Beschönigung",
    ],
    ["der"],
    [
        "Infektionszahlen",
        "privaten Treffen",
        "Wirtschaftsleistung",
        "Wahlprognosen",
        "dritten Welle",
        "Bundesklanzlerin",
    ],
]


def concat(parts):
    previous_part = ""
    for part in parts:
        if part.endswith("-"):
            previous_part += part[:-1]
        else:
            if previous_part:
                part = previous_part + part.lower()
            yield part
            previous_part = ""


def fixup_sex(parts):
    result = []
    indices_to_fix = []
    for part in parts:
        if re.search(r"\/[er]$", part):
            indices_to_fix.append(len(result))
        else:
            match = re.fullmatch(r"(?P<part>.+):(?P<sex>[mw])", part)
            if match:
                part = match["part"]
                keep = {"m": "r", "w": "e"}[match["sex"]]
                for index in indices_to_fix:
                    part_to_fix = result[index]
                    result[index] = part_to_fix[:-2] + (
                        keep if part_to_fix.endswith(keep) else ""
                    )
                indices_to_fix = []

        result.append(part)

    return result


def main():
    print(" ".join(fixup_sex(concat(map(random.choice, STEPS)))), end=".\n")


if __name__ == "__main__":
    main()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Interessant. :) Kleiner Verbesserungsvorschlag: Der korrekte Fachbegriff für das grammatische Geschlecht ist Genus bzw. Gender. Sexus/Sex bzw. sich auf das biologische Geschlecht.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Kann ich jetzt leider nicht auf's Original schieben, denn da hiess die Funktion `mw()` und die Gruppe war nicht benannt, hiess also `$2`. 🙂
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten