import urllib.request
import hashlib
import json
import random
import os
class Word:
def __init__(self,word,note=""):
self.word=word
self.note=note
class MyWords:
def insert_update(self,word,note):
i=0
j=len(self.words)-1
while i<=j:
m=(i+j)//2
if self.words[m].word>word:
j=m-1
elif self.words[m].word<word:
i=m+1
else:
if note!="":
self.words[m].note=note
print("更新单词",word,"成功")
return
self.words.insert(i,word(word,note))
print("插入单词",word,"成功")
def delete(self,word):
i=0
j=len(self.words)-1
while i<=j:
m=(i+j)//2
if self.words[m].word>word:
j=m-1
elif self.words[m].word<word:
i=m+1
else:
del self.words[m]
print("删除单词",word,"成功")
return
print("没有找到单词",word)
def seek(self,word):
i=0
j=len(self.words)-1
while i<=j:
m=(i+j)//2
if self.words[m].word>word:
j=m-1
elif self.words[m].word<word:
i=m+1
else:
print(word,"--->",self.words[m].note)
return
print("没有找到单词",word)
def show(self,w):
for i in range(len(self.words)):
if self.words[i].word.find>=0:
print("%-32s%s" % (self.words[i].word,self.words[i].note))
if(i+1)%20==0:
input("Press any key to continue")
print()
def scanWord(self,s):
s=s.lower()
i=0
w=""
while i<len(s):
c=s[i]
if c>='a'and c<='z':
w=w+c
else:
if w!="":
self.insert_update(w,"")
w=""
i=i+1
def scanFile(self,fileName):
try:
f=open(fileName,"rt")
s=f.read()
f.close()
self.scanWord(s)
except Exception as e:
print(e)
def scanWeb(self,url):
try:
resp=urllib.request.urlopen(url)
data=resp.read()
data=data.decode()
self.scanWord(data)
except Exception as e:
print(e)
def save(self):
try:
f=open("words.txt","wt")
for w in self.words:
f.write(w.word+","+w.note+"\n")
f.close()
except Exception as e:
print(e)
def read(self):
self.words=[]
if os.path.exists("words.txt"):
try:
f=open("words.txt","rt")
while True:
s=f.readline().strip("\n")
if s=="":
break
s=s.split(",")
if len(s)==2:
self.words.append(Word(s[0],s[1]))
f.close()
except Exception as e:
print(e)
def translate(self,word):
try:
url="http://api.fanyi.baidu.com/api/trans/vip/translate?from=en&to=zh"
appid=2015063000000001
key=12345678
salt=str(random.randint(100000,999999))
#appid+q+salt+秘钥
sign=appid+word+salt+key
sign=hashlib.md5(sign.encode("utf-8")).hexdigest()
url=url+"&q="+word+"&appid="+appid+"&salt="+salt+"&sign="+sign
resp=urllib.request.urlopen(url)
data=resp.read()
data=data.decode()
data=json.loads(data)
if"error_code"in data.keys():
print("translate failed")
else:
dst=data["trans_result"][0]["dst"]
dst=dst.replace(",","")
print(word,"--->",dst)
self.insert_update(word,dst)
except Exception as e:
print(e)
def process(self):
self.read()
while True:
st=input(">").strip().lower()
st=st.split(" ")
s=st[0]
t=""
if len(st)==2:
t=st[1]
if s=="show":
self.show(t)
elif s=="seek":
if t!="":
self.seek(t)
elif s=="translate":
if t!="":
self.translate(t)
elif s=="insert":
if t!="":
self.insert_update(t,"")
elif s=="delete":
if t!="":
self.delete(t)
elif s=="file":
fileName=t
if fileName!=""and os.path.exists(fileName):
self.scanFile(fileName)
elif s=="web":
url=t
if url!=""and url.startswith("http://"):
self.scanWeb(url)
elif s=="exit":
break
else:
print("显示单词 show words")
print("查找单词 seek word")
print("翻译单词 translate word")
print("增加单词 insert word")
print("删除单词 delete word")
print("文件获取 file fileName")
print("网络获取 web url")
print("退出程序 exit")
self.save()
mw=MyWords()
mw.process()
执行show和translate功能是出现以下问题:
不知道你这个问题是否已经解决, 如果还没有解决的话: