Marlems PyAssistent

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
PythonMarlem
User
Beiträge: 90
Registriert: Dienstag 19. Mai 2020, 19:17
Wohnort: Dußlingen
Kontaktdaten:

Hallo,

mein erstes Python-Programm gibt es zum kostenlosen Download.
Marlems PyAssistent ist vom Prinzip her ein Sprachassistent wie Siri, Google Assistent und Cortana. Allerdings werden Kommandos nicht gesprochen, sondern per Tastatur eingegeben. Antworten erfolgen nicht per Sprachausgabe, sondern per Text. Der Vorteil ist, Marlems PyAssistent ist auch für Nutzer die nicht sprechen können oder gehörlos sind einsetzbar. Marlems PyAssistent hat eine ausführliche Hilfe. Das Programm wurde auf folgenden Betriebssystemen erfolgreich getestet:
Windows 10
Ubuntu 20.04
MacOS 10.15
Marlems PyAssistent kann 200 Kommandos.

Quelle: https://www.marlem-software.de/download ... honconsole

So, jetzt der eigentliche Grund warum ich zurückkehre!

Marlems PyAssistent wurde auf heise.de vorgestellt:
https://www.heise.de/news/Barrierefreie ... 40192.html

Leute, ich entwickle Software seit 1996. Noch nie wurde ein Programm von mir auf heise.de vorgestellt.
Ich bin Gigastolz!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Herzlichen Glückwunsch!
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@PythonMarlem: alle Zeilenumbruchsverhinderungszeichen sind überflüssig. Sie machen eh nur mehr Probleme, als dass sie lösen.
Variablennamen und Funktionsnamen schreibt man komplett klein.
In mainmenu benutzt Du Rekursion statt einer Schleife. Was um so schlimmer ist, da Du die Datei, die Du da öffnest nicht wieder schließt und damit immer mehr Dateihandles verbrätst, bis das Betriebssystem keine Lust mehr.
In `barrierefreiheitbetriebssystem` benutzt man statt Popen und wait einfach run. Da Du die Ausgabe in Pipes umleitest, diese aber nicht ausliest, können die Pipes irgendwann voll sein, und dann stehen beide Programme, das eine Wartet darauf, dass wieder Platz in der Pipe ist und das andere, dass es endlich zu Ende ist.
In `kommandoszuthemenanzeigen` rufst Du sorted auf, ohne etwas mit dem Rückgabewert zu tun, das ist sinnlos.
Warum wird aus Themen plötzlich nur ein Thema, nur indem man den Leerraum entfernt?
In `rechne` benutzt Du globale Variablen. Was soll denn das v in vzahl bedeuten? Ist das eine Vertrauenszahl, die andere Zahlen ausspioniert?
Die vielen Replace-Ketten würde man mit einer Schleife kürzer schreiben.
Die if-Abfrage mit rechenaufgabeformat ist doch total überflüssig, da Du immer Leerzeichen um Rechenoperationen einfügen könntest. split sollte normalerweise ohne Argument aufgerufen werden, damit auch anderer Leerraum, als exakt ein Leerzeichen erkannt werden.
rechenaufgabearray ist dann kein Array sondern eine Liste. Datentypen haben in Namen aber eh nichts verloren.
Oh, noch mehr Vertrauensvariablen. Nach einem Fehler machst Du so weiter, als ob nichts passiert wäre. Das führt zu Folgefehlern und sehr seltsamen Ausgaben.
Bei den vrechenoperator-Blöcken verstehe ich nicht, wie dort ein ValueError auftreten sollte und warum das etwas mit der Meldung zu tun hat, die dann kommt. Das kann alles weg. Die vielen if-Blöcke würde man durch ein Wörterbuch ersetzen.

Code: Alles auswählen

import operator
ZAHLEN = {
    "null": "0",
    "eins": "1",
    "zwei": "2",
    "drei": "3",
    "vier": "4",
    "fünf": "5",
    "sechs": "6",
    "sieben": "7",
    "acht": "8",
    "neun": "9",
    "zehn": "10",
}
OPERATIONEN = {
    "+": operator.add,
    "-": operator.sub,
    ":": operator.div,
    "/": operator.div,
    "*": operator.mul,
    "x": operator.mul,
    "X": operator.mul,
}

def rechne(rechenaufgabe):
    """rechnet +*/- """
    for wort, zahl in ZAHLEN.items():
        rechenaufgabe = rechenaufgabe.replace(wort, zahl)
    for operator in OPERATIONEN:
        rechenaufgabe = rechenaufgabe.replace(operator, " {operator} ")
    teile = rechenaufgabe.split()
    if len(teile) != 3:
        print("Geben sie eine Rechnung mit zwei Operanden ein! Richtig: 1 + 1 ")

    try:
        zahl1 = float(teile[0])
    except ValueError:
        print("Keine Zahl eingegeben!")
        return
    try:
        zahl2 = float(teile[2])
    except ValueError:
        print("Keine Zahl eingegeben!")
        return
    try:
        operation = OPERATIONEN[teile[1]]
    except KeyError:
        print("Keine bekannte Rechenoperation")
        return

    ergebnis = operation(zahl1, zahl2)
    antwort(f"{rechenaufgabe} = {ergebnis}", "text")
In `rechneProzent` hast Du quasi den selben Code wie in `rechne`, nur dass Du jetzt einen Programmierfehler drin hast, weil Du rechenaufgabe nicht konisistent in vrechenaufgabe umbenannt hast. `vrechenaufgabearray` wird mit einer leeren Liste belegt, aber dann gleich wieder überschrieben.

Strings setzt man nicht mit + zusammen, sondern benutzt Formatstrings.
In `dasoertliche` ist es noch schlimmer, denn dort werden Usereingaben einfach so in eine URL hineingestückelt. Für URLs müssen Parameter aber passend kodiert werden (urllib.parse.quote).
In `einfachunterhalten` würde man statt der langen if-Kette einfach ein Wörterbuch benutzen. Die erste Frage kann nie gestellt werden, weil es einen Großbuchstaben gibt.
Zu `clear`: os.system ist veraltet.
In `programmezumausfuehrenhinzufuegen` schreibst Du in eine Datei, die noch zum Lesen geöffnet ist. In den beiden if-Blöcken ist auch viel doppelter Code. Man prüft nicht explizit auf True.
Die Funktion `existiertdatei` ist auch süß. Eine Funktion, die prüft ob eine Datei existiert und einen Text ausgibt. Die Ausgabe gehört eigentlich dort hin, wo die Funktion aufgerufen wird.
In `witzeerzaehlen` sollte alles wieder in einem Wörterbuch gespeichert sein.
In `scheresteinpapier` hast Du eine Variable spielen, die nie geändert wird. Und wieder zu viel kopierter Code.
`Tic Tac Toe` benutzt globale Variablen, statt das feld sauber per Argument zu übergeben.
Bei `Vier Gewinnt` genauso.
`hangman` benutzt wieder Rekursion statt einer Schleife.
Die ganzen vokabeltrainer-Funktionen sind identisch und sollten nur eine Funktion sein.

Du benutzt pathlib.Path sehr seltsam, weil Du trotzdem alles mit os.path machst, was veraltet ist.
In `pyassistent` hast Du sehr viel kopierten Code. Warum hast Du nochmal alle Fragen von einfachunterhalten wiederholt?

2000 Zeilen ungetesteter Code sind zu viel für eine Datei.
rennmaus
User
Beiträge: 217
Registriert: Dienstag 4. August 2020, 10:24

Wow! Herzlichen Glückwunsch, vielleicht schaue ich es mir auch mal an
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das Programm hat es auf Heise geschafft: https://www.heise.de/news/Barrierefreie ... 40192.html
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

@__blackjack__
PythonMarlem hat geschrieben: Freitag 30. Oktober 2020, 04:02 (...)
Marlems PyAssistent wurde auf heise.de vorgestellt:
https://www.heise.de/news/Barrierefreie ... 40192.html

Leute, ich entwickle Software seit 1996. Noch nie wurde ein Programm von mir auf heise.de vorgestellt.
Ich bin Gigastolz!
@PythonMarlem: Schönes Projekt - Glückwunsch.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ups, glatt überlesen.

Ich seh's ja eher skeptisch. Von einem IT-Unternehmen erwarte ich etwas mehr als so ein Anfängerskript. Einen Anfänger kann man dafür beglückwünschen, jemand der angeblich seit über 20 Jahren Software entwickelt, sollte etwas handwerklich besseres liefern können.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
PythonMarlem
User
Beiträge: 90
Registriert: Dienstag 19. Mai 2020, 19:17
Wohnort: Dußlingen
Kontaktdaten:

Danke für die Glückwünsche.
Heute wird es auf entwickler.de vorgestellt:
https://entwickler.de/online/python/mar ... 48463.html
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das Thema ist wichtig, aber die Umsetzung lässt noch Luft nach oben (nichts für ungut). Vielleicht tust du dich mal mit jemandem zusammen, der viel Programmier-Erfahrung hat in Kombination mit deinem Fachwissen. Wäre eine gute Möglichkeit, das Projekt für die nächsten Jahre weiterlaufen zu lassen. Aber klar, es ist dein Ding und du bestimmst, wohin die Reise geht... ;)
Antworten