Seite 1 von 1

Probleme mit casefold Funktion

Verfasst: Dienstag 5. April 2022, 22:42
von JohnnyDer9te
Hallo Leute,

Ich hab da ein kleines Problem wofür ich keine Lösung finde. Dauert nicht mehr lange und ich bin am Verzweifeln.
Und zwar soll der User eine einfache Ja/Nein Frage beantworten, allerdings unabhängig von der Groß und Kleinschreibung der kleinen Wörtchen (ob ja, Ja, jA, JA. das sollte egal sein)
Laut Google sollte der Befehl str.casefold vor dem input gesetzt funktionieren, allerdings springt er mir dann gleich auf das "else" in der Schleife.
Ohne das funktioniert es Prima, aber nur wenn ich die Wörter so schreibe wie sie da stehen.

Ich bin noch Anfänger und hoffe ihr könnt mir helfen meinen Fehler zu finden.
Hier der Code

Code: Alles auswählen

VarJaNein = ["Ja", "Nein"]

print("KALI: Text_1.")

for UserInput in VarJaNein:
    UserInput = str.casefold(input("\nBitte JA oder NEIN eingeben\n>>>"))
    if UserInput == "Ja":
        print("KALI: Text_2")
        break
    elif UserInput == "Nein":
        print("KALI: Text_3.")
        break
    else:
        print("KALI: Es tut mir Leid, der Befehl ist nicht ausführbar.")
        

#print("\nStuff")
Das ganze sollte ein kleines Textadventure Game werden. Zu Übungszwecke von meiner Umschulung aus.

Danke schon mal im voraus.
LG Johnny

Re: Probleme mit casefold Funktion

Verfasst: Dienstag 5. April 2022, 23:04
von __blackjack__
@JohnnyDer9te: Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (PascalCase).

Die Schleife macht keinen Sinn, und damit auch `VarJaNein` nicht.

Methoden sollten nicht über den Typ aufgerufen werden, sondern auf dem Objekt, also nicht ``str.casefold(text)`` sondern ``text.casefold()``.

Schau Dir doch mal das Ergebnis von `casefold()` an und womit Du das vergleichst. Dann sollte klar sein, warum das immer ungleich ist.

Re: Probleme mit casefold Funktion

Verfasst: Mittwoch 6. April 2022, 02:47
von JohnnyDer9te
@__blackjack__
Vielen Dank, das hat mir sehr geholfen.
Das mit den Namen wusste ich noch nicht, werde es mir aber auf jeden Fall merken.
Die Angelegenheit mit der Schleife, es war mir erst nicht ganz klar was du meinst, mein Hintergedanke war, dass ich es dem User ermöglichen wollte seine Eingabe zu korrigieren, falls er sich vertippt oder so.
Aber ja, ich habe es dann auch erkannt was für einen Schwachsinn ich da gemacht habe. :roll:

Ich hoffe du zeigst meiner Unfähigkeit gegenüber ein wenig Nachsicht, das ist mein erstes Programm :D

Nochmals vielen Dank!

Re: Probleme mit casefold Funktion

Verfasst: Mittwoch 6. April 2022, 10:43
von /me
Idiomatisch wäre hier eine while True Schleife. Das Programm bleibt so lange in der Schleife bis sie mit `break` verlassen wird und fordert den Benutzer somit bei einer Fehleingabe erneut zur Eingabe auf.

Code: Alles auswählen

while True:
    user_input = input("\nBitte JA oder NEIN eingeben\n>>>").casefold()
    if user_input == 'ja':
        print("KALI: Text_2")
        break
    elif user_input == "nein":
        print("KALI: Text_3.")
        break
    else:
        print("KALI: Es tut mir Leid, der Befehl ist nicht ausführbar.")

Re: Probleme mit casefold Funktion

Verfasst: Mittwoch 6. April 2022, 15:48
von DeaD_EyE
Für Fragen mit mehreren vorgegebenen Antworten:

Code: Alles auswählen

def ask(question: str, answers: list[str], strip_answer: bool = False):
    answers = [answer.lower() for answer in answers]

    while True:
        answer = input(f"{question}: ").lower()
        if strip_answer:
            answer = answer.strip()

        if answer in answers:
            return answer
        else:
            print("Wrong answer")
Bei Ja/Nein Fragen kann man True/False zurückliefern.

Code: Alles auswählen

def frage(question: str):
    deutsche_antwort = ("nein", "ja")

    while True:
        answer = input(f"{question}: ").lower()
        if answer in deutsche_antwort:
            return bool(deutsche_antwort.index(answer))
        else:
            print("Nur Ja oer Nein sind als Antworten zulässig")

Re: Probleme mit casefold Funktion

Verfasst: Mittwoch 6. April 2022, 16:09
von JohnnyDer9te
Super, vielen Dank, ihr habt mir alle sehr geholfen. Ich muss echt noch eine Menge lernen.
Den Rest müsste ich jetzt auch alleine hinbekommen.