日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python—实训day3—简单的在线翻译程序

發(fā)布時(shí)間:2023/12/18 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python—实训day3—简单的在线翻译程序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

4 發(fā)送POST請(qǐng)求

4.3 用poster獲取有道在線翻譯

參考有道翻譯:http://fanyi.youdao.com/

通過(guò)Fiddler工具可以獲取到

請(qǐng)求的URL地址為:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

提交的請(qǐng)求體參數(shù)

i=hello&from=AUTO&to=AUTO&smartresult=dict&client=fanyideskweb&salt=16002154063071&sign=37d97277cb051e71959e772b91309b2b&lts=1600215406307&bv=7e14dfdb6b3686cc5af5e5294aaded19&doctype=json&version=2.1&keyfrom=fanyi.web&action=FY_BY_REALTlME

其中,關(guān)鍵參數(shù):

i:要翻譯的單詞

salt:鹽值

sign:簽名

鹽值和簽名是后臺(tái)反爬蟲的機(jī)制

使用poster來(lái)模擬發(fā)送post請(qǐng)求

但是會(huì)出現(xiàn) {"errorCode":50} 錯(cuò)誤,因?yàn)榉?wù)器有反爬蟲機(jī)制

只要鹽值和簽名不同,就會(huì)報(bào)錯(cuò)

經(jīng)過(guò)網(wǎng)上大神指點(diǎn),把translate_o改為translate即可

4.4 用python實(shí)現(xiàn)簡(jiǎn)單的在線翻譯程序

from urllib import request, parse import ssl import random# 常用User-Agent列表 ua_list = ['User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50','Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)', ] # 加載一個(gè)頁(yè)面 def loadPage(url, word):# 在ua_list列表中隨機(jī)選擇一個(gè)UserAgentuserAgent = random.choice(ua_list)headers = {'User-Agent': userAgent}# 發(fā)起一個(gè)請(qǐng)求req = request.Request(url, headers = headers)# 創(chuàng)建未經(jīng)過(guò)驗(yàn)證的上下文的代碼context = ssl._create_unverified_context()data = {'i': word,'from': 'AUTO','to': 'AUTO','smartresult': 'dict','client': 'fanyideskweb','salt': '16002154063071','sign': '37d97277cb051e71959e772b91309b2b','lts': '1600215406307','bv': '7e14dfdb6b3686cc5af5e5294aaded19','doctype': 'json','version': '2.1','keyfrom': 'fanyi.web','action': 'FY_BY_REALTlME'}data = parse.urlencode(data).encode('utf-8')# 打開響應(yīng)的對(duì)象response = request.urlopen(req, context=context, data=data)# 獲取響應(yīng)的內(nèi)容html = response.read()# 對(duì)獲取到的unicode編碼進(jìn)行解碼content = html.decode('utf-8')return content import json def fanyi(word):url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'content = loadPage(url, word)jsondicts = json.loads(content)return jsondicts['translateResult'][0][0]['tgt']if __name__ == '__main__':word = input('請(qǐng)輸入要翻譯的單詞:')result = fanyi(word)print('翻譯的結(jié)果為:', result)

5.1 面向?qū)ο蠛兔嫦蜻^(guò)程5 Python面向?qū)ο?/p>

面向過(guò)程:C、匯編、Basic、Pascal

面向?qū)ο?#xff1a;C++、Java、Python、PHP、……

面向過(guò)程基于計(jì)算機(jī)的角度出發(fā)考慮問(wèn)題

面向?qū)ο笫菑娜?#xff08;第三者)的角度出發(fā)考慮問(wèn)題

比如:學(xué)生上學(xué)

面向過(guò)程

起床

洗刷刷

穿衣打扮

出門,往教室方向走

if 遇到十字路口:

while 紅燈亮:

等待綠燈

走到教室

while 上課時(shí)間未到:

等待上課

開始上課

while 下課時(shí)間未到:

等待下課

走出教室

吃飯

睡覺(jué)

面向?qū)ο?/p>

定義一個(gè)學(xué)生類

定義學(xué)生類的屬性:姓名、年齡、專業(yè)、年級(jí)、……

定義學(xué)生類的方法:吃飯()、睡覺(jué)()、上學(xué)()、放學(xué)()、……

定義一個(gè)教室類

定義教室類的屬性:位置、容量、……

定義教室類的方法:開門()、關(guān)門()

定義學(xué)生類的對(duì)象:zhangsan

定義教室類的對(duì)象:417

zhangsan.上學(xué)(417)

總結(jié):

面向?qū)ο?#xff1a;適合組織大規(guī)模的軟件開發(fā)

面向過(guò)程:底層、快捷、高效

5.2 什么是對(duì)象

天上飛的:飛機(jī)、大炮、鳥、鷹、……

地上跑的:雞鴨鵝、豬牛羊

水里游的:魚蝦蟹、……

抽象的概念:項(xiàng)目、規(guī)范、原理、方法、……

世界上萬(wàn)事萬(wàn)物都是對(duì)象

5.3 區(qū)分類和對(duì)象

思考:

1 狗是類 狗是對(duì)象

2 張三是類 張三是對(duì)象

結(jié)論:對(duì)象更具體、類更抽象

一個(gè)類中可以包含多個(gè)對(duì)象

類是某一種對(duì)象的集合(總稱)

面向?qū)ο缶幊?/p>

5.4 Python中聲明類和創(chuàng)建對(duì)象

聲明類:使用關(guān)鍵字 class

約定規(guī)矩:類名首字母必須大寫

# 聲明一個(gè)類 class Dog:pass

創(chuàng)建類的對(duì)象

dog1 = Dog() print(dog1) # ain__.Dog object at 0x000002AEA3FDFA58> print(type(dog1)) # s '__main__.Dog'>

Dog是類,dog1是Dog的對(duì)象

我們是面向?qū)ο蟮木幊?#xff0c;實(shí)際上是使用dog1進(jìn)行編程

5.5 屬性

屬性是對(duì)象所擁有的特征

設(shè)置屬性

# 聲明一個(gè)類 class Dog:pass dog1 = Dog() # 設(shè)置狗的屬性 dog1.name = '旺財(cái)' dog1.age = 13 dog1.sex = 'male' # 讀取狗的屬性 print(dog1.name) print(dog1.age) print(dog1.sex)

如果想要查看類的屬性和方法,可以通過(guò)dir() 函數(shù)查看

dog1 = Dog() print(dir(dog1)) # 設(shè)置狗的屬性 dog1.name = '旺財(cái)' dog1.age = 13 dog1.sex = 'male' print(dir(dog1))

發(fā)現(xiàn)屬性是臨時(shí)添加上去的

如果希望屬性是固定在類中的,需要把這些屬性寫到類的實(shí)現(xiàn)代碼中

class Dog:name = '' # 姓名age = 0 # 年齡sex = 'female' # 性別dog1 = Dog() print(dir(dog1)) dog2 = Dog() print(dir(dog2))

5.6 方法

方法是類的對(duì)象的一系列的操作

需要在類中定義方法

def 方法名(方法的參數(shù)):

方法的實(shí)現(xiàn)代碼

方法的返回值

注意:方法名首字母必須小寫

class Dog:# 狗叫的方法def bark(self):print('旺')dog1 = Dog() dog1.bark()

方法可以傳遞參數(shù)

class Dog:# 狗叫的方法def bark(self):print('旺')def eat(self, something):print('狗吃' + something)dog1 = Dog() dog1.bark() dog1.eat('骨頭')

給方法加上返回值

class Dog:name = ''# 狗叫的方法def bark(self):print('旺')def eat(self, something):print('狗吃' + something)def setName(self, name):self.name = namedef getName(self):return self.namedog1 = Dog() dog1.bark() dog1.eat('骨頭') dog1.setName('旺財(cái)') print(dog1.getName())

5.7 __init__

__init__是Python自帶的方法,需要至少一個(gè)參數(shù)self

__init__的作用是初始化,創(chuàng)建類的對(duì)象的時(shí)候,需要做的準(zhǔn)備工作

(連接網(wǎng)絡(luò)、打開文件、連接數(shù)據(jù)庫(kù))

當(dāng)類的對(duì)象被創(chuàng)建的時(shí)候,該方法就會(huì)被調(diào)用

class Dog:# 初始化def __init__(self, name, age):self.name = nameself.age = agedog1 = Dog('旺財(cái)', 8) print(dog1.name) print(dog1.age) dog2 = Dog('小花', 12) print(dog2.name) print(dog2.age)

5.8 __del__

刪除對(duì)象的時(shí)候清理用的,調(diào)用者使用del關(guān)鍵字時(shí)候觸發(fā)

class Dog:# 初始化def __init__(self, name, age):self.name = nameself.age = age# 銷毀def __del__(self):print('__del__')self.name = ''self.age = 0dog1 = Dog('旺財(cái)', 8) print(dog1.name) print(dog1.age) del dog1 # 主動(dòng)觸發(fā) __del__ print('over') # 程序結(jié)束

5.9 封裝

面向?qū)ο蟮娜筇卣?#xff1a;封裝、繼承、多態(tài)

屬性的公有和私有

Python中描述私有屬性和私有方法,通過(guò)前置下劃線來(lái)表示

1 _xxx:單前置下劃線

2 __xxx:雙前置下劃線

3 __xxx__:雙前置雙后置下劃線。類的內(nèi)部已經(jīng)定義好了

描述私有,一般使用雙前置下劃線

class Dog:# 初始化def __init__(self, name, age):self.__name = nameself.__age = agedef getName(self):return self.__name# 返回對(duì)象本身的描述字符串def __str__(self):return 'name:%s, age:%s' % (self.__name, self.__name)dog1 = Dog('旺財(cái)', 8) #print(dog1.__name) # 在外部不能直接訪問(wèn)__name屬性 print(dog1.getName()) print(dog1)

5.10 繼承

子類繼承父類

class 子類(父類):

子類的實(shí)現(xiàn)的代碼

父類的所有的非私有屬性和方法,子類中都會(huì)繼承,并可以直接使用

# 父類 class Animal:def eat(self):print('Animal eat')# 子類 class Dog(Animal):passdog1 = Dog() dog1.eat()

子類可以重寫父類的方法

# 父類 class Animal:def eat(self):print('Animal eat')# 子類 class Dog(Animal):def eat(self):print('Dog eat')dog1 = Dog() dog1.eat()

還可以在子類方法中調(diào)用父類的方法

# 父類 class Animal:def eat(self):print('Animal eat')# 子類 class Dog(Animal):def eat(self):super().eat() # 調(diào)用父類的eat()方法print('Dog eat')dog1 = Dog() dog1.eat()

子類還可以派生它的子類

# 子類的子類 class HabaDog(Dog):def eat(self):print('HabaDog eat')dog2 = HabaDog() dog2.eat()

Python中的約定:

如果一個(gè)類沒(méi)有繼承任何類,將默認(rèn)繼承object類

如下兩種寫法效果相同

# 父類 class Animal:def eat(self):print('Animal eat') # 父類 class Animal(object):def eat(self):print('Animal eat')

在Python3中,建議使用后者

5.11 多態(tài)

不同事物,對(duì)同一個(gè)操作所表現(xiàn)出來(lái)的多種形態(tài)

外科醫(yī)生、廚師、演員。Cut

動(dòng)手術(shù)、切菜、下班

Python的多態(tài)比較簡(jiǎn)單(與Java比起來(lái))

# 父類 class Animal(object):def eat(self):print('Animal eat')class Dog(Animal):def eat(self):print('Dog eat')class Man(Animal):def eat(self):print('Man eat')class Woman(Animal):def eat(self):print('Woman eat')# 函數(shù) def doEat(obj):obj.eat()dog1 = Dog() man1 = Man() woman1 = Woman() doEat(dog1) doEat(man1) doEat(woman1)

doEat()函數(shù)中,理論上可以傳遞任意的參數(shù)。如果該參數(shù)的對(duì)象沒(méi)有eat()方法,怎么辦?

考慮使用 isinstance() 函數(shù)。判斷是否為某個(gè)類的對(duì)象

print(isinstance(dog1, Dog)) # True print(isinstance(dog1, Animal)) # True print(isinstance(a1, Animal)) # True print(isinstance(a1, Dog)) # False print(isinstance('hello', Animal)) # False

可以在doEat()函數(shù)中,添加isinstance(),判斷輸入的obj是否為Animal的對(duì)象,只有是Animal對(duì)象時(shí),才能調(diào)用eat()方法

# 函數(shù) def doEat(obj): # obj只有為Aniaml類或子類對(duì)象才有eat方法 # isinstance判斷是否為某個(gè)類或子類的對(duì)象 # 參數(shù)1 obj 對(duì)象 # 參數(shù)2 type 類(類型) if isinstance(obj, Animal): obj.eat()

?

總結(jié)

以上是生活随笔為你收集整理的Python—实训day3—简单的在线翻译程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。