最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)電子詞典

 更新時(shí)間:2020年03月03日 08:32:22   作者:RareJie  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)電子詞典的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python實(shí)現(xiàn)電子詞典的具體代碼,供大家參考,具體內(nèi)容如下

服務(wù)端

#!/usr/bin/env python3
from __future__ import unicode_literals
# coding=utf-8


from socket import *
import os
import pymysql
import time
import sys
import signal

DICT_TEXT = "./dict.txt"
HOST = '0.0.0.0'
PORT = 8000
ADDR = (HOST, PORT)

# 主控制流程


def main():
 # 連接數(shù)據(jù)庫(kù)
 db = pymysql.connect\
 ('localhost', 'root', '123456', 'dict')

 # 創(chuàng)建流式套接字
 s = socket()
 s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
 s.bind(ADDR)
 s.listen(5)
 # 或略子進(jìn)程退出
 signal.signal(signal.SIGCHLD, signal.SIG_IGN)

 while True:
 try:
  c, addr = s.accept()
  print("Connect from", addr)
 except KeyboardInterrupt:
  s.close()
  sys.exit("服務(wù)器退出")
 except Exception as e:
  print(e)
  continue
 # 創(chuàng)建子進(jìn)程處理客戶(hù)端請(qǐng)求
 pid = os.fork()
 if pid == 0:
  s.close()
  do_child(c, db)
 else:
  c.close()


def do_child(c, db):
 # 循環(huán)接收請(qǐng)求
 while True:
 data = c.recv(128).decode()
 print("Request:", data)
 if (not data) or data[0] == 'E':
  c.close()
  sys.exit(0)
 elif data[0] == 'R':
  do_register(c, db, data)
 elif data[0] == "L":
  do_login(c, db, data)
 elif data[0] == 'Q':
  do_query(c, db, data)
 elif data[0] == 'H':
  do_history(c, db, data)


def do_register(c, db, data):
 l = data.split(' ')
 name = l[1]
 passwd = l[2]

 cursor = db.cursor()
 sql = \
 "select * from user where name='%s'" % name
 cursor.execute(sql)
 r = cursor.fetchone()
 if r != None:
 c.send(b'EXISTS')
 return

 sql = "insert into user (name,passwd)\
 values ('%s','%s')" % (name, passwd)
 try:
 cursor.execute(sql)
 db.commit()
 c.send(b'OK')
 except:
 db.rollback()
 c.send(b'FALL')
 return
 else:
 print("%s注冊(cè)成功" % name)


def do_login(c, db, data):
 l = data.split(' ')
 name = l[1]
 passwd = l[2]
 cursor = db.cursor()

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

 cursor.execute(sql)
 r = cursor.fetchone()
 if r == None:
 c.send('用戶(hù)名或密碼不正確'.encode())
 else:
 c.send(b'OK')


def do_query(c, db, data):
 l = data.split(' ')
 name = l[1]
 word = l[2]
 cursor = db.cursor()

 def insert_history():
 tm = time.ctime()
 sql = "insert into hist (name,word,time)\
  values ('%s','%s','%s')" % (name, word, tm)
 try:
  cursor.execute(sql)
  db.commit()
 except:
  db.rollback()
  return

 try:
 f = open(DICT_TEXT, 'rb')
 except:
 c.send("500 服務(wù)端異常".encode())
 return
 while True:
 line = f.readline().decode()
 w = line.split(' ')[0]
 if (not line) or w > word:
  c.send("沒(méi)找到該單詞".encode())
  break
 elif w == word:
  c.send(b'OK')
  time.sleep(0.1)
  c.send(line.encode())
  insert_history()
  break
 f.close()


def do_history(c, db, data):
 name = data.split(' ')[1]
 cursor = db.cursor()

 try:
 sql = "select * from hist \
 where name='%s'" % name
 cursor.execute(sql)
 r = cursor.fetchall()
 if not r:
  c.send('沒(méi)有歷史記錄'.encode())
  return
 else:
  c.send(b'OK')
 except:
 c.send("數(shù)據(jù)庫(kù)查詢(xún)錯(cuò)誤".encode())
 return
 n = 0
 for i in r:
 n += 1
 # 最多顯示10條
 if n > 10:
  break
 time.sleep(0.1)
 msg = "%s %s %s" % (i[1], i[2], i[3])
 c.send(msg.encode())
 time.sleep(0.1)
 c.send(b'##')


if __name__ == "__main__":
 main()

客戶(hù)端

#!/usr/bin/env python3
#coding=utf-8

from socket import *
import sys 
import getpass

def main():
 if len(sys.argv) < 3:
 print("argv is error")
 return
 HOST = sys.argv[1]
 PORT = int(sys.argv[2])
 ADDR = (HOST,PORT)

 s = socket()
 s.connect(ADDR)

 while True:
 print('''\n
  ===========Welcome=========
  --1.注冊(cè) 2.登錄 3.退出--
  ===========================
  ''')
 try:
  cmd = int(input("輸入選項(xiàng)>>"))
 except Exception:
  print("輸入命令錯(cuò)誤")
  continue 

 if cmd not in [1,2,3]:
  print("對(duì)不起,沒(méi)有該命令")
  sys.stdin.flush() #清除輸入
  continue 
 elif cmd == 1:
  name = do_register(s)
  if name != 1:
  print("注冊(cè)成功,直接登錄!")
  login(s,name)
  else:
  print("注冊(cè)失??!")
 elif cmd == 2:
  name = do_login(s)
  if name != 1:
  print("登錄成功!")
  login(s,name)
  else:
  print("登錄失?。?)
 elif cmd == 3:
  s.send(b"E")
  sys.exit("謝謝使用")

def do_register(s):
 while True:
 name = input("用戶(hù)名:")
 passwd = getpass.getpass("密 碼:")
 passwd1 = getpass.getpass("確認(rèn)密碼:")

 if (' ' in name) or (' ' in passwd):
  print("用戶(hù)名密碼不允許空格")
  continue
 if passwd != passwd1:
  print("兩次密碼不一致")
  continue

 msg = "R {} {}".format(name,passwd)
 #發(fā)送請(qǐng)求
 s.send(msg.encode())
 #接收回復(fù)
 data = s.recv(128).decode()

 if data == "OK":
  return name
 elif data == 'EXISTS':
  print("該用戶(hù)已存在")
  return 1
 else:
  return 1
def do_login(s):
 name = input("用戶(hù)名:")
 passwd = getpass.getpass("密 碼:")
 msg = "L {} {}".format(name,passwd)
 s.send(msg.encode())
 data = s.recv(128).decode()

 if data == 'OK':
 return name
 else:
 print(data)
 return 1

def login(s,name):
 while True:
 print('''\n
  ===========查詢(xún)界面============
  1.查詞 2.歷史記錄 3.注銷(xiāo)
  =============================
  ''')
 try:
  cmd = int(input("輸入選項(xiàng)>>"))
 except Exception:
  print("命令錯(cuò)誤")
  continue
 if cmd not in [1,2,3]:
  print("對(duì)不起,沒(méi)有該命令")
  sys.stdin.flush() #清除輸入
  continue 
 elif cmd == 1:
  do_query(s,name)
 elif cmd == 2:
  do_history(s,name)
 elif cmd == 3:
  return

def do_query(s,name):
 while True:
 word = input("單詞:")
 if word == "##":
  break 
 msg = "Q {} {}".format(name,word)
 s.send(msg.encode())
 data = s.recv(128).decode()
 if data == 'OK':
  data = s.recv(2048).decode()
  print(data)
 else:
  print(data)


def do_history(s,name):
 msg = "H {}".format(name)
 s.send(msg.encode())
 data = s.recv(128).decode()
 if data == 'OK':
 while True:
  data = s.recv(1024).decode()
  if data == "##":
  break
  print(data)
 else:
 print(data)


if __name__ == "__main__":
 main()

插入字典

import pymysql 
import re

f = open('dict.txt')
db = pymysql.connect\
('localhost','root','123456','dict')

cursor = db.cursor()

for line in f:
 try:
 l = re.split("[ ]+",line)
 except:
 pass 
 sql = "insert into words (word,interpret)\
 values ('%s','%s')"%(l[0],' '.join(l[1:]))

 try:
 cursor.execute(sql)
 db.commit()
 except:
 db.rollback()
 
f.close()

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Django contenttypes 框架詳解(小結(jié))

    Django contenttypes 框架詳解(小結(jié))

    這篇文章主要介紹了Django contenttypes 框架詳解(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • TensorBoard 計(jì)算圖的可視化實(shí)現(xiàn)

    TensorBoard 計(jì)算圖的可視化實(shí)現(xiàn)

    今天小編就為大家分享一篇TensorBoard 計(jì)算圖的可視化實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • 童年回憶錄之python版4399吃豆豆小游戲

    童年回憶錄之python版4399吃豆豆小游戲

    相信80,90后都玩過(guò)4399網(wǎng)站的小游戲,雖然游戲很low但是童年的回憶,今天小編帶你一起用python自己寫(xiě)一個(gè)4399吃豆豆的小游戲,文中給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值
    2021-09-09
  • python安裝sklearn模塊的方法詳解

    python安裝sklearn模塊的方法詳解

    這篇文章主要介紹了python安裝sklearn模塊的方法詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 利用Python對(duì)文件夾下圖片數(shù)據(jù)進(jìn)行批量改名的代碼實(shí)例

    利用Python對(duì)文件夾下圖片數(shù)據(jù)進(jìn)行批量改名的代碼實(shí)例

    今天小編就為大家分享一篇關(guān)于利用Python對(duì)文件夾下圖片數(shù)據(jù)進(jìn)行批量改名的代碼實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • python自動(dòng)化測(cè)試三部曲之request+django實(shí)現(xiàn)接口測(cè)試

    python自動(dòng)化測(cè)試三部曲之request+django實(shí)現(xiàn)接口測(cè)試

    這篇文章主要介紹了python自動(dòng)化測(cè)試三部曲之request+django實(shí)現(xiàn)接口測(cè)試,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 使用豆瓣提供的國(guó)內(nèi)pypi源

    使用豆瓣提供的國(guó)內(nèi)pypi源

    PyPI(Python Package Index)是python官方的第三方庫(kù)的倉(cāng)庫(kù),所有人都可以下載第三方庫(kù)或上傳自己開(kāi)發(fā)的庫(kù)到PyPI。PyPI推薦使用pip包管理器來(lái)下載第三方庫(kù)。
    2017-07-07
  • 樹(shù)莓派極簡(jiǎn)安裝OpenCv的方法步驟

    樹(shù)莓派極簡(jiǎn)安裝OpenCv的方法步驟

    這篇文章主要介紹了樹(shù)莓派極簡(jiǎn)安裝OpenCv的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 使用Python腳本將絕對(duì)url替換為相對(duì)url的教程

    使用Python腳本將絕對(duì)url替換為相對(duì)url的教程

    這篇文章主要介紹了使用Python腳本將絕對(duì)url替換為相對(duì)url的教程,腳本代碼非常簡(jiǎn)單,需要的朋友可以參考下
    2015-04-04
  • Django中反向生成models.py的實(shí)例講解

    Django中反向生成models.py的實(shí)例講解

    今天小編就為大家分享一篇Django中反向生成models.py的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05

最新評(píng)論

隆尧县| 七台河市| 东乡| 石屏县| 密山市| 西华县| 灌南县| 滦南县| 云霄县| 武功县| 元氏县| 卢龙县| 三河市| 灵寿县| 新闻| 沙河市| 家居| 新丰县| 莱芜市| 青河县| 竹北市| 共和县| 渭南市| 宁波市| 齐齐哈尔市| 福清市| 岳西县| 竹北市| 普宁市| 白山市| 观塘区| 富宁县| 三明市| 江安县| 怀宁县| 盐津县| 湖北省| 东台市| 封开县| 兴化市| 西和县|