版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
附錄各章習(xí)題參考答案
第1章習(xí)題參考答案
1.答:Python主流版本為3.x。
Python主要應(yīng)用有:常規(guī)軟件開發(fā)、科學(xué)計(jì)算、自動(dòng)化運(yùn)維、云計(jì)算、Web開發(fā)、網(wǎng)
絡(luò)爬蟲、數(shù)據(jù)分析、人工智能。
2.答:參照“1.2搭建Python開發(fā)環(huán)境”一節(jié)內(nèi)容。
3.答:參照“1.2.4多版本Python和虛擬環(huán)境安裝”一節(jié)內(nèi)容。
4.答:參照“1.2.4多版本Python和虛擬環(huán)境安裝”一節(jié)內(nèi)容。
5.答:參照“151IDLE的簡(jiǎn)單使用”一節(jié)內(nèi)容。
6.答:參照“1.5.2pip工具的使用”一節(jié)內(nèi)容。
第2章習(xí)題參考答案
1.答:參照“2.1.1注釋”一節(jié)內(nèi)容。
2.答:
在python交互模式下,輸入以下代碼,可以查看Python語(yǔ)言的保留字,即關(guān)鍵字:
importkeyword
keyword.kwlist
3答:參照“221標(biāo)識(shí)符”一節(jié)內(nèi)容。
4.答:
輸出結(jié)果如下:
Traceback(mostrecentcalllast):
File"<stdin>",lineI.in<modulc>
TypeError:'str'objectdoesnotsupportitemassignment
原因是字符串類型是不可變類型,不支持更改操作。
5.答:info=info[0:2]+d
6.答:print(a+b詬輸出報(bào)錯(cuò)信息如下:
Traceback(mostrecentcalllast):
File"<stdin>",line1.in<module>
TypeFrrcr:musthestr,notint
原因是字符串類型和數(shù)字類型不能直接相加。如果期望輸出是3,則代碼中print語(yǔ)句
可以修改如下:
print(int(a)+b)
7.答:程序如下。
?>s=ui,am,lilei"
?>print(s[2:4])
am
?>print(s[2]+s[3J)
am
8.答:字符串為不可變類型,不能直接修改字符串中的某個(gè)字符。如果需要修改,可
以將字符串先轉(zhuǎn)成列表類型,然后再通過索引下標(biāo)修改。
9.答:結(jié)果是False。
10.答:(1)3(2)2
第3章習(xí)題參考答案
1.答:Python3中有6個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型:Number(數(shù)字)、String(字符串)、List
(列表)、Tuple(元組)、Set(集合)、Dictionary(字典)。其中,Number、String和
Tuple為不可變類型;List、Dictionary和Set為3個(gè)為可變類型。
2.答:Python的每個(gè)對(duì)象都分為可變和不可變,主要的核心類型中,數(shù)字、字符串、
元組是不可變的,列表、字典是可變的。
對(duì)不可變類型的變量重新賦值,實(shí)際上是重新創(chuàng)建一個(gè)不可變類型的對(duì)象,并將原來
的變量重新指向新創(chuàng)建的對(duì)象(如果沒有其他變量引用原有對(duì)象的話(即引用計(jì)數(shù)為0),
原有對(duì)象就會(huì)被回收)。
3.答:
(1)參考代碼如下。
#使用字符串的內(nèi)置方法a.swapcase():
?>a='aAsmr3idd4bgs7Dlsf9cAF
?>a
'aAsmr3idd4bgs7Dlsf9eAF
?>printa.swapcase()
AaSMR3IDD4BGS7dLSF9Eaf
(2)參考代碼如下。
#字符串有個(gè)內(nèi)置判斷函數(shù),如果字符是純數(shù)字返回True,否則返回Falseo
>?a='2345'
?>a
'2345'
?>a.isdigit()
True
?>b='we34234,
?>b.isdigit()
False
?>a='aAsmr3idd4bgs7Dlsf9cAF
?>a
'aAsmr3idd4bgs7Dlsf9eAF
?>print[sforsinaifs.isdigit()J
[3J4,,7,9]
?>print"join([sforsinaifs.isdigit()])
3479
H.join([sforsinaifs.isdigit。])表達(dá)的意思為:
列表I=[]
forsina:#遍歷a字符串里面所有字符
ifs.isdigilO:
Lappcnd(s)
join。把所有數(shù)字去除任何字符進(jìn)行組裝起來。
4.答:第一種方式如下:
?>a
'aAsmr3idd4bugs7Dlsf9eAF'
?>print機(jī)::?1]#存在步長(zhǎng)為?1說明該字符串為倒敘輸出排序的
FAe9fslD7sgub4ddi3rmsAa
第二種方式如下:
?>a='aAsmr3idcl4biigs7Dlsf9eAF'
?>a
'aAsmr3idd4bugs7Dlsf9eAF'
?>alist=list(a)
?>alist
「ahA「s「m'T,3,T,d,d,7,D;T,T,9
?>alist.reverse()
?>alist
[F,'A','f,'s',T,'D',7,'s','g'JiT,'b',4,d,d,'i',3,T,'m','s','A','a']
?>print".join(alist)
FAe9fslD7sgub4ddi3nnsAa
5.答:
#偽代碼
?要有小寫字母從a-z的排序;
?大小寫不同,但值相同的字母,大寫在小寫前面。
參考程序如下:
#visortzimu2.py
root@kali:--#pythonsortziniu2.py
ifuscrname.uppcr()==Q:
printC退出程序了
break
#判斷內(nèi)容是否合法:判斷username是否在board中
ifusernameinboard:
username=lcn(username)*#使用一進(jìn)行替換:如果username在board中的話,
username有幾個(gè)字符就打印幾個(gè)*
pwd=inputf請(qǐng)輸入密碼:,)
die={}#用來保存輸入的用戶名和密碼
dic['usemame']-username
dic['[password']=pwd
#print(dic)
#將新用戶添加到user」ist中
user_list.append(dic)
#打印所有用戶的信息
print(user_list)
9.答:參考程序如下:
#第一種
dic={'最終結(jié)果None}
num=input。請(qǐng)輸入內(nèi)容:,)
sum=0
str=num.splitC+')#先用split將加號(hào)去掉。
#print(str)——>['12','23,]
fbriinstr:
sum?=int(i)#.i轉(zhuǎn)換為整數(shù)
dic「最終結(jié)果1=sum#將sum值給字典中的value值
print(dic)
#第二種:利用eval函數(shù)
b=eval(num)
die「最終結(jié)果']=b
print(dic)
1().答:參考程序如下。
1st=[{'name':‘蘋果'price':3.5},{‘name':‘香蕉'price':2}.{‘name':'圣女果';price':6}]
che={}
gw=input。請(qǐng)輸入你本次的購(gòu)物基金:)
ifgw.isdigit():
money=int(gw)
forindex,dicinenumerate(lst,start=1):
print('水果的字號(hào):{},名稱:{},價(jià)格:{],.format(index,dic['name'],dic['price,]))
whileTrue:
xh=input。請(qǐng)輸入你想購(gòu)買商品的序號(hào)
ifxh.isdigit():
xh2=in((xh)
ifxh2>0andxh2<=lcn(lst):
si=inpulC請(qǐng)輸入你想買的東西的數(shù)量:)
ifsl.isdigit():
s!2=int(sl)
jia=lst[xh2-l]['price'l
total_moncy=jia*s!2
iflotal_money<=money:
spm=lst[xh2-11['name']
zsp=che.get(spm)
ifzsp:
”,購(gòu)物車中已經(jīng)存在此商品,只需添加數(shù)量
che[spm]+=s!2
print(che)
else:
”‘添加商品名稱和數(shù)量”’
chefspm]=sl2
print(chc)
money=money-total_money
print(,您當(dāng)前的余額為:money)
else:
print,親,余額不足。。?!?
break
else:
prime數(shù)量是數(shù)字啊,親,請(qǐng)重新輸入')
else:
print,序號(hào)錯(cuò)誤哦,親,請(qǐng)重新輸入')
else:
prin(您諭入的不是數(shù)字哦,)
else:
prints您輸入的基金不是數(shù)字哦)
第4章習(xí)題參考答案
1.答:參考程序如下。
i=0
s=0
whilei<100:
i+=1
s+=i
print(s)
print(,l+2+..100-,s)
2.答:參考程序如下。
foriinrange(ord('A"),ord('Z')):
print(chr(i))
3.答:參考程序如下。
#12345=>54321
ret=O
a=12345
whilea:
last=a%10
ret=ret*10+last
a=a//10
print(rct)
4.答:參考程序如下。
a=12345
ret="
whilea:
什提取最后一個(gè)數(shù)字
n=a%10
#轉(zhuǎn)為對(duì)應(yīng)的字符
c=chr(n+ord('O'))
#拼接到ret最前面
ret=c+ret
#除10為下次做準(zhǔn)備
a=a//1()
print(rel)
5.答:參考程序如下。
lt=[
{'name':'田馥甄'age':36','info':[('phone','1383838438'),('address','北京')]},
{'name':'柳巖丁age':'33','info':[('phone','139809808'),('address','河南鄭州')]},
{'name':'林志玲'age':'42','info':[('phone',('address','河北石家莊')]},
('name':'柳慧芬丁age':'18','info':[('phone','13737623)('address','山東濟(jì)南')]},
1
foriinIt:
prim。我的名字是%s,我的年齡是%s,我的電話是%s,我的家住在%s,%(i['name'l,i['age'],
irinfo'KOir-lLirinfo'K-HM]))
第5章習(xí)題參考答案
1.答:
#普通元字符的轉(zhuǎn)義
.string=
!@#$%A&
#不轉(zhuǎn)義
printre.findall('$',_string)
#?>[","1
#雙反斜杠轉(zhuǎn)義
printre.findall('\\$',.string)
#?>['5']
#單反斜杠轉(zhuǎn)義
printre.findall('\$\.string)
#?>['$']
2.答:
字符串.isahnim。一所有字符都是數(shù)字或者字母,為真返回Ture,否則返回False。
字符串.isalpha。一所有字符都是字母,為真返回Ture,否則返回False。
字符串.isdigit。一所有字符都是數(shù)字,為真返回Ture,否則返回False。
字符串.islower。一所有字符都是小寫,為真返回Ture,否則返回False。
字符串.isupper()一所有字符都是大寫,為真返回Ture,否則返回False。
字符串.istitle。一所有單詞都是首字母大寫,為真返回Ture,否則返回False。
字符串.isspace。一所有字符都是空白字符,為真返回Ture,否則返回False。
?>str="helloworld',
?>str.lower()
'helloworld'
?>str.islower()
True
3.答:參考程序如下。
importre
defexpand_abbr(sen,abbr):
lenabbr=len(abbr)
ma=
foriinrange(0,lenabbr):
ma=abbr[i]"[a"z]"
print(ma:,ma)
ma=ma.slrip()
p=re.search(ma,sen)
ifp:
returnp.groupO
else:
return
print(expand_abbr("WelcometoAlgricultureBankChina",ABC))
4.答:參考程序如下。
importre
string='Split,23,345,789,resultinglist.1.5,maxsplitwas12,121,233,releases'
pation=pile('\d,kl')
a=patton.findall(string)
foriina:
temp-i.icpIace(',V')
string=string.replace(i,temp)
print(string)
5.答:
#coding:cp936
importre
m()="在一九四九年新中國(guó)成立”
ml=”比一九九零年低百分之五點(diǎn)二"
m2='人一九九六年擊敗俄軍.取得實(shí)質(zhì)獨(dú)立’
deffuc(m):
a=refndalK'I零|一口三㈣五|六出八|九]+年”,m)
ifa:
lorkeyina:
print(key)
else:
print("NULL")
tuc(mU)
fuc(ml)
fuc(m2)
6.答:
importre
in
輸入手機(jī)號(hào)碼,判斷手機(jī)號(hào)碼是否為11位,是否為1開頭的數(shù)值
IH
defget_phonc():
whileTrue:
phone=input。請(qǐng)輸入手機(jī)號(hào)碼:)
iflen(phone)==11andre.match(r'l\d{1()}',phone):
returnphone
else:
prin(請(qǐng)輸入11位的手機(jī)號(hào))
輸入數(shù)量,判斷數(shù)量是否為正整數(shù)
defget_amount():
whileTrue:
amount=input,請(qǐng)輸入數(shù)最:)
ifamount.isdigit()andint(amount)>=0:
returnamount
else:
print('請(qǐng)輸入正整數(shù)!,)
7.答:參考程序如下口
defcheckPhone(str):
iflcn(str)!=11:
returnFalse
elifstr[O]
returnFalse
elifstr[l:3]仁“39"andstr[l:3]!="31”:
print(str[l:3])
returnFalse
print("***")
foriinrange(3,11):
print(slr[i])
ifstr[i]<',O"orstr[i]>"9":
returnFalse
returnTrue
print(checkPhone())
print(chcckPhoncC,139123456785"))
print(chcckPhonc(nl391234a678"))
print(checkPhone(',23912345678"))
print(checkPhone("19012345678"))
8.答:
版本一:應(yīng)該可以驗(yàn)證出類似的Email:
somcone@
bill.gates@
參考程序如下。
importre
#先編譯好正則
re_email=pile(r'A[\w]+\.?[\w]4-@[\w]+\.com$')
#正則解釋:字母一個(gè)以上.一個(gè)或沒有字母一個(gè)以上@字母不限.com
defis_valid_email(addr):
ifre_email.match(addr):
returnTrue
#測(cè)試:
assertis_valid_email('someone@gmaiLcom')
assertis_vaIid_email(,biH.gates@,)
assertnotis_valid_email('bob#')
assertnotis_valid_cmail('mr-bob@')
printCok')
版本二:可以提取出帶名字的Email地址:
lui11@vuyagci.vig—>TurnPaiis
bob@=>bob
參考程序如下。
importrc
re_name_of_email=pile(r,A<?([\w]+\s*[\w]*)>?\s*[\w]*@[\w]+\.org$,)
#正則解釋(一個(gè)或無字母一個(gè)以上空格不限字母不限>一個(gè)或無@字母
一個(gè)以上.org
defnameofcmail(addr):
ifre_name_oLemail.match(addr):
returnre_name_oflemail.match(addr).group(I)
#測(cè)試:
assertname_ofLemail('<TomParis>tom@1)=='TomParis'
assertname_oLemail(,tom@,)=='tom'
print('ok')
第6章習(xí)題參考答案
i.答:參考程序如下。
deffuncl(s):
=0
spance_num=0
digitnum=0
others_num=0
fbriins:
ifi.isdigitO:#isdigit判斷有沒有數(shù)字
digit_num+=1
elifi.isspaceQ:#isspace判斷有沒有空格
spance_num+=1
elifi.isalpha():#isalpha判斷有沒有字符
al_num+=1
else:
othersnum+=I
return(al_num,spancc_num,digit_num,othcrs_num)
r=funcl("kuh231jkuygkuhg")
print(r)
2.答:參考程序如下。
defestimateLenglh(data):
iflen(data)>5:
print(“該參數(shù)長(zhǎng)度大于5")
else;
print(“該參數(shù)長(zhǎng)度不大于5")
str="xiaoran"
list=[12,34,56,78,90]
tupte={"小灰灰","鳳姐"}
estirnateLength(str)
estimateLength(list)
cstimatcLcngth(tuple)
3.答:參考程序如下。
defshifou_space(args):
ret=True
forainargs:
ifa.isspace():
ret=False
break
returnret
result=shifou_space("12312312")
prini("有空格Result)
4.答:參考程序如下。
deffl(*p):
foriinp:
#print(i)
1=len(i)
ifl>2:
return(i[:2])
else:
return(i)
ret=fl([11,22,331)
print(ret)
5.答:參考程序如下。
defa3(arg):
ret=IJ
foriinrange(len(arg)):
ifi%2==1:
ret.append(arg[i])
else:
pass
returnret
li=[11,22,33,44,55]
r=a3(li)
print(li)
print(r)
6.答:參考程序如卜。
deffunl(n):
fori,minn.items():
m=str(m)
iflcn(m)>2:
n[i]=m(0:2]
print(n)
die={'name'ffanfan'/age'^Jsex'z'boy'}
fun1(die)
第7章習(xí)題參考答案
i.答:
?繼承:解決代碼重用問題。
?多態(tài):多態(tài)性,可以在不考慮對(duì)象類型的情況下而直接使用對(duì)象。
?封裝:明確的區(qū)分內(nèi)外,控制外部對(duì)隱藏屬性的操作行為,隔離復(fù)雜度。
2.答:
?類的屬性:數(shù)據(jù)屬性和函數(shù)屬性,數(shù)據(jù)屬性是所有對(duì)象共有的,函數(shù)屬性是綁定
給對(duì)象使用的。
?對(duì)象的屬性:對(duì)象是類的實(shí)例化。
3.答:
面向過程:特點(diǎn)是復(fù)雜的問題流程化,簡(jiǎn)單化,其主要應(yīng)用于功能不再需要擴(kuò)展的場(chǎng)
今,如監(jiān)控腳本、自動(dòng)部署腳本、軟件解壓安裝等。
面向?qū)ο螅禾攸c(diǎn)是特征與技能的結(jié)合體,將一切均封裝為對(duì)象。面向?qū)ο笾饕獞?yīng)用于
用戶需求經(jīng)常變化的場(chǎng)合,如互聯(lián)網(wǎng)應(yīng)用、游戲、企業(yè)內(nèi)部應(yīng)用等。
4.答:類和對(duì)象在內(nèi)存中以序列化的形式保存,其中,類和對(duì)象的屬性以字典的形式
保存的「
5.答:參考程序如下:
classexec:
def_init_(self,proc_name):
self.host=*'
self.port=3306
self.db='dbl'
sclf.charsct=,utf-8,
c_name=proc_name
ex=exe<?C存儲(chǔ)名稱)
ex2=exec('存儲(chǔ)名稱2,)
print(ex._diet_)
print(ex2._diet_)
6.答:程序輸出如下:
fH
AttributeEnor:'People'objecthasnoattribute'_name'
III
#print(People._diet_)
#print(pl._People_name,pl「People—age)
til
{'_module__main_',二People_name':luffy*,'JPeople_age':18,'_diet_<attribule
,—diet—'of'People'objects>,'_weakref_<attribute'_weakref_'ofPeople'objects>,'—doc—
None)
luffy18
7.答:程序輸出如下。
_new_
_init_
8.答:
?靜態(tài)方法:非綁定方法,類和對(duì)象都可調(diào)用。
?類方法:綁定給類的方法,類調(diào)用。
參考程序如下:
classA(object):
def_init_(self,name):
self.namc=nainc
deffoo(self,x):
printC'execulingfbo(%s,%s)u%(self,x))
@classmethod
defclass_fbo(cls,x):
print("executingclass_foo(%s,%s)"%(cls,x))
@staticmethod
defstatic_foo(x):
print("executingstatic_foo(%s)"%(x))
#a=A('alice')
#a.foo('alicc')
#A.class_fooCaIice')
#a.static_foo('alice')
#A.static_fbo('alice')
fH
executingfoo(<_main—.Aobjectat0x000002A5FED12AC8>,alice)
executingclass_fbo(<class'_main_.A'>,alice)
executingstatic_foo(alice)
executingstatic_foo(alice)
111
9.答:
super。表示的是子類的mro()列表中的下一個(gè)。
?>print(G.mro())
[〈class'_main_.G'>,<class'_main_.D'>,<class'_main_.A*>,<class'_main_.B'>,<class
'object'〉]
?>print(F.mro())
[<class'_main_.F'>,<class'_main_.C'>,<class'_main_.B'>,<class'_main_.D'>,<class
'_main_.A'>,<class'objecf>]
題中程序執(zhí)行輸出結(jié)果如下:
G
D
A
B
F
C
B
D
A
10.答:
classAnimal:
def—init_(self,namc,life_valuc,aggrcssivity):
=name
self.life_value=life_value
self.aggressivity=aggressivity
defattack(self,enemy):
enemy.life_vjilue-=self.aggressivity
classPcoplc(Animal):
camp='home'
defattack(self,enemy):
super().attack{enemy)
printCfrompeople')
classDog(Aniinal):
camp='wo'
defattack(self,enemy):
super().aitack{eneniy)
printCfromdog')
pl=People('alice;80,30)
pl=People('alex',80,30)
dl=Dog('wl;90,50)
d2=Dog('w2',90,50)
d3=Dog('w3;90,50)
#print(pl.life_value)
#dl.attack(pl)
#print(p1.life_value)
#print(dl.life_value)
#p1.attack(d1)
#print(dl.lifc_valuc)
第8章習(xí)題參考答案
i.答:
Python中的模塊分為兩類,一類是內(nèi)置模塊,這類模塊安裝即帶有;另一類是用戶自
定義模塊,由開發(fā)人員根據(jù)業(yè)務(wù)實(shí)際需求編寫。
想便用Python源文件,只需在另一個(gè)源文件里執(zhí)行import語(yǔ)句,語(yǔ)法如下:
importmodule1[,module2[,...moduleN]
當(dāng)解釋器遇到import語(yǔ)句,如果模塊在當(dāng)前的搜索路徑就會(huì)被導(dǎo)入。
搜索路徑是一個(gè)解釋器會(huì)先進(jìn)行搜索的所有目錄的列表。例如下面有一個(gè)模塊
ch08test_modeL如想要導(dǎo)入該模塊,需要把命令放在腳本的頂端,例如:
#!/usr/bin/python3
#文件名:ch08test_mcdel.py
defprint_func(par):
print("Hello:",par)
return
在另一文件chO8test.py中引入ch08test_model模塊,代碼如下:
#!/usr/bin/python3
#文件名:chO8test.py
#導(dǎo)入模塊
importch08test_model
#現(xiàn)在可以調(diào)用模塊里包含的函數(shù)了
di08tcsl_iiiudvl.piiiit_fuiic("Ruiiuub")
使用以下方式執(zhí)行程序:
D:\pyproject>python3chO8test.py
Hello:Runoob
在Python中,一個(gè)模塊只會(huì)被導(dǎo)入一次,不管執(zhí)行了多少次import。這樣可以防止導(dǎo)
入模塊被一遍又一遍地執(zhí)行。
2.答:類似于類中的私有機(jī)制,可以在一個(gè)名稱前面加一個(gè)下劃線前綴,這種方法在
使用fromximport*風(fēng)格的語(yǔ)句時(shí),這些名稱并不會(huì)被導(dǎo)出。
另外,在一個(gè)名為_油_的頂層變量中列出想要導(dǎo)出的名稱,推薦使用這種方法,因
為這種方法可以保證只有那些你特別想要被導(dǎo)出的名稱才會(huì)被導(dǎo)出。
3.答:
如果不熟悉某個(gè)Python模塊,可以通過如下方法獲得幫助信息:
?built-in的dir函數(shù);
?built-in的help函數(shù);
?使用pydoc模塊;
?使用inspecl模塊。
?Google搜索(本帖介紹前4種方法,不需要我網(wǎng))
4.答:pi]list
5.答:沒有限制
第9章習(xí)題參考答案
1.答:參考程序如卜。
try:
print('(ry...,)
r=10/0
print('rcsult:',r)
exceptZeroDivisionErrorase:
print('except:',e)
finally:
print('finally...,)
printCEND')
上面的代碼在計(jì)算10/0時(shí)會(huì)產(chǎn)生一個(gè)除法運(yùn)算錯(cuò)誤:
try...
except:divisionbyzero
finally...
END
2.答:參考程序如下:
importos
deffund(filename):
try:
fil=open(filename)
exceptExceptionaserr:
printerr
else:
printfil.read()
fil.close()
3.答:參考程序如卜c
deffunc(listinfb):
result=filter(lanibdak:k<100andk%2=0,listinfo)
exceptExceptionaserr:
returnerr
else:
returnresult
listinfo=1133,88,33,22,44,11,44,55,33,22,11,11,444,66,555]
assertlype(func2(listinfa))==list
assertfunc2(listinfo)==[88,22,44,44,22,66]
4.答:參考程序如下。
classiny_error(Exception):
def_init(self,slri):
self.leng=len(stri)
defprocess(selD:
ifself.leng<5:
returnTheinputisoflength%s,expectingatleast5'%self.leng
else:
return'printsuccess'
try:
raisemy_error('sssss')
exceptmy_errorase:
printcess()
5.答:參考程序如下。
defjianfa(a,b):
ifa<b:
raiseBaseException('被減數(shù)不能小于減數(shù)')
#return0
else:
returna-b
piinljianfa(l,3)
第10章習(xí)題參考答案
1.答:參考“10.1基本文件操作”和“10.2基本文件方法”兩節(jié)的內(nèi)容。
2.答:
將執(zhí)行文件的當(dāng)前目錄及文件名寫入到name.txt文件中,以u(píng)tf-8格式保存,代碼如下:
importos
importcodecs
filenames=os.listdir(os.getcwd())
out=file("name.txt",,,w")
forfilenameinfilenames:
out.write(filename.decode("gb2312u).encode("utf-8"))
out.close()
如果采用ANSI編碼保存,用如下代碼寫入即可:
out.write(filename)
建立一個(gè)文件test.txt,文件格式用ANSI,內(nèi)容為:
abc中文
用Python來讀取
#coding=gbk
printopen("Test.txt").read()
結(jié)果:abc中文
讀取utf-8編碼文件(無BOM)時(shí),把文件格式改成UTF-8:
結(jié)果:abc涓構(gòu)
顯然,這里需要解碼:
#coding:utf-8
importcodecs
printopen("Test.lxt").read().decode(',utf-8'')
結(jié)果:abc中文
讀取utf-8編碼文件(有BOM)時(shí),某些軟件在保存一個(gè)以UTF-8編碼的文件時(shí),默
認(rèn)會(huì)在文件開始的地方插入三個(gè)不可見的字符(OxEFOxBBOxBF,即BOM)。在有些軟件
可以控制是否插入BOMo如果在有BOM的情況下,在讀取時(shí)需要自己去掉這些字符,
python中的codecsmodule定義了這個(gè)常量:
#coding:utf-8
importcodecs
data=open("Test.txt").read()
ifdata[:3]==codecs.BOM_UTF8:
data=data[3:]
print(data.decode("utf-8"))
結(jié)果:abc中文
在看下面的例子:
#coding:utf-8
data=open("name_utf8.txt").read()
u=data.decode("utf-8")
printu[l:]
打開utf-8格式的文件并讀取utf-8字符串后,解碼變成unicode對(duì)象。但是會(huì)把附加
的三個(gè)字符同樣進(jìn)行轉(zhuǎn)換,變成一個(gè)unicode字符。該字符不能被打印。所以為了正常顯
示,采用u[l:]的方式,過漉到第一個(gè)字符。
注意:在處理unicode中文字符串的時(shí)候,必須首先對(duì)它調(diào)用encode函數(shù),轉(zhuǎn)換成其
它編碼輸出。
3.答:參考程序如下。
importos,sys
deflistdir(dir,file):
file.write(dir+7n')
fielnum=0
list=os.listdir(dir)#列出目錄下的所有文件和目錄
fbrlineinlist:
filepath=os.path.join(dirJinc)
ifos.path.isdir(filepalh):#如果filepalh是目錄,則再列出該目錄下的所有文件
myfile.writeC'+line+7/'+7n')
forliinos.listdir(filepath):
myfile.writeC'+li+7n*)
fielnum=fielnum+1
elifos.path:#如果filepalh是文件,直接列出文件名
myfile.writeC'+line+7n')
fielnum=fielnum+1
inyllle.write('allthefilenumis'+str(fielnum))
dir=raw_input('pleaseinputthepath:')
myfile=opcn('list.txt','w')
4.答:
用Python創(chuàng)建一個(gè)新文件,內(nèi)容是從0到9的整數(shù),每個(gè)數(shù)字占一行:
?>f=open('f.txt','w')#r只讀,w可寫,a追加
?>fbriinrange(0,10):f.wrile(str(i)+'\n')
?>f.close()
文件內(nèi)容追加,從()到9的1()個(gè)隨機(jī)整數(shù):
?>importrandom
?>f=open('f.lxt','a')
?>foriinninge(0,10):f.write(str(random.randint(0,9)))
>?f.write('\ir)
?>f.close()
文件內(nèi)容追加,從0到9的隨機(jī)整數(shù),10個(gè)數(shù)字一行,共1()行:
?>importrandom
?>f=open('f.lxt','a')
?>foriinrange(0,10):
...foriinrange(0,10):f.write(str(random.randint((X9)))
...f.write('\n,)
?>f.closeO
把標(biāo)準(zhǔn)輸出定向到文件:
?>importsys
?>sys.stdout=open('stdout.txt","w")
5.答:
#-*-coding:cp936
os.walk()
函數(shù)聲明:walk(top,topdown=Tnie,oncrror=Nonc)
1>參數(shù)top表示需要遍歷的目錄樹的路徑
2>參數(shù)topdown的默認(rèn)值是“True”,表示首先返回目錄樹下的文件,然后在遍歷目錄樹的子目
錄.Topdown的值為"False”時(shí),
則表示先遍歷目錄樹的子目錄,返回子目錄下的文件,最后返回根目錄下的文件
3>參數(shù)onerror的默認(rèn)值是“None”,表示忽略文件遍歷時(shí)產(chǎn)生的錯(cuò)誤.如果不為空,則提供一個(gè)自
定義函數(shù)提示錯(cuò)誤信息后繼續(xù)
遍歷或拋出異常中止遍歷
4>該函數(shù)返回?個(gè)元紐,該元組有3個(gè)元素,這3個(gè)元素分別表示每次遍歷的路徑名,目錄列
表和文件列表
在2.5版中新增加了一個(gè)叫partition的函數(shù),它可以做什么呢?舉一個(gè)小例子:
?>,http://w\vw.doncws.nct/limodou,.partition('://')
('http','://1,'/limodou')
?>'file:/a.htmr.partition(*:/f)
Cfile:/a.html',n,n)
從第一個(gè)例子可以看出,它用來根據(jù)指定的分隔符將字符串進(jìn)行分割,如果字符串包含指定的
分隔符,則返回-一個(gè)3元的tuple,
第一個(gè)為分隔符左邊的子串,第二個(gè)為分隔符本身,第三個(gè)為分隔符右邊的子串。第二個(gè)例子
說明,如果找不到指定的分隔符,
則返回仍然是一個(gè)3元的tuple,第一個(gè)為整個(gè)字符串,第二和第三個(gè)為空串
importos,sys
defremove_cmpty_dir(path):
print(path)
while(path[-ll=="\\"):
path=pathl:-l]
print(path)
a={)
forroot,dirs,filesinOs.walk(path,False):
iflen(files)==0:
afroot]=0
else:
forfileinfiles:#對(duì)文件列表進(jìn)行掃描
try:
fn=os.path.join(roo(,file)#將路徑名和文件名拼接起來
size=os.path.getsize(fn)#獲取文件名大小
ifsize!=0:
b=root
while(b!=path):
a[b]=1
b=b.rpartition(u\\")[0]#保存上一級(jí)目錄名
a[path]=1
else:
try:
os.remove(fn)#刪除文件名為空的文件
a[root]=0
except(WindowsError):
b=root
while(b!=path):
a[b]=1
b=b.rpartitionC,W')(0]
a[path]=I
exceptWindowsError:
b=root
while(b!=path):
a[b]=1
b=b.rparti(ion("\\")[0]
a[path]=1
ifa[root]:
break;
empty_dirs=[]
fori,jina.itcritcms():
ifj==0:
print(i)
empty_dirs.insert(O,i)
dela
empty_dirs.sort(reverse=True)
fbriinempty_dirs:
try:
os.rmdir(i)#刪除.錄
print("%s刪掉了!!"%(i))
except(WindowsError):
prinl("%s刪不掉!廠%⑴)
if_name_=="_main_":
remove_empty_dirCf:\\b')
第11章習(xí)題參考答案
1.答:參考程序如下。
importthreading
s=[]
#線程執(zhí)行的方法,
deffuncl(p):
print(p)
#創(chuàng)建線程的函數(shù)
deffunc2(info):
foriinrange(len(info)):
#創(chuàng)建線程
th=thrcading.Thrcad(targct=func1,args=[info[iJJ)
#啟動(dòng)線程
th.start()
#將創(chuàng)建的線程裝入數(shù)組
s.append(lh)
foriinrange(len(infb)):
#線程等待,等待指定進(jìn)程執(zhí)行完畢在執(zhí)行后面的代碼
s[i].join()
print('theend')
#列表的對(duì)象
info=[1,2,3,4,55,23引
func2(info)
2.答:
(1)參考程序如下。
importthreading
importurllib.requesl
importre
defget_url(url):
res=urllib.rcqucst.urlopcn(url).rcad()
data=res.decodeCutf-S')
re_title=
title=re.findall(re_title,data)
print(title)
print(data)
urlinfb=「Yhtlp:〃wVhtlp:〃w']
1=[]
foriinrange(O.len(urlinfb)):
th=threading.Thrcad(targct=gct_url,args=[urlinfoli]J)
th.stari()
l.append(th)
foriin1:
i.join()
(2)參考程序如下。
importthreading
importurllib.request
defgct_url(url):
print(url)
code=urllib.request.urlopen(url).code
print(code)
urlinfo=「http:〃','http:〃','hnp:〃']
i=[]
foriinrange(O,lcn(urlinfo)):
th=threading.Thread(target=gel_url,args=[urlinfb[i]])
th.start()
l.appcnd(th)
foriin1:
i.join。
3.答:
Python3有一個(gè)叫做timeit的完美計(jì)時(shí)工具可以測(cè)量python代碼的運(yùn)行時(shí)間c
timeit模塊定義了接受兩個(gè)參數(shù)的Timer類。兩個(gè)參數(shù)都是字符串。第一個(gè)參數(shù)是要計(jì)
時(shí)的語(yǔ)句或者函數(shù)。傳遞給Timer的第二個(gè)參數(shù)是為第一個(gè)參數(shù)語(yǔ)句構(gòu)建環(huán)境的導(dǎo)入語(yǔ)句。
從內(nèi)部講,limeit構(gòu)建起一個(gè)獨(dú)立的虛擬環(huán)境,手工地執(zhí)行建立語(yǔ)句,然后手工地編譯和
執(zhí)行被計(jì)時(shí)語(yǔ)句。
一旦有了Timer對(duì)象,最簡(jiǎn)單的事就是調(diào)用time"),它接受一個(gè)參數(shù)為每個(gè)測(cè)試中調(diào)
用被計(jì)時(shí)語(yǔ)句的次數(shù),默認(rèn)為一百萬次;返回所耗費(fèi)的秒數(shù)。
Timer對(duì)象的另一個(gè)主要方法是repeat。,它接受兩個(gè)可選參數(shù)。第一個(gè)參數(shù)是重復(fù)整
個(gè)測(cè)試的次數(shù),第二個(gè)參數(shù)是每個(gè)測(cè)試中調(diào)用被計(jì)時(shí)語(yǔ)句的次數(shù)。兩個(gè)參數(shù)都是可選的,
它們的默認(rèn)值分別是3和l(XX)()000repeat()方法返回以秒記錄的每個(gè)測(cè)試循環(huán)的耗時(shí)列表。
Python有一個(gè)方便的min函數(shù)可以把輸入的列表返回成最小值,如:
min(t.repeat(3,1000000))
可以在命令行使用timeit模塊來測(cè)試一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025航空客運(yùn)行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資潛力評(píng)估規(guī)劃研究報(bào)告
- 五年級(jí)音樂課教案教學(xué)方案
- 2025航空制造行業(yè)市場(chǎng)供需關(guān)系分析及產(chǎn)業(yè)投資評(píng)估發(fā)展規(guī)劃設(shè)計(jì)文書
- 2025航空供應(yīng)鏈管理及市場(chǎng)競(jìng)爭(zhēng)格局分析評(píng)估規(guī)劃分析研究報(bào)告
- 2025航海漁業(yè)市場(chǎng)需求深度剖析及產(chǎn)業(yè)升級(jí)與市場(chǎng)規(guī)模預(yù)測(cè)研究報(bào)告
- 2025航天遙感數(shù)據(jù)加工技術(shù)市場(chǎng)現(xiàn)狀分析及企業(yè)投資價(jià)值評(píng)估研究報(bào)告
- 完美版小學(xué)英語(yǔ)模板教案
- 滑膜關(guān)節(jié)相關(guān)醫(yī)學(xué)知識(shí)宣講培訓(xùn)教案
- 新四年級(jí)語(yǔ)文設(shè)計(jì)教案
- 七年級(jí)語(yǔ)文下《偉大的悲劇》教案
- 地方組織法講解課件
- 第四單元寫作《語(yǔ)言要連貫》課件 2025-2026學(xué)年統(tǒng)編版語(yǔ)文八年級(jí)上冊(cè)
- 發(fā)現(xiàn)自己的閃光點(diǎn)課件
- 2025建筑節(jié)能工程監(jiān)理實(shí)施細(xì)則
- 2025年全國(guó)高校輔導(dǎo)員素質(zhì)能力大賽基礎(chǔ)知識(shí)測(cè)試題(附答案)
- 2025中國(guó)消費(fèi)電子行業(yè)創(chuàng)新方向及消費(fèi)趨勢(shì)報(bào)告
- 發(fā)電廠汽輪機(jī)副操崗位考試試卷及答案
- 營(yíng)銷活動(dòng)成本預(yù)算管理2025年可行性研究報(bào)告
- 雨課堂在線學(xué)堂《臨床中成藥應(yīng)用》作業(yè)單元考核答案
- 2025年皮膚科年度工作總結(jié)報(bào)告
- 2025年鄭州鐵路職業(yè)技術(shù)學(xué)院教師招聘考試試題及答案
評(píng)論
0/150
提交評(píng)論