python实现电子词典


Posted in Python onApril 23, 2020

本文实例为大家分享了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()

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

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

Python 相关文章推荐
Python生成随机数组的方法小结
Apr 15 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
python中不能连接超时的问题及解决方法
Jun 10 Python
详解python中的Turtle函数库
Nov 19 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
pandas按行按列遍历Dataframe的几种方式
Oct 23 Python
python 实现list或string按指定分段
Dec 25 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
django数据模型中null和blank的区别说明
Sep 02 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
Python 中Operator模块的使用
Jan 30 Python
python中cPickle用法例子分享
Jan 03 #Python
使用python获取CPU和内存信息的思路与实现(linux系统)
Jan 03 #Python
Python群发邮件实例代码
Jan 03 #Python
python切换hosts文件代码示例
Dec 31 #Python
使用Python进行稳定可靠的文件操作详解
Dec 31 #Python
python连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 #Python
python连接mysql数据库示例(做增删改操作)
Dec 31 #Python
You might like
php字符串截取问题
2006/11/28 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
php实现微信企业转账功能
2018/10/02 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
js获取 type=radio 值的方法
2014/05/09 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
2015/10/23 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
提高Web性能的前端优化技巧总结
2017/02/27 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
原生js调用json方法总结
2018/02/22 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
在python中利用GDAL对tif文件进行读写的方法
2018/11/29 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
python实现键盘输入的实操方法
2019/07/16 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
医学生个人求职信范文
2013/09/24 职场文书
服装厂厂长岗位职责
2013/12/27 职场文书
中专毕业生自我鉴定
2014/02/02 职场文书
12月红领巾广播稿
2014/02/13 职场文书
教师职位说明书
2014/07/29 职场文书