Bitte helft mir dieses programm funktioniert nicht!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Superoof123
User
Beiträge: 9
Registriert: Samstag 3. Juni 2023, 18:56

Hallöchen! Ich könnte ein bischen hilfe mit einem script gebrauchen, welches einen bug hat. Allerdings kann ich diesen Nicht finden :cry: Bitte helft mir!

Dies ist der code:

Code: Alles auswählen

from winsound import *
from time import sleep

def rebootpeep():
	winsound.Beep(1300, 250)

def checkstats(type):
	if type == "audio":
		system = databankstr[0]
	elif type == "camera":
		system = databankstr[1]
	elif type == "ventilation":
		system = databankstr[2]
	if int(system) == 1:
		return "okay"
	else:
		return "error"

databank = open(r"fnafdatenbank.txt", "r+")

databankstr =[]
for line in databank:
	databankstr.append(line)

def GUI():
	print("""System restart
menu>>>""")
	print("")
	print("audio devices " + checkstats("audio"))
	print("camera system " + checkstats("camera"))
	print("ventilation " + checkstats("ventilation"))
	print("")
	print("""reboot all: type R
exit: type e""")
	response = input(">>")
	return response.capitalize


while True:
	answer = GUI()
	if answer == "R":
		print("rebooting. ")
		rebootbeep()
		sleep(3)
		print("rebooting.. [II]")
		rebootbeep()
		sleep(3)
		print("rebooting...[III]")
		rebootbeep()
		sleep(3)
		print("rebooting. [IIII]")
		rebootbeep()
		sleep(3)
		print("rebooting.. [IIIII]")
		rebootbeep()
		sleep(3)
		print("rebooting...[IIIIII]")
		rebootbeep()
		sleep(3)
		print("rebooting. [IIIIIII]")
		rebootbeep()
		sleep(3)
		print("rebooting.. [IIIIIIII]")
		rebootbeep()
		sleep(3)
		print("rebooting...[IIIIIIIII]")
		rebootbeep()
		sleep(3)
		print("rebooting. [IIIIIIIIII]")
		rebootbeep()
		print("system sucessfully rebooted>>>")
	else:
		pass
und das ist die Fehlermeldung, die ich dazu bekomme:

Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Meike\Desktop\fnaf 3 maintance", line 40, in <module>
answer = GUI()
File "C:\Dokumente und Einstellungen\Meike\Desktop\fnaf 3 maintance", line 35, in GUI
response = input(">>")
File "<string>", line 1, in <module>
NameError: name 'r' is not defined

btw ich arbeite mit python 2.5 weil ich einen alten samsung mit windows xp programmiere
ausserdem arbeitet diese programm mit einer .txt datei namens fnafdatenbank.txt
wo in den ersten drei zeilen jeweils eine null steht
bitte helft mir!!! :cry: :cry: :cry:
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Python 2.5 ist in jeglicher Hinsicht tot. Das ist End-Of-Life.
Windows XP ebenfalls.
Beides seit 10 Jahren.

Benutze ein aktuelles System.
Wirklich.
Python 2.x ist komplett Out-Of-Life und es unterscheidet sich in wichtigen Dingen von Python 3.x, weil hier willentlich Sachen geändert wurden.
Es gibt Situationen, in denen ich vestehe, dass man ein 2.x verwendet, zum Beispiel weil es in andere Software eingebettet ist und man daher keine Wahl hat. Ein veraltetes System ist keine in meinen Augen keine solche Situation. Selbst auf alter Hardware kann man andere Betriebssysteme als Windows XP installieren. Oder eine neuere Python Version.
Superoof123
User
Beiträge: 9
Registriert: Samstag 3. Juni 2023, 18:56

sparrow hat geschrieben: Samstag 3. Juni 2023, 19:40 Python 2.5 ist in jeglicher Hinsicht tot. Das ist End-Of-Life.
Windows XP ebenfalls.
Beides seit 10 Jahren.

Benutze ein aktuelles System.
Wirklich.
Python 2.x ist komplett Out-Of-Life und es unterscheidet sich in wichtigen Dingen von Python 3.x, weil hier willentlich Sachen geändert wurden.
Es gibt Situationen, in denen ich vestehe, dass man ein 2.x verwendet, zum Beispiel weil es in andere Software eingebettet ist und man daher keine Wahl hat. Ein veraltetes System ist keine in meinen Augen keine solche Situation. Selbst auf alter Hardware kann man andere Betriebssysteme als Windows XP installieren. Oder eine neuere Python Version.
ich habe tatsächlich schon einmal versucht das betriebsystem upzugraden, allerdings hat es leider nicht geklappt. ausserdem bist du von meiner eigentlichen frage vollkommen abgekommen
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Das ist meine Antwort auf deine Frage.
Benutze eine aktuelle Python Version. Mit der funktioniert dein Code vermutlich. Mit Python 2.x auf jeden Fall nicht.
Superoof123
User
Beiträge: 9
Registriert: Samstag 3. Juni 2023, 18:56

sparrow hat geschrieben: Samstag 3. Juni 2023, 20:04 Das ist meine Antwort auf deine Frage.
Benutze eine aktuelle Python Version. Mit der funktioniert dein Code vermutlich. Mit Python 2.x auf jeden Fall nicht.
ich kann aufgrung meines betriebsystems zwar nichts neueres installieren aber ist auch egal
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Laut Python Webseite würde 3.4 noch unter Windows XP funktionieren.
Das ist zwar auch EOL, würde aber zumindest den Syntax unterstützen.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du benutzt das falsche input. Unter python2.5 muss das raw_input sein.

Aber sparrow hat Recht: mit diesem Murks arbeitet man nicht mehr.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Superoof123: Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs.
*-Importe sind schlecht. Globale Variablen benutzt man nicht. Die `checkstats`-Funktion ist auch reichlich kompliziert, normalerweise würde man die Daten schon beim Einlesen in die richtige Struktur bringen. Bei einem unbekannten Typ kommt es zum UnboundLocalError, das sollte zu einer sinnvolleren Exception führen.
Der Filemodus "r+" ist eigentlich nie sinnvoll, vor allem, weil Du gar nichts schreiben willst. Dateien die man öffnet, sollte man auch wieder schließen. Seit 2.5 kann man dafür das with-Statement benutzen.
`print` ist in Python 2.5 keine Funktion, sollte also auch nicht wie eine geschrieben werden.
`capitalize` sollte man auch aufrufen.
Statt Code vielfach zu kopieren, benutzt man eine Schleife.
Wenn im else-Zweig eh nichts drinsteht, dann kann man ihn auch weglassen.

Code: Alles auswählen

from __future__ import with_statement
import winsound
from time import sleep

def rebootpeep():
    winsound.Beep(1300, 250)

def read_database(filename):
    with open(filename) as lines:
        result = {}
        for type, line in zip(["audio", "camera", "ventilation"], lines):
            result[type] = int(line)
    return result

def checkstats(stat):
    return "okay" if stat else "error"

def gui(stats):
    print "System restart"
    print "menu>>>"
    print
    print "audio devices " + checkstats(stats["audio"])
    print "camera system " + checkstats(stats["camera"])
    print "ventilation " + checkstats(stats["ventilation"])
    print
    print "reboot all: type R"
    print "exit: type e"
    response = raw_input(">>")
    return response.capitalize()

def main():
    stats = read_database("fnafdatenbank.txt")
    while True:
        answer = gui(stats)
        if answer == "R":
            print "rebooting. "
            for i in range(2, 11):
                rebootbeep()
                sleep(3)
                print "rebooting.%-2s[%s]" % ('.' * (i % 3), 'I' * i)
            rebootbeep()
            print "system sucessfully rebooted>>>"

if __name__ == "__main__":
    main()
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Superoof123: Da sind noch mehr Fehler drin, was darauf hindeutet, dass Du das nicht *entwickelt* hast, sondern grossteils einfach runtergeschrieben ohne zwischendurch mal ausprobiert zu haben ob das überhaupt funktioniert.

Sternchen-Importe sind Böse™. Das macht Programme unnötig unübersichtlicher und fehleranfälliger und es besteht die Gefahr von Namenskollisionen. Und in Deinem Fall funktioniert das auch gar nicht, denn *im* `winsound`-Modul gibt es natürlich nicht das Modul selbst noch mal unter dem Namen, denn `Beep()` versuchst Du ja über den Modulnamen anzusprechen.

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Besonders unübersichtlich ist es auf Modulebene das Hauptprogramm und Funktionsdefinitionen zu vermischen.

Funtkionen (und Methoden) bekommen alles was sie ausser Konstanten benötigen, als Argument(e) übergeben. `checkstats()` braucht also `databank` als Argument, und in Folge `GUI()` dann auch.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase). Auch bei den kleingeschriebenen Namen fehlen bei Dir manchmalUnterstrichezwischendenWorten. Das ist schlecht zu lesen.

Funktionen (und Methoden) werden üblicherweise nach der Tatigkeit benannt, die sie durchführen. Damit der Leser weiss was sie tun und um sie besser von eher passiven Werten unterscheiden zu können.

Entscheide Dich für eine Sprache bei den Namen. Am besten Englisch, weil auch die Schlüsselworte der Programmiersprache und die Namen aus Modulen und Bibliotheken in Englisch sind. Am schlimmsten ist so Denglisch wie `databank`. Entweder `database` oder `datenbank`. Oder einfach `file` oder `lines`, denn dafür steht dieses Objekt.

Dateimodi mit "+" sind bei Textdateien so gut wie immer falsch. Einfach nur "r". Mehr als lesen wird hier ja auch gar nicht gemacht.

Beim öffnen von Textdateien sollte man immer die Kodierung mit angeben in der die Datei ist. Hier reicht ASCII, denn es scheinen ja nur Zahlen drin zu sein.

Dateien die man öffnet, sollte man auch wieder schliessen. Am besten verwendet man dazu die ``with``-Anweisung.

`databankstr` ist auch falsch als Name, falls das `str` für Zeichenkette stehen sollte. Grunddatentypen haben in Namen nichts zu suchen, denn die ändert man im Laufe der Entwicklung gerne mal zu was spezifischerem oder selbst programmierten, und dann hat man überall falsche Namen oder muss alle betroffenen Namen suchen und ändern. Und da später immer wieder der Inhalt der Zeilen in ganze Zahlen umgewandelt werden, sollte man das sinnvollerweise *einmal* gleich beim einlesen erledigen.

Statt umständlich eine Schleife zu schreiben, welche die Zeilen einzeln an eine anfangs leere Liste anhängt, kann man auch einfach `list()` aufrufen. Das sammelt alles aus dem übergebenen iterierbaren Objekt in einer neuen Liste und gibt die zurück.

Zwischenstand:

Code: Alles auswählen

    with open("fnafdatenbank.txt", "r", encoding="ascii") as lines:
        stats = list(map(int, lines))
Da später aber über Namen/Zeichenketten auf die Werte zugegriffen werden soll, ist eine Liste die falsche Datenstruktur. Abbildungen von Schlüsseln auf Werte werden in einem Wörterbuch (`dict`) gespeichert.

Um eine Leerzeile ”auszugeben” braucht man `print()` kein Argument zu übergeben.

`capitalize()` ist für *ein* Zeichen nicht so wirklich sinnvoll. Da reicht `upper()` völlig aus. Und man muss die Methode auch *aufrufen*. Im Moment gibt `GUI()` die *Methode* zurück, statt dem Ergebnis des Aufrufs.

`type` ist der Name einer eingebauten Funktion, den sollte man nicht für etwas anderes verwenden.

Es wird versucht eine Funktion `rebootbeep()` aufzurufen die es nicht gibt. Ich nehme mal an `rebootpeep()` sollte eigentlich *so* heissen.

Man kopiert keinen Code immer wieder und passt ihn leicht an. Dafür gibt es Funktionen und/oder Schleifen.

``else: pass`` macht keinen Sinn.

Zwischenstand:

Code: Alles auswählen

#!/usr/bin/env python3
import winsound
from time import sleep

SYSTEM_NAMES = ["audio devices", "camera system", "ventilation"]


def reboot_beep():
    winsound.Beep(1300, 250)


def check_status(system_name_to_status, system_name):
    return "okay" if system_name_to_status[system_name] == 1 else "error"


def show_menu(system_name_to_status):
    print("System restart")
    print("menu>>>")
    print()
    for name in system_name_to_status.keys():
        print(name, check_status(system_name_to_status, name))
    print()
    print("reboot all: type R")
    print("exit: type E")

    return input(">>").upper()


def main():
    with open("fnafdatenbank.txt", "r", encoding="ascii") as lines:
        system_name_to_status = dict(zip(SYSTEM_NAMES, map(int, lines)))

    while True:
        answer = show_menu(system_name_to_status)
        if answer == "R":
            for i in range(10):
                print(
                    "rebooting{:<3}[{:<10}]".format("." * (i % 3 + 1), "I" * i),
                    end="\r",
                    flush=True,
                )
                reboot_beep()
                sleep(1)
            print("system sucessfully rebooted>>>")
        
        elif answer == "E":
            return


if __name__ == "__main__":
    main()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Superoof123
User
Beiträge: 9
Registriert: Samstag 3. Juni 2023, 18:56

Sirius3 hat geschrieben: Samstag 3. Juni 2023, 21:40 @Superoof123: Eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs.
*-Importe sind schlecht. Globale Variablen benutzt man nicht. Die `checkstats`-Funktion ist auch reichlich kompliziert, normalerweise würde man die Daten schon beim Einlesen in die richtige Struktur bringen. Bei einem unbekannten Typ kommt es zum UnboundLocalError, das sollte zu einer sinnvolleren Exception führen.
Der Filemodus "r+" ist eigentlich nie sinnvoll, vor allem, weil Du gar nichts schreiben willst. Dateien die man öffnet, sollte man auch wieder schließen. Seit 2.5 kann man dafür das with-Statement benutzen.
`print` ist in Python 2.5 keine Funktion, sollte also auch nicht wie eine geschrieben werden.
`capitalize` sollte man auch aufrufen.
Statt Code vielfach zu kopieren, benutzt man eine Schleife.
Wenn im else-Zweig eh nichts drinsteht, dann kann man ihn auch weglassen.

Code: Alles auswählen

from __future__ import with_statement
import winsound
from time import sleep

def rebootpeep():
    winsound.Beep(1300, 250)

def read_database(filename):
    with open(filename) as lines:
        result = {}
        for type, line in zip(["audio", "camera", "ventilation"], lines):
            result[type] = int(line)
    return result

def checkstats(stat):
    return "okay" if stat else "error"

def gui(stats):
    print "System restart"
    print "menu>>>"
    print
    print "audio devices " + checkstats(stats["audio"])
    print "camera system " + checkstats(stats["camera"])
    print "ventilation " + checkstats(stats["ventilation"])
    print
    print "reboot all: type R"
    print "exit: type e"
    response = raw_input(">>")
    return response.capitalize()

def main():
    stats = read_database("fnafdatenbank.txt")
    while True:
        answer = gui(stats)
        if answer == "R":
            print "rebooting. "
            for i in range(2, 11):
                rebootbeep()
                sleep(3)
                print "rebooting.%-2s[%s]" % ('.' * (i % 3), 'I' * i)
            rebootbeep()
            print "system sucessfully rebooted>>>"

if __name__ == "__main__":
    main()
vielen dank für das gefixte programm!. Naja, dieses programm war auch nicht ganz fertig, da er nach dem code in main() die ersten drei zeilen in fnafdatenbank.txt zu jeweils einer eins umschreiben soll. Aber trotzdem: vielen Dank :mrgreen: :mrgreen: :mrgreen:
Superoof123
User
Beiträge: 9
Registriert: Samstag 3. Juni 2023, 18:56

__blackjack__ hat geschrieben: Samstag 3. Juni 2023, 21:58 @Superoof123: Da sind noch mehr Fehler drin, was darauf hindeutet, dass Du das nicht *entwickelt* hast, sondern grossteils einfach runtergeschrieben ohne zwischendurch mal ausprobiert zu haben ob das überhaupt funktioniert.

Sternchen-Importe sind Böse™. Das macht Programme unnötig unübersichtlicher und fehleranfälliger und es besteht die Gefahr von Namenskollisionen. Und in Deinem Fall funktioniert das auch gar nicht, denn *im* `winsound`-Modul gibt es natürlich nicht das Modul selbst noch mal unter dem Namen, denn `Beep()` versuchst Du ja über den Modulnamen anzusprechen.

Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst. Besonders unübersichtlich ist es auf Modulebene das Hauptprogramm und Funktionsdefinitionen zu vermischen.

Funtkionen (und Methoden) bekommen alles was sie ausser Konstanten benötigen, als Argument(e) übergeben. `checkstats()` braucht also `databank` als Argument, und in Folge `GUI()` dann auch.

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase). Auch bei den kleingeschriebenen Namen fehlen bei Dir manchmalUnterstrichezwischendenWorten. Das ist schlecht zu lesen.

Funktionen (und Methoden) werden üblicherweise nach der Tatigkeit benannt, die sie durchführen. Damit der Leser weiss was sie tun und um sie besser von eher passiven Werten unterscheiden zu können.

Entscheide Dich für eine Sprache bei den Namen. Am besten Englisch, weil auch die Schlüsselworte der Programmiersprache und die Namen aus Modulen und Bibliotheken in Englisch sind. Am schlimmsten ist so Denglisch wie `databank`. Entweder `database` oder `datenbank`. Oder einfach `file` oder `lines`, denn dafür steht dieses Objekt.

Dateimodi mit "+" sind bei Textdateien so gut wie immer falsch. Einfach nur "r". Mehr als lesen wird hier ja auch gar nicht gemacht.

Beim öffnen von Textdateien sollte man immer die Kodierung mit angeben in der die Datei ist. Hier reicht ASCII, denn es scheinen ja nur Zahlen drin zu sein.

Dateien die man öffnet, sollte man auch wieder schliessen. Am besten verwendet man dazu die ``with``-Anweisung.

`databankstr` ist auch falsch als Name, falls das `str` für Zeichenkette stehen sollte. Grunddatentypen haben in Namen nichts zu suchen, denn die ändert man im Laufe der Entwicklung gerne mal zu was spezifischerem oder selbst programmierten, und dann hat man überall falsche Namen oder muss alle betroffenen Namen suchen und ändern. Und da später immer wieder der Inhalt der Zeilen in ganze Zahlen umgewandelt werden, sollte man das sinnvollerweise *einmal* gleich beim einlesen erledigen.

Statt umständlich eine Schleife zu schreiben, welche die Zeilen einzeln an eine anfangs leere Liste anhängt, kann man auch einfach `list()` aufrufen. Das sammelt alles aus dem übergebenen iterierbaren Objekt in einer neuen Liste und gibt die zurück.

Zwischenstand:

Code: Alles auswählen

    with open("fnafdatenbank.txt", "r", encoding="ascii") as lines:
        stats = list(map(int, lines))
Da später aber über Namen/Zeichenketten auf die Werte zugegriffen werden soll, ist eine Liste die falsche Datenstruktur. Abbildungen von Schlüsseln auf Werte werden in einem Wörterbuch (`dict`) gespeichert.

Um eine Leerzeile ”auszugeben” braucht man `print()` kein Argument zu übergeben.

`capitalize()` ist für *ein* Zeichen nicht so wirklich sinnvoll. Da reicht `upper()` völlig aus. Und man muss die Methode auch *aufrufen*. Im Moment gibt `GUI()` die *Methode* zurück, statt dem Ergebnis des Aufrufs.

`type` ist der Name einer eingebauten Funktion, den sollte man nicht für etwas anderes verwenden.

Es wird versucht eine Funktion `rebootbeep()` aufzurufen die es nicht gibt. Ich nehme mal an `rebootpeep()` sollte eigentlich *so* heissen.

Man kopiert keinen Code immer wieder und passt ihn leicht an. Dafür gibt es Funktionen und/oder Schleifen.

``else: pass`` macht keinen Sinn.

Zwischenstand:

Code: Alles auswählen

#!/usr/bin/env python3
import winsound
from time import sleep

SYSTEM_NAMES = ["audio devices", "camera system", "ventilation"]


def reboot_beep():
    winsound.Beep(1300, 250)


def check_status(system_name_to_status, system_name):
    return "okay" if system_name_to_status[system_name] == 1 else "error"


def show_menu(system_name_to_status):
    print("System restart")
    print("menu>>>")
    print()
    for name in system_name_to_status.keys():
        print(name, check_status(system_name_to_status, name))
    print()
    print("reboot all: type R")
    print("exit: type E")

    return input(">>").upper()


def main():
    with open("fnafdatenbank.txt", "r", encoding="ascii") as lines:
        system_name_to_status = dict(zip(SYSTEM_NAMES, map(int, lines)))

    while True:
        answer = show_menu(system_name_to_status)
        if answer == "R":
            for i in range(10):
                print(
                    "rebooting{:<3}[{:<10}]".format("." * (i % 3 + 1), "I" * i),
                    end="\r",
                    flush=True,
                )
                reboot_beep()
                sleep(1)
            print("system sucessfully rebooted>>>")
        
        elif answer == "E":
            return


if __name__ == "__main__":
    main()
deine annahme dass ich das grösstenteils heruntergeschrieben habe, ist teilweise richtig :? .
ich habe ein paar bücher zu hilfe genommen, wo zum beispiel drinstand, wie ich mit txt dateinen umgehe (und noch andere sachen.
ABER:

-ich hatte keine vorlage bezüglich des kompletten codes (d.h. ich habe nicht stumpf abgeschrieben)

-den grossteil der struktur habe ich selbst geschrieben

btw: bei der gestaltung des progammes habe ich mich von einem videospiel namens "five nights at freddy's 4" inspirieren lassen, weil dort gibt es ein sogennantes "maintance panel" welches ich nachempfunden habe
Bild
Zuletzt geändert von Superoof123 am Donnerstag 8. Juni 2023, 14:53, insgesamt 1-mal geändert.
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Du musst nicht immer den Beitrag komplett zitieren. Der steht doch vorher schon im Thema, man muss nur hoch scrollen. 🙂
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Superoof123
User
Beiträge: 9
Registriert: Samstag 3. Juni 2023, 18:56

__blackjack__ hat geschrieben: Donnerstag 8. Juni 2023, 14:52 Du musst nicht immer den Beitrag komplett zitieren. Der steht doch vorher schon im Thema, man muss nur hoch scrollen. 🙂
das macht er immer automatisch und ich habe nichts dagegen, dass er das macht, also lasse ich es so wie es ist. 8)
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist Quatsch. Du drueckst dafuer auf einen Knopf. Das kannst du also auch wunderbar sein lassen.

Und Hinweise auf Forengepflogenheiten kann man natuerlich geflissentlich ignorieren. So wie andere auch deine Beitraege ignorieren koennen. Musste dir halt ueberlegen, warum du hier eigentlich postest. Wegen der tollen Zitatfunktion, oder weil du dir Hilfe erhoffst 🤷‍♂️
Antworten