1. 程式人生 > >利用python製作一個聊天機器人

利用python製作一個聊天機器人

該程式基於TCP服務,首先上一下成果圖

先是利用手機和服務端聊天(手機端用的是QPython3執行的python程式碼):

         

 

當然也可以在電腦上執行:

程式碼如下:

首先是服務端的程式碼:

import socket
import time
#socket.AF_INET:網路通訊 ,SOCK_STREAM:基於TCP協議
connect = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect.bind(('127.0.0.1',8000))
connect.listen(5)
while True:
    conn,addr = connect.accept()
    while True:
        try:
            #1024是對方發來訊息的位元組數的限制
            msg = conn.recv(1024)
            a = msg.decode('utf-8')
            print('對方發來的訊息是:',msg.decode('utf-8'))
            for i in range(0, len(list(a))):
                if a[i] == '你' and a[i + 1] == '好':
                    send = '你好,我是智慧機器人,請問有什麼可以幫您的?'
                    break
                elif a[i] == '幫' and a[i + 1] == '我':
                    send = '滾你丫的,自己去!'
                    break
                elif a[i] == '帥':
                    send = '我覺得我的主人是世界上最帥的人'
                    break
                elif a[i] == '主' and a[i+1] == '人':
                    send = '您是我的主人'
                    break
                elif a[i] == '哈':
                    send = '你有啥開心的事情?說出來聽聽'
                    break
                elif a[i] == '你' and a[i + 1] == '是' and a[-1] == '誰':
                    send = '我是智慧機器人'
                    break
                elif a[i] == '哭' :
                    send = '別哭'
                    break
                elif a[i] == '幫' and a[i + 1] == '我':
                    send = '我才不幫你呢,除非給我錢'
                    break
                elif a[i] == '錢':
                    send = '錢是萬惡之源,要遠離'
                    break
                elif a[i] == '笑' and a[i + 1] == '話':
                    send = '從前有棵樹,一直老母豬撞死在樹上了.....哈哈哈'
                    break
            else:
                send ='對不起,沒理解您的意思,我還需要學習'
            time.sleep(1)
            conn.send(send.encode('utf-8'))

        except Exception:
            break
    conn.close()
connect.close()

其次是客戶端的程式碼:

import socket
connect = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect.connect(('127.0.0.1',8000))
while True:
    msg = input('\033[0;32m' + '請輸入要傳送給服務端的話:' + '\033[0m')
    #防止輸入為空
    if not msg :continue
    #.encode('utf-8')是將str型別的資料轉換成二進位制
    connect.send(msg.encode('utf-8'))
    data = connect.recv(1024)
    print(' \033[1;34m' + '收到服務端訊息: ' + '\033[0m',data.decode('utf-8'))

  可以看到,這就是最簡單的基於TCP通訊的程式碼,只是在服務端中加了一個判斷功能,然後回覆相應的內容。

  如果想利用手機和電腦端進行通訊,需要在同一個WIFI熱點下,同時注意要將IP改為電腦和手機當前同時連線熱點的IP,同時還要注意在同時連線校園網的情況下不可以。