Chat bot programmieren?
Hallo, ich programmiere gerade einen Chat Bot mit python, leider gibt es darin ein Fehler, kann aber keinen finden!
Mein Problem: Immer wenn ich etwas eingebe, dann sagt er immer:"Ich bin mir leider nicht sicher, ob ich Sie richtig verstanden haben". Das habe ich als zufallscode eingegeben, wenn der Chat bot darauf keine Antwort hat!
Dies ist mein Code: # -*- coding: utf-8 -*-
import random
zufallsantworten=["Ich bin mir leider nicht sicher, ob ich Sie richtig verstanden haben"]
reaktionsantworten = {"Hallo": "Guten Tag Dorian",
"Wie geht es dir?": "Was möchtest du denn essen?",
"ich bin einsam": "Es tut mir leid das zu hören, ich bin aber für Sie da!",
"Wie geht es dir?": "Ich bin ein Chatbot, ich habe leider keine Gefühle",
"Aufwiedersehen!": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"Aufwiedersehen": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"Bye": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"Tschüss": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"Stell dich bitte vor": "Mein Name ist noch no name, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"Wer bist du?": "Mein Name ist noch no name, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"Wer bist du": "Mein Name ist Noch no name, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"It's been a long day without you, my friend": "And I'll tell you all about it when I see you again",
}
print("Willkommen beim Chatbot")
print("Worüber würden Sie gerne heute sprechen?")
print("Zum beenden einfach 'bye' eintippen")
print("")
nutzereingabe = ""
while nutzereingabe != "bye":
nutzereingabe = ""
while nutzereingabe == "":
nutzereingabe = input("")
nutzereingabe = nutzereingabe.lower()
nutzerwoerter = nutzereingabe.split()
intelligenteAntworten = False
for einzelwoerter in nutzerwoerter:
if einzelwoerter in reaktionsantworten:
print(reaktionsantworten[einzelwoerter])
intelligenteAntworten = True
if intelligenteAntworten == False:
print(random.choice(zufallsantworten))
print("")
print("Einen schönen Tag wünsche ich Dir. Bis zum nächsten Mal")
Das einzige, was funktioniert ist bye..., davor haben nur die kurzen Befehle funktioniert..., kann mir bitte jemand helfen?
Und, könnte man den Chatbot außerdem auch am Handy verwenden und wie?
3 Antworten
Auf der einen Seite wurde schon richtig angemerkt, dass du am Besten alles .lower() setzen solltest.
Das nächste Problem (denke ich), welches ich sehe, ist bei deinem
if einzelwörter in reaktionsantworten
Ich weiß jetzt gerade nicht wie Python das mit einem Array regelt. Du versuchst hier ein Array an Strings in einem Dict-Key zu finden. Wie ich es verstehen würde ist, dass du gerade das hier versuchst:
nutzereingabe = „hello world“
nutzereingabe.split()
# nutzereingabe == [„hello“, „world“]
for einzelwörter in nutzereingabe:
if einzelwörter in reaktionsantworten:
# if „hello“ in „wie geht es dir“:
#[...]
Deine Einzelwörter werden, bis auf ein „Hallo“ nicht richtig ausgegeben, da der Vergleich immer „false“ zurückgibt.
Ja, das ist richtig.
Er würde natürlich dann nur die Einzelnen Wörter in der Liste suchen. Gibt dann natürlich keine passende Frage dazu.
also, was sollte ich ändern? (tut mir leid, ich stehe gerade auf der leitung)
Moin,
nutzereingabe = nutzereingabe.lower()
Das ist dein Fehler - wenn du nämlich "Bye" eingibst, wird es zu "bye" geändert - das Bye aus deiner reaktionsantworten wird aber mit einem großen B geschrieben.
Und so verhält es sich auch bei anderen Eingaben. Dein Input wird immer verkleinert und du suchst in einer Liste mit großen Buchstaben.
Also nimmst du am besten alle Themenmöglichkeiten in Lower Case.
LG
# -*- coding: utf-8 -*-
import random
zufallsantworten=["Ich bin mir leider nicht sicher, ob ich Sie richtig verstanden haben"]
reaktionsantworten = {"hallo": "Guten Tag Dorian",
"wie geht es dir?": "Was möchtest du denn essen?",
"ich bin einsam": "Es tut mir leid das zu hören, ich bin aber für Sie da!",
"wie geht es dir?": "Ich bin ein Chatbot, ich habe leider keine Gefühle",
"aufwiedersehen!": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"aufwiedersehen": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"bye": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"tschüss": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"stell dich bitte vor": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"wer bist du?": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"wer bist du": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"darf ich dich JARVIS nennen?": "Mr. Stark, sind Sie es?",
"darf ich dich J.A.R.V.I.S nennen?": "Mr. Stark, sind Sie es?",
"darf ich dich J.A.R.V.I.S nennen": "Mr. Stark, sind Sie es?",
"darf ich dich JARVIS nennen": "Mr. Stark, sind Sie es?",
"it's been a long day without you, my friend": "And I'll tell you all about it when I see you again",
}
print("Willkommen beim Chatbot")
print("Worüber würden Sie gerne heute sprechen?")
print("Zum beenden einfach 'bye' eintippen")
print("")
nutzereingabe = ""
while nutzereingabe != "bye":
nutzereingabe = ""
while nutzereingabe == "":
nutzereingabe = input("")
nutzereingabe = nutzereingabe.lower()
nutzerwoerter = nutzereingabe.split()
intelligenteAntworten = False
for einzelwoerter in nutzerwoerter:
if einzelwoerter in reaktionsantworten:
print(reaktionsantworten[einzelwoerter])
intelligenteAntworten = True
if intelligenteAntworten == False:
print(random.choice(zufallsantworten))
print("")
print("Einen schönen Tag wünsche ich Dir. Bis zum nächsten Mal")
Das ist bis jetzt mein Code... (durch das einfügen sieht er leider etwas anders aus)
Ja - weil du über
for einzelwoerter in nutzerwoerter:
Durch jedes Wort iterierst.
Also z.B.
Stell dich vor
Stell
dich
vor
Abfragen musst du aber
if nutzereingabe in reaktionsantworten:
Sonst fragst du nur einzelne Wörter ab - die for-Schleife ist dort also völlig fehl am Platz.
for einzelwoerter in nutzerwoerter:
if einzelwoerter in reaktionsantworten:
print(reaktionsantworten[einzelwoerter])
intelligenteAntworten = True
Ändern zu
if nutzereingabe in reaktionsantworten:
print(reaktionsantworten[einzelwoerter])
intelligenteAntworten = True
# -*- coding: utf-8 -*-
import random
zufallsantworten=["Ich bin mir leider nicht sicher, ob ich Sie richtig verstanden haben"]
reaktionsantworten = {"hallo": "Guten Tag Dorian",
"wie geht es dir?": "Was möchtest du denn essen?",
"ich bin einsam": "Es tut mir leid das zu hören, ich bin aber für Sie da!",
"wie geht es dir?": "Ich bin ein Chatbot, ich habe leider keine Gefühle",
"aufwiedersehen!": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"aufwiedersehen": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"bye": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"tschüss": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"stell dich bitte vor": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"wer bist du?": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"wer bist du": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"darf ich dich JARVIS nennen?": "Mr. Stark, sind Sie es?",
"darf ich dich J.A.R.V.I.S nennen?": "Mr. Stark, sind Sie es?",
"darf ich dich J.A.R.V.I.S nennen": "Mr. Stark, sind Sie es?",
"darf ich dich JARVIS nennen": "Mr. Stark, sind Sie es?",
"it's been a long day without you, my friend": "And I'll tell you all about it when I see you again",
}
print("Willkommen beim Chatbot")
print("Worüber würden Sie gerne heute sprechen?")
print("Zum beenden einfach 'bye' eintippen")
print("")
nutzereingabe = ""
while nutzereingabe != "bye":
nutzereingabe = ""
while nutzereingabe == "":
nutzereingabe = input("")
nutzereingabe = nutzereingabe.lower()
nutzerwoerter = nutzereingabe.split()
intelligenteAntworten = False
if nutzereingabe in reaktionsantworten:
print(reaktionsantworten[einzelwoerter])
intelligenteAntworten = True
if intelligenteAntworten == False:
print(random.choice(zufallsantworten))
print("")
print("Einen schönen Tag wünsche ich Dir. Bis zum nächsten Mal")
Das liegt an deiner Tollen Formatierung hier auf GF;
Nächstes Mal beim Verfassen rechts oben auf das T drücken und auf die drei Punkte. Dann hast du da das Symbol </>. Damit kannst du Code markieren.
unindent does not match any outer indentation level - ist der Fehler.
Das liegt daran, dass durch die Formatierung von GF der Compiler durcheinandergekommen ist.
if nutzereingabe in reaktionsantworten:
print(reaktionsantworten[einzelwoerter])
intelligenteAntworten = True
if intelligenteAntworten == False:
print(random.choice(zufallsantworten))
print("")
So muss das dort rein - durch das Kopieren werden Leerzeichen gesetzt, wenn du es nicht über diese Codeformatierung hier machst. Das führt zu dem Fehler. Denn er setzt dann Leerzeichen und Tabs.
import random
zufallsantworten=["Ich bin mir leider nicht sicher, ob ich Sie richtig verstanden haben"]
reaktionsantworten = {"hallo": "Guten Tag Dorian",
"wie geht es dir?": "Was möchtest du denn essen?",
"ich bin einsam": "Es tut mir leid das zu hören, ich bin aber für Sie da!",
"wie geht es dir?": "Ich bin ein Chatbot, ich habe leider keine Gefühle",
"aufwiedersehen!": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"aufwiedersehen": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"bye": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"tschüss": "Aufwiedersehen, ich hoffe, dass ich helfen konnte!",
"stell dich bitte vor": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"wer bist du?": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"wer bist du": "Mein Name ist Hope, ich bin ein virtueller Chat Assistent und darauf ausgelegt Sie zu unterhalten",
"darf ich dich JARVIS nennen?": "Mr. Stark, sind Sie es?",
"darf ich dich J.A.R.V.I.S nennen?": "Mr. Stark, sind Sie es?",
"darf ich dich J.A.R.V.I.S nennen": "Mr. Stark, sind Sie es?",
"darf ich dich JARVIS nennen": "Mr. Stark, sind Sie es?",
"it's been a long day without you, my friend": "And I'll tell you all about it when I see you again",
}
print("Willkommen beim Chatbot")
print("Worüber würden Sie gerne heute sprechen?")
print("Zum beenden einfach 'bye' eintippen")
print("")
nutzereingabe = ""
while nutzereingabe != "bye":
nutzereingabe = ""
while nutzereingabe == "":
nutzereingabe = input("")
nutzereingabe = nutzereingabe.lower()
nutzerwoerter = nutzereingabe.split()
intelligenteAntworten = False
if nutzereingabe in reaktionsantworten:
print(reaktionsantworten[nutzereingabe])
intelligenteAntworten = True
if intelligenteAntworten == False:
print(random.choice(zufallsantworten))
print("")
print("Einen schönen Tag wünsche ich Dir. Bis zum nächsten Mal")
So muss das Programm aussehen - mit einigen Ausnahmen:
Die Fragen mit JARVIS müssen klein geschrieben werden - nicht vergessen, dass du deinen Text automatisch klein machen lässt. Also fragt er nach jarvis, nicht JARVIS.
Btw -
if nutzereingabe in reaktionsantworten:
print(reaktionsantworten[einzelwoerter])
intelligenteAntworten = True
if intelligenteAntworten == False:
print(random.choice(zufallsantworten))
print("")
Musste zu
if nutzereingabe in reaktionsantworten:
print(reaktionsantworten[nutzereingabe])
intelligenteAntworten = True
if intelligenteAntworten == False:
print(random.choice(zufallsantworten))
print("")
geändert werden. (print(reaktionsantworten[einzelwoerter]) zu print(reaktionsantworten[nutzereingabe]))
Du kannst nicht einfach so nach einem einzelwort in einem haufen von Strings in listen suchen. Du müsstest jede einzelne mögliche Antwort durchgehen und dort nach dem schlüssel des dictionarys suchen. So findet der nichts.
So funktioniert es schon - aber das .lower(), bzw. seine Liste bricht ihm das Genick.
okay, DANKE!