Pythonは電子辞書を実装しています

この記事の例では、参考のためにpythonで電子辞書を実装するための特定のコードを共有しています。具体的な内容は次のとおりです。

サーバ

#! /usr/bin/env python3
from __future__ import unicode_literals
# coding=utf-8from 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():
# データベースに接続する
db = pymysql.connect\
(' localhost','root','123456','dict')
# ストリーミングソケットを作成する
s =socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR,1)
s.bind(ADDR)
s.listen(5)
# または、子プロセス出口を省略します
signal.signal(signal.SIGCHLD, signal.SIG_IGN)while True:try:
c, addr = s.accept()print("Connect from", addr)
except KeyboardInterrupt:
s.close()
sys.exit("サーバー出口")
except Exception as e:print(e)continue
# クライアント要求を処理するための子プロセスを作成します
pid = os.fork()if pid ==0:
s.close()do_child(c, db)else:
c.close()
def do_child(c, db):
# ループでリクエストを受信する
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')returnelse:print("%sは正常に登録されました"% 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('ユーザーネームまたはパスワードが違います'.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()returntry:
f =open(DICT_TEXT,'rb')
except:
c.send("500サーバー例外".encode())returnwhile True:
line = f.readline().decode()
w = line.split(' ')[0]if(not line) or w   word:
c.send("単語が見つかりませんでした".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('履歴はありません'.encode())returnelse:
c.send(b'OK')
except:
c.send("データベースクエリエラー".encode())return
n =0for 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()

クライアント

#! /usr/bin/env python3
# coding=utf-8from socket import*import sys 
import getpass
def main():iflen(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.登録2.ログイン3.脱落--===========================''')try:
cmd =int(input("入力オプション"))
except Exception:print("入力コマンドエラー")continueif cmd not in[1,2,3]:print("申し訳ありませんが、そのような注文はありません")
sys.stdin.flush() #入力をクリア
continue 
elif cmd ==1:
name =do_register(s)if name !=1:print("登録完了,直接ログイン!")login(s,name)else:print("登録に失敗しました!")
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("ユーザー名:")
passwd = getpass.getpass("パスワード:")
passwd1 = getpass.getpass("パスワードを認証する:")if(' 'in name)or(' 'in passwd):print("ユーザー名とパスワードにスペースを入れない")continueif passwd != passwd1:print("2つのパスワードに一貫性がありません")continue
msg ="R {} {}".format(name,passwd)
# リクエストを送信
s.send(msg.encode())
# 返信を受け取る
data = s.recv(128).decode()if data =="OK":return name
elif data =='EXISTS':print("ユーザーはすでに存在します")return1else:return1
def do_login(s):
name =input("ユーザー名:")
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)return1
def login(s,name):while True:print('''\n
=========== クエリインターフェイス============1.ワードルックアップ2.歴史3.ログアウト
=============================''') try:
cmd =int(input("入力オプション"))
except Exception:print("コマンドエラー")continueif cmd not in[1,2,3]:print("申し訳ありませんが、そのような注文はありません")
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 =="##":breakprint(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()

以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。

Recommended Posts

Pythonは電子辞書を実装しています
Pythonはスーパーマリオを実装しています
Pythonはtic-tac-toeゲームを実装しています
Pythonはマンマシンゴバンを実装します
PythonはTetrisゲームを実装しています
Pythonは画像スティッチングを実装しています
Pythonはminesweeperゲームを実装しています
Pythonはスキャンツールを実装しています
Pythonはしきい値回帰を実装します
Pythonは地雷除去ゲームを実装しています
Pythonは推測ゲームを実装しています
Pythonは単純なタンクバトルを実装します
Pythonはudpチャットウィンドウを実装します
PythonはWeChat飛行機ゲームを実装しています
Pythonは単語推測ゲームを実装しています
Pythonは推測ゲームを実装しています
Pythonは駐車場管理システムを実現
Pythonnumpyはローリングケースを実装します
OpenCVPythonはパズルゲームを実装しています
Pythonは単純なtic-tac-toeゲームを実装しています
Pythonはパスワード強度検証を実装します
Pythonは車の管理システムを実装しています
Pythonはコードブロックフォールディングを実装します
PythonはSMTPメール送信を実装します
Pythonは多次元配列ソートを実装しています
PythonがFTP機能を実装する方法
Pythonは平均シフトクラスタリングアルゴリズムを実装しています
Pythonは検証コード認識を実装します
Pythonは勾配降下法を実装しています
Pythonはテキストバージョンのminesweeperを実装しています
Pythonは画像スティッチング機能を実装しています
Pythonは実店舗のゲームを実装しています
Pythonがメール機能を実装する方法
Python3はシングルトンデザインパターンを実装しています
Pythonは文字列と数値のスプライシングを実装します
Pythonは10の古典的なソートアルゴリズムを実装しています
PythonはユニバーサルWebフレームワークを実装しています
Pythonは、メールを送信するために126のメールボックスを実装しています
Pythonでの辞書の詳細な使用法
PythonはAIフェイスチェンジ機能を実装しています
Pythonは最も急な降下方法を実装します
Pythonは実際の銀行システムを実装しています
Pythonはデジタル爆弾ゲームプログラムを実装しています
Pythonはftpファイル転送機能を実装しています
Pythonはユーザー名とパスワードの検証を実装しています
Pythonがタイマー機能を実装する方法
Pythonは航空機戦争プロジェクトを実装します
Pythonは写真の水平ステッチを実装しています
PythonはGIFグラフを逆さまに実装します
Pythonはメールを送信するためのQQメールボックスを実装しています
Pythonは2つのスレッドの代替実行を実装します
Pythonは分数シーケンスの合計を実装します
pythonは勾配メソッドを実装しますpython最速の降下メソッド
Pythonは、単一にリンクされたリストと辞書を実装します
pythonで辞書を並べ替える方法
python3は単に結合された設計パターンを実装します
PythonはAI自動バージョンの貪欲なヘビを実装しています
Pythonは画像の外側の境界追跡操作を実装します