區(qū)分大小寫的凱撒密碼。
成都創(chuàng)新互聯(lián)是專業(yè)的隴川網(wǎng)站建設(shè)公司,隴川接單;提供成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行隴川網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
在凱撒密碼的基礎(chǔ)上針對大寫與小字字符區(qū)分處理即可:
解密只需要將7換成19(因為26-7=19),或者使用-7也可以:
print(caesarcipher(caesarcipher('Student!', 7),19))
1 import re
2 import urllib.parse, urllib.request
3 import hashlib
4 import urllib
5 import random
6 import json
7 import time
8 from translate import Translator
非python自帶的庫,如python google translator,需要手動安裝,命令pip install module_name。
1. 百度翻譯
1 appid = 'your_appid'
2 secretKey = 'your_secretKey'
3 url_baidu = ''
4
5 def translateBaidu(text, f='ja', t='zh'):
6 salt = random.randint(32768, 65536)
7 sign = appid + text + str(salt) + secretKey
8 sign = hashlib.md5(sign.encode()).hexdigest()
9 url = url_baidu + '?appid=' + appid + 'q=' + urllib.parse.quote(text) + 'from=' + f + 'to=' + t + \
10 'salt=' + str(salt) + 'sign=' + sign
11 response = urllib.request.urlopen(url)
12 content = response.read().decode('utf-8')
13 data = json.loads(content)
14 result = str(data['trans_result'][0]['dst'])
15 print(result)
參數(shù):text--待翻文本,f--初始語言,t--目標(biāo)語言,后面方法類似。
2. 有道翻譯
1 url_youdao = ';smartresult=rulesmartresult=ugcsessionFrom=' \
2 ''
3 dict = {}
4 dict['type'] = 'AUTO'
5 dict['doctype'] = 'json'
6 dict['xmlVersion'] = '1.8'
7 dict['keyfrom'] = 'fanyi.web'
8 dict['ue'] = 'UTF-8'
9 dict['action'] = 'FY_BY_CLICKBUTTON'
10 dict['typoResult'] = 'true'
11
12 def translateYoudao(text):
13 global dict
14 dict['i'] = text
15 data = urllib.parse.urlencode(dict).encode('utf-8')
16 response = urllib.request.urlopen(url_youdao, data)
17 content = response.read().decode('utf-8')
18 data = json.loads(content)
19 result = data['translateResult'][0][0]['tgt']
20 print(result)
參數(shù)主要由字典dict指定,發(fā)現(xiàn)沒有地方可以指定語言(可能是我沒找到),測試結(jié)果是不管輸入什么語言的文本,輸出均是中文。
3. 谷歌翻譯
1 url_google = ''
2 reg_text = re.compile(r'(?=TRANSLATED_TEXT=).*?;')
3 user_agent = r'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ' \
4 r'Chrome/44.0.2403.157 Safari/537.36'
5
6 def translateGoogle(text, f='ja', t='zh-cn'):
7 values = {'hl': 'zh-cn', 'ie': 'utf-8', 'text': text, 'langpair': '%s|%s' % (f, t)}
8 value = urllib.parse.urlencode(values)
9 req = urllib.request.Request(url_google + '?' + value)
10 req.add_header('User-Agent', user_agent)
11 response = urllib.request.urlopen(req)
12 content = response.read().decode('utf-8')
13 data = reg_text.search(content)
14 result = data.group(0).strip(';').strip('\'')
15 print(result)
和上面兩種方法一樣,采用的是訪問網(wǎng)頁的形式來進(jìn)行翻譯。
還有一種是利用python谷歌翻譯模塊Translator:
1 def translateGoogle2(text):
2 result = translator.translate(text)
3 print(result)
4. 測試代碼
測試過程:
翻譯5個字串為一個小的單位,輸出消耗時間;
循環(huán)10次為一個大的單位,輸出消耗時間;
對不同的語言字串和循環(huán)次數(shù)做過多次測試,發(fā)現(xiàn)情況基本類似,所以這里選擇了10次。
1 text_list = ['こんにちは', 'こんばんは', 'おはようございます', 'お休(やす)みなさい', 'お元?dú)?げんき)ですか']
2
3 time_baidu = 0
4 time_youdao = 0
5 time_google = 0
6 time_google2 = 0
7
8 for i in list(range(1, 11)):
9 time1 = time.time()
10 for text in text_list:
11 translateBaidu(text)
12 time2 = time.time()
13 print('百度翻譯第%s次時間:%s' % (i, time2 - time1))
14 time_baidu += (time2 - time1)
15
16 time1 = time.time()
17 for text in text_list:
18 translateYoudao(text)
19 time2 = time.time()
20 print('有道翻譯第%s次時間:%s' % (i, time2 - time1))
21 time_youdao += (time2 - time1)
22
23 time1 = time.time()
24 for text in text_list:
25 translateGoogle(text)
26 time2 = time.time()
27 print('谷歌翻譯第%s次時間:%s' % (i, time2 - time1))
28 time_google += (time2 - time1)
29
30 time1 = time.time()
31 for text in text_list:
32 translateGoogle2(text)
33 time2 = time.time()
34 print('谷歌2翻譯第%s次時間:%s' % (i, time2 - time1))
35 time_google2 += (time2 - time1)
36
37
38 print('百度翻譯時間:%s' % (time_baidu / 10))
39 print('有道翻譯時間:%s' % (time_youdao / 10))
40 print('谷歌翻譯時間:%s' % (time_google / 10))
41 print('谷歌2翻譯時間:%s' % (time_google2 / 10))
我改了一下
dictionary={}????#?創(chuàng)建一個空字典
#?定義一個函數(shù),功能:向字典中增加記錄
#?dictionary?是字典,en?是英文單詞,ch?是對應(yīng)中文單詞
def?add_dict(dictionary,?en,?ch):
dictionary[en]?=?ch??????????????#?增添or?更新一條記錄
dictionary[ch]?=?en
print("添加成功")??
#?定義一個函數(shù),功能:翻譯
#?dictionary?是字典,string?是要查找的單詞(中文or?英文)
def?find(dictionary,?string):
if?string?not?in?dictionary:?????#?如果string?不在dict?內(nèi),打印提示信????????????????????????????????????????息
print("該單詞不在dict?內(nèi)")
else:????????????????????????????#?否則,給出對應(yīng)中文釋義
print("該單詞",?string,?"的意思是:",?dictionary[string])
#?向字典內(nèi)增添幾個記錄,測試增加記錄的功能,也可嘗試用while?循環(huán)持續(xù)接收用戶添加詞條
for?i?in?range(3):
en?=?input("增添的英文單詞:?")??????#?接受輸入
ch?=?input("對應(yīng)的中文單詞:?")
add_dict(dictionary,?en,?ch)??????#?調(diào)用add_dict?函數(shù),往字典中添加內(nèi)?????????????????????????????????????????容
#?接收用戶輸入,調(diào)用find?函數(shù)實現(xiàn)翻譯
string?=?input("請輸入要查詢的單詞:?")
find(dictionary,?string)
運(yùn)行效果:
增添的英文單詞:?apple
對應(yīng)的中文單詞:?蘋果
添加成功
增添的英文單詞:?banana
對應(yīng)的中文單詞:?香蕉
添加成功
增添的英文單詞:?peach
對應(yīng)的中文單詞:?桃子
添加成功
請輸入要查詢的單詞:?peach
該單詞?peach?的意思是:?桃子
錯誤應(yīng)該是你定義函數(shù)時的變量名(dictionary)和函數(shù)內(nèi)部的變量名(dict)不一致導(dǎo)致的,還有你在測試add_dict的時候把a(bǔ)dd_dict的返回值None賦給了一個名叫dictionary的變量,這是完全沒必要的,并且導(dǎo)致了和現(xiàn)有的dictionary的沖突,使得第二次循環(huán)添加單詞時出現(xiàn)錯誤。
是up函數(shù)。根據(jù)查詢資料顯示,up在python中是up函數(shù)的意思。Python,翻譯成漢語是蟒蛇的意思,并且Python的logo也是兩條纏繞在一起的蟒蛇的樣子,然而Python語言和蟒蛇實際上并沒有一毛錢關(guān)系。Python語言是由荷蘭程序員Guido van Rossum,江湖人稱龜叔,獨(dú)立開發(fā)完成初版的。
意思:返回字符串、列表、字典、元組等長度。
語法:len(str)。
參數(shù):str:要計算的字符串、列表、字典、元組等。
返回值:字符串、列表、字典、元組等元素的長度。
電腦:華為MateBook
系統(tǒng):Windows10
軟件:python3.6(Anaconda)
1、len函數(shù)的作用,是Return the number of items in a container.,翻譯過來,就是返回容器中項目的數(shù)目。
2、len的變量必須是容器,單獨(dú)的數(shù)字行不通:
a=2
print(len(a))
3、容器可以是列表:
a=
print(len(a))
4、容器可以是嵌套列表:
a=,1,2,3,]
print(len(a))
5、容器可以是字符串:
6、字符串的長度與字符有關(guān):
a='abcdefg369'
print(len(a))
7、反斜杠組合而成的轉(zhuǎn)移符,只是一個字符:
a='\n\t'
print(len(a))
這里要特別注意,\n是一個字符。
8個超好用內(nèi)置函數(shù)set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
python中有許多內(nèi)置函數(shù),不像print那么廣為人知,但它們卻異常的強(qiáng)大,用好了可以大大提高代碼效率。
這次來梳理下8個好用的python內(nèi)置函數(shù)
1、set()
當(dāng)需要對一個列表進(jìn)行去重操作的時候,set()函數(shù)就派上用場了。
用于創(chuàng)建一個集合,集合里的元素是無序且不重復(fù)的。集合對象創(chuàng)建后,還能使用并集、交集、差集功能。
2、eval()之前有人問如何用python寫一個四則運(yùn)算器,輸入字符串公式,直接產(chǎn)生結(jié)果。用eval()來做就很簡單:eval(str_expression)作用是將字符串轉(zhuǎn)換成表達(dá)式,并且執(zhí)行。
3、sorted()在處理數(shù)據(jù)過程中,我們經(jīng)常會用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時候就需要用到sorted() ,它可以對任何可迭代對象進(jìn)行排序,并返回列表。對列表升序操作:
對元組倒序操作:
使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長度來排序:
根據(jù)自定義規(guī)則,對元組構(gòu)成的列表進(jìn)行排序:
4、reversed()如果需要對序列的元素進(jìn)行反轉(zhuǎn)操作,reversed()函數(shù)能幫到你。reversed()接受一個序列,將序列里的元素反轉(zhuǎn),并最終返回迭代器。
5、map()做文本處理的時候,假如要對序列里的每個單詞進(jìn)行大寫轉(zhuǎn)化操作。這個時候就可以使用map()函數(shù)。
map()會根據(jù)提供的函數(shù),對指定的序列做映射,最終返回迭代器。也就是說map()函數(shù)會把序列里的每一個元素用指定的方法加工一遍,最終返回給你加工好的序列。舉個例子,對列表里的每個數(shù)字作平方處理:
6、reduce()前面說到對列表里的每個數(shù)字作平方處理,用map()函數(shù)。那我想將列表里的每個元素相乘,該怎么做呢?這時候用到reduce()函數(shù)。
reduce()會對參數(shù)序列中元素進(jìn)行累積。第一、第二個元素先進(jìn)行函數(shù)操作,生成的結(jié)果再和第三個元素進(jìn)行函數(shù)操作,以此類推,最終生成所有元素累積運(yùn)算的結(jié)果。再舉個例子,將字母連接成字符串。
你可能已經(jīng)注意到,reduce()函數(shù)在python3里已經(jīng)不再是內(nèi)置函數(shù),而是遷移到了functools模塊中。這里把reduce()函數(shù)拎出來講,是因為它太重要了。
7、filter()一些數(shù)字組成的列表,要把其中偶數(shù)去掉,該怎么做呢?
filter()函數(shù)輕松完成了任務(wù),它用于過濾序列,過濾掉不符合條件的元素,返回一個迭代器對象。filter()函數(shù)和map()、reduce()函數(shù)類似,都是將序列里的每個元素映射到函數(shù),最終返回結(jié)果。我們再試試,如何從許多單詞里挑出包含字母w的單詞。
8、enumerate()這樣一個場景,同時打印出序列里每一個元素和它對應(yīng)的順序號,我們用enumerate()函數(shù)做做看。
enumerate翻譯過來是枚舉、列舉的意思,所以說enumerate()函數(shù)用于對序列里的元素進(jìn)行順序標(biāo)注,返回(元素、索引)組成的迭代器。再舉個例子說明,對字符串進(jìn)行標(biāo)注,返回每個字母和其索引。