上一篇我们写了一个简单的翻译程序,但是大家有没有发现一个bug?
如果一不小心按了回车键会发生什么情况?
如果输入的字符为空的话,下面的if判断程序当然无法执行咯!
解决方法:
while len(query)==0:
query=input("请输入想要翻译的句子或单词:")
运行效果:
然后问题又来了,每次翻译过后程序就会自动退出,那么我们该怎么做到我想一直使用就使用,我不想使用就退出了。
这里我们可以在程序结尾提示用户输入,如果输入指定的字符就退出,否则的话就让程序一直进行下去。
这里我们将原来的程序封装成了一个函数,如果想要一直执行就是用递归!
完整代码:
# -*- coding:utf-8 -*-
from urllib import request,parse
import json
import jsonpath
import sys
import time
def main():
#提交表单需要的三个数据
from1=""
to=""
query=""
'''
query:准备查询的句子
from1:句子是中文还是英文
to:准备翻译成中文还是英文
'''
query=input("请输入想要翻译的句子或单词:")
while len(query)==0:
query=input("请输入想要翻译的句子或单词:")
'''
通过ord判断输入的句子的第一个字符是否是英文
如果输入的是中文,那么则是中文转英文
如果输入的是英文,那么则是英文转中文
'''
if ord(query[0]) not in range(97,123) and ord(query[0]) not in range(65,91):
from1="zh"
to="en"
else:
from1="en"
to="zh"
#提交post表单的地址,从fiddler中得到的
url="http://fanyi.baidu.com/v2transapi"
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
#表单数据
data={
"from":from1,
"to":to,
"query":query,
"transtype":"realtime",
"simple_means_flag":3
}
#处理成url编码
data = parse.urlencode(data).encode('utf-8')
req = request.Request(url, headers=headers, data=data)
html = request.urlopen(req).read().decode("utf-8")
#把json对象转换成python对象
jsonobj=json.loads(html)
#从根节点开始匹配,分别匹配到data和dst节点
data=jsonpath.jsonpath(jsonobj,"$..data..dst")
print("翻译结果:%s"%data[0])
time.sleep(1)
#判断程序是否结束
command=input("\n想要结束请输入Q/q:\n按回车键继续………………\n")
if command=="Q" or command=="q":
print("谢谢你的使用!")
sys.exit()
#如果没有结束则开始递归
else:
main()
if __name__ == '__main__':
main()
最后在暴力一点,将程序打包成exe可执行文件。
这里需要使用pyinstaller,不会的老铁们,可以参考我的另一篇文章:http://blog.csdn.net/katyusha1/article/details/78373394
pyinstaller的安装与使用
好了直接放大招,cmd进入到py文件所在的位置,执行pyinstaller -F xxx.py
程序运行效果
(ps1:如果生成文件不能执行的话,先使用 pyinstaller -d xxx.py 看一看dist文件夹中的debug情况,然后在生成打包好的可执行程序)
(ps2:数字公司会对我们的这个程序进行不友好的对待,至于为什么我也很想知道……)