A Slightly More Advanced ChatBot [Intermediate, Python]
Welcome to my next tutorial with a ChatBot, if you haven't seen my last tutorial, then you should click here.
That is easy to answer first we need to think, how would this be possible? With connecting our ChatBot to google and find the most relevant answer to the User Input? Good idea, but no. In fact we can make even simpler, and I'm going to explain. We can use two lists! Now this is really cool, and simple. A lot of people don't know how to do this. You will after reading the rest of this tutorial.
Well, we can't do that, but we can use it so the ChatBot can figure out how to respond to the User. Let me give you a small explanation about how this is possible.
First, we have two lists:
If we assign values then they will look like this:
Check = ["hello", "how are you?"] Respond = ["Hi.", "I'm good.']
Do you notice anything?
The User Inputs and the Responses have the same List Index Value(LIV). Let me show you.
If you look at list
Check you will see the first item:
hello this has a LIV of
And if you look at list
Respond you will see the first item:
Hi this also has a LIV of
Do you see a correlation between the two? Maybe you do, maybe you don't you will understand later in the next section.
Alright so we have the basic code we wrote in the last tutorial. That code was simple, and impractical. Let's simplify it.
Here is the code:
UserInput = "" ChatBot_Name = "Ozzy" UserInput = str.lower(input(": ")) if UserInput == "hi": print(ChatBot_Name + ": Hello!") elif UserInput == "who made you?": print(ChatBot_Name + ": I was made by Christian Thone")
Lets first create a new file, you can do that by clicking the little paper icon on the side of you project:
Now go to the smaller paper Icon with the plus sign and click that. Now you have created a file, for the name of your file name it
client.py. There is no specific reason for the name it just looks cool. Ok, back to the tutorial.
client.py create the following lists:
User_Inputs =  __Responses = 
Now obviously we have nothing in the lists, but that is what we want right now.
Hmmm? So how do we use these lists? Easy! We use what Repl.it has called
import. Type the following into
main.py at the top of the script:
from client import User_Inputs, __Responses
Now we can use these lists.
We need some values in these lists for anything to happen, so write the following into your lists in
# REMEMBER TO HAVE YOUR USER_INPUTS IN LOWERCASE! User_Inputs = ["hi"] __Responses = ["Hello."]
Okay cool, now we have some simple code for our lists, but we still cant do anything with our ChatBot yet. First, we need to tell it what to do. Go into
main.py and type the following:
if UserInput in User_Inputs: index = User_Inputs.index(UserInput) print(ChatBot_Name + __Responses[index])
Is the LIV thing making sense to you? If not I will explain it now, skip this if you understand it
So basically I am using the LIV, to tell the ChatBot how to respond to user input.
Look at this and you might understand. In the lists we have two different, items.
The easiest way to look at this is by understanding that they are in the same position just a different list.
Here is a visual
They match up with the same index that is why I can print the index of
Now here is the finished output:
If you have any questions then post them in the comments.
Stay tuned for
"An Advanced ChatBot [Advanced, Python]", I will show you how to have your bot scan User Input for Keywords!.
Suggestion: use a dictionary instead of 2 lists. It's really easy to mess up and get your bot to output the wrong thing.
def keyCheck(keyword, userInput, answer): iList = userInput.split(" ") # input split if keyword in iList: print(answer) else: print("Sorry, I don't understand.") return; userInput = input("Say something. ") userInput = userInput.lower keyCheck("hello", userInput, "hi")
this would return hi if the word hello was in the input. Also, this may not be 100% correct, so double check before using.
a better example, where you check for everything:
def keyCheck(keyword, userInput, answer): iList = userInput.split(" ") # input split if keyword in iList: print(answer) else: print("Sorry, I don't understand.") return; while True: userInput = input("Say something. ") userInput = userInput.lower() for i in inputs: # inputs is the list of inputs you imported earlier keyword = inputs[i] answer = responses[i] keyCheck(keyword, userInput, answer)
this is my attempt, and maybe you could replicate this, but with dictionaries as well, to make the code better ;)
thanks dude I had a lot of trouble trying to figure out how to get the file to work and some other things from this I was able to use and I have checked out a LOT!! of your other things and they have helped me figure out how to do things before I have even gotten to that stage! Your stuff is AMAZING!