11
A Slightly More Advanced ChatBot [Intermediate, Python]
ChristianThone (34)

Hello Fellow Replers!

Welcome to my next tutorial with a ChatBot, if you haven't seen my last tutorial, then you should click here.

How do we make our ChatBot more advanced?

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.

How can we use a list to detect User Input?

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:

Check
Respond

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 0.

And if you look at list Respond you will see the first item: Hi this also has a LIV of 0.
Do you see a correlation between the two? Maybe you do, maybe you don't you will understand later in the next section.

Now to the code!

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.

Inside of 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 client.py:

# 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. hi, hello
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

['hi']
| 0
['Hello.']
They match up with the same index that is why I can print the index of User_Inputs, through __Responses.

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!.

Keep coding,
Christian Thone
@ChristianThone

You are viewing a single comment. View All
1
Murzikal (21)

@ChristianThone you can also split the input using the split method
Example:

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.