python做词典_python实现电子词典

本文实例为大家分享了python实现电子词典的具体代码,供大家参考,具体内容如下

# -*- coding: utf-8 -*-

#youdanTest.py

import urllib

import json

# 设置一个退出程序的出口

isOut = False

# 不断调用爬取翻译页面的功能

# 直到isOut被设置为True,退出程序

def query(keys):

while True:

if isOut == True:

break

# 假定用户输入“CloseMe”,则退出

key = keys

if key == "CloseMe":

isOut = True

continue # 回到循环开始处,然后结果条件满足退出

# 做真正的查询操作

url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"

# 构造headers

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",

"X-Requested-With": "XMLHttpRequest",

"Accept": "application/json, text/javascript, */*; q=0.01",

"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"

}

# 把form数据转规范化,然后post给服务端

formdata = {

"i": key,

"from": "AUTO",

"to": "AUTO",

"smartresult": "dict",

"client": "fanyideskweb",

"salt": "1523933959290",

"sign": "248f5d216c45a64c38a3dccac0f4600d",

"doctype": "json",

"version": "2.1",

"keyfrom": "fanyi.web",

"action": "FY_BY_REALTIME",

"typoResult": "false"

}

data = bytes(urllib.parse.urlencode(

formdata),

encoding="utf-8")

# 给服务器发送post请求

req = urllib.request.Request(url,

data,

headers,

method="POST")

response = urllib.request.urlopen(req)

info = response.read().decode("utf-8")

jsonLoads = json.loads(info)

return jsonLoads['translateResult'][0][0]["tgt"]

服务端

#!/usr/bin/python3

# coding=utf-8

from signal import *

from socket import *

import pymysql

from time import *

import sys

import os

from youdaoTest import query

def do_child(connfd, db):

while True:

msg = connfd.recv(128).decode()

print("msg : ", msg)

if msg[0] == 'R':

do_register(connfd, msg, db)

if msg[0] == 'L':

do_login(connfd, msg, db)

if msg[0] == 'Q':

do_query(connfd, msg, db)

if msg[0] == 'H':

do_history(connfd, msg, db)

if msg[0] == 'E':

connfd.close()

sys.exit(0)

return

def do_register(connfd, msg, db):

print("in register.......")

cursor = db.cursor()

s = msg.split(' ')

name = s[1]

passwd = s[2]

sql = "select * from user where name = '%s'" % name

cursor.execute(sql)

data = cursor.fetchone()

print(data)

if data != None:

connfd.send("FALL".encode())

return

sql = "insert into user values ('%s','%s')" % (name, passwd)

try:

cursor.execute(sql)

db.commit()

connfd.send('OK'.encode())

except:

connfd.send("FALL".encode())

db.rollback()

return

else:

print("register OK !")

def do_login(connfd, msg, db):

print("in login.......")

cursor = db.cursor()

s = msg.split(' ')

name = s[1]

passwd = s[2]

try:

sql = "select * from user where name = '%s' and passwd = '%s'" % (

name, passwd)

cursor.execute(sql)

data = cursor.fetchone()

print(data)

except:

pass

if data == None:

connfd.send("FALL".encode())

else:

connfd.send('OK'.encode())

return

def do_query(connfd, msg, db):

print("in query.......")

start = time()

cursor = db.cursor()

s = msg.split(' ')

words = s[1]

name = s[2]

msg = query(words)

connfd.send(msg.encode())

insert_history(db, words, name)

def do_history(connfd, msg, db):

print('in history...')

s = msg.split(' ')

name = s[1]

cursor = db.cursor()

sql = 'select * from history where name = "%s"' % name

try:

cursor.execute(sql)

data = cursor.fetchall()

connfd.send('OK'.encode())

except:

connfd.send('FALL'.encode())

sleep(0.1)

for msg in data:

name = msg[0]

word = msg[1]

time = msg[2]

sleep(0.01)

connfd.send(('%s %s %s' % (name, word, time)).encode())

sleep(0.1)

connfd.send('over'.encode())

def insert_history(db, words, name):

time = ctime()

cursor = db.cursor()

sql = 'insert into history values ("%s","%s","%s")' % (name, words, time)

try:

cursor.execute(sql)

db.commit()

except:

print('into history failed')

db.rollback()

def main():

signal(SIGCHLD, SIG_IGN)

db = pymysql.connect('localhost', 'root', '123456', 'dict')

HOST = sys.argv[1]

PORT = int(sys.argv[2])

sockfd = socket()

sockfd.bind((HOST, PORT))

sockfd.listen(5)

while True:

try:

connfd, addr = sockfd.accept()

print("connect addr : ", addr)

except KeyboardInterrupt:

raise

except:

continue

pid = os.fork()

if pid < 0:

print("create child process failed")

connfd.close()

continue

elif pid == 0:

sockfd.close()

do_child(connfd, db)

else:

connfd.close()

continue

db.close()

sockfd.close()

sys.exit(0)

if __name__ == "__main__":

main()

电子词典客户端

#!/usr/bin/python

# coding=utf-8

from signal import *

from socket import *

from time import *

import sys

import os

def do_register(sockfd, msg):

name = input("input your user name >>")

passwd = input("input your user passwd >>")

msg = 'R %s %s' % (name, passwd)

sockfd.send(msg.encode())

msg = sockfd.recv(128).decode()

if msg[0:2] == 'OK':

return 0

else:

return -1

def do_login(sockfd, msg):

name = input("input your user name >>")

passwd = input("input your user passwd >>")

msg = 'L %s %s' % (name, passwd)

sockfd.send(msg.encode())

msg = sockfd.recv(128).decode()

if msg[0:2] == 'OK':

return name

else:

return -1

def do_query(sockfd, msg, name):

while True:

word = input("input word >>")

if word == '##':

return

msg = 'Q %s %s' % (word, name)

sockfd.send(msg.encode())

msg = sockfd.recv(128).decode()

if msg[0:2] == 'OK':

msg = sockfd.recv(1024).decode()

if msg == " ":

print("not found this word")

print(msg)

# elif msg[:11] == 'found error':

# print('found error')

# continue

else:

print("fail to query")

continue

def do_history(sockfd, msg, name):

msg = 'H %s' % name

sockfd.send(msg.encode())

msg = sockfd.recv(128).decode()

if msg[0:2] == 'OK':

while True:

data = sockfd.recv(1024).decode()

if data == 'over':

break

print(data)

else:

print("fail to history")

return -1

def main():

HOST = sys.argv[1]

PORT = int(sys.argv[2])

msg = None

sockfd = socket()

sockfd.connect((HOST, PORT))

def login(name):

while True:

print('''

==========query commend=========

---1:查词 2:历史记录 3:退出---

================================

''')

try:

cmd = int(input("Input commend >> "))

except:

print("Input error!")

continue

if cmd not in [1, 2, 3]:

print("input error!")

sys.stdin.flush()

continue

if cmd == 1:

do_query(sockfd, msg, name)

if cmd == 2:

do_history(sockfd, msg, name)

if cmd == 3:

break

return

while True:

print('''

=============Welcome=============

----1: 注册 2: 登陆 3: 退出----

=================================

''')

try:

cmd = int(input("Input command >> "))

except:

print("Input error")

continue

if cmd not in [1, 2, 3]:

print("input error!")

sys.stdin.flush()

continue

if cmd == 1:

if do_register(sockfd, msg) == 0:

print("register OK!")

else:

print("register FALL")

if cmd == 2:

name = do_login(sockfd, msg)

if name != -1:

print("login OK!")

login(name)

else:

print("register FALL")

if cmd == 3:

msg = 'E'

sockfd.send(msg.encode())

sockfd.close()

sys.exit(0)

if __name__ == "__main__":

main()

查词时将单词发送到网络上,从有道中查询出单词翻译再返回给客户端。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值