版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章Python簡(jiǎn)介
1.HelloWorld程序
編寫一個(gè)HelloWorld程序文件hello.py,并在命令行窗口中運(yùn)行該程序。
參考代碼:
#hello.pyHelloWorld
print("HelloWorld!")
2.交談程序
編寫一個(gè)交談程序文件talk.py,運(yùn)行時(shí)先輸出"請(qǐng)問您貴姓?",并在用戶輸入某姓氏
之后輸出"您好,某同學(xué)!”。
參考代碼:
#Idlk.py交談程序
name=input("請(qǐng)問您貴姓?")
print(f"您好,{name}同學(xué)!")
3.實(shí)踐:從鏡像站安裝Python官方發(fā)行版
在大陸訪問Python官方網(wǎng)站地速度較慢,因此推薦從國(guó)內(nèi)鏡像站下載Python官
在華為鏡像站首頁(yè)搜索Python,即可打開Python官方發(fā)行版安裝包目錄列表
4.實(shí)踐:在Android設(shè)備上安裝Python開發(fā)環(huán)境
要使用Android設(shè)備學(xué)習(xí)Python編程,可從下列站點(diǎn)獲取Pydroid3:
ApkDownloadforAndroid
下載apk文件在Andoroid設(shè)備上安裝App即可使用
5.實(shí)踐:Python版掃雷游戲
在GitHub下載Python版掃雷游戲此程序基于Python標(biāo)準(zhǔn)庫(kù)地圖形用戶界面工具包
tkinter,解壓縮后即可在Python官方發(fā)行版環(huán)境下直接運(yùn)行,包含一個(gè)Python程序文
件與一些圖片文件,共255行代碼。
第2章對(duì)象與類型
1.基本運(yùn)算
編寫一個(gè)程序,運(yùn)行時(shí)輸入以英文逗號(hào)分隔地兩個(gè)數(shù)值輸出兩數(shù)之與,差,積,商。
參考代碼:
#operate.py基本運(yùn)算
a,b=eval(input(“輸入以英文逗號(hào)分隔地兩個(gè)數(shù)值:”))
print("兩數(shù)之與為二a+b)
print("兩數(shù)之差為“,a-b)
print("兩數(shù)之積為“,a*b)
print("兩數(shù)之商為",a/b)
2.單詞反轉(zhuǎn)
編寫一個(gè)程序,將用戶輸入地英文短句中每個(gè)單詞在句子中地位置進(jìn)行反轉(zhuǎn)后輸出(單
詞間均以空格分隔,不必考慮標(biāo)點(diǎn)符號(hào)問題)。
示例輸入:
nothinggoldcanstay
示例輸出:
staycangoldnothing
參考代碼:
#word_rev.py單詞反轉(zhuǎn)
s=input()
res="".join(i>.split()[::-1])
print(res)
3.輸出田字格
編寫一個(gè)程序,輸出由字符構(gòu)成地田字格,如下圖所示:
參考代碼:
#cell.py輸出田字格
s=("+"+*4)*2+"+\n"
s2=("|"+""*4)*2+"|\n"
print((s+s2*4)*2+s)
5.生成字符串
編寫生成字符串地程序,運(yùn)行時(shí)輸入一段英文文本,輸出由該段文本開頭兩個(gè)與末尾兩個(gè)
字符組成地新字符串。如果輸入地文本長(zhǎng)度小于2,則返回Emptystring
示例輸入1:
w3resource
示例輸出1:
w3ce
示例輸入2:
w3
示例輸出2:
w3w3
參考代碼:
#genstr.py生成字符串
s=input()
res=s[:2]+s[-2:]
iflen(s)<2:res="Emptystring"
print(res)
第3章模塊與庫(kù)
1.抽簽程序
編寫簡(jiǎn)單地抽簽程序,運(yùn)行時(shí)輸入一個(gè)整數(shù)n,隨機(jī)輸出一個(gè)1到n范圍內(nèi)地整數(shù)。
示例愉入:
7
示例輸出:
3
參考代碼:
#lottery.py抽簽程序
fromrandomimportrandint
n=int(input())
print(randint(l,n))
2.笑臉圖案
編寫turtle繪圖程序,通過簡(jiǎn)單地幾何形狀組合出一張笑臉,參考下圖:
參考代碼:
#smiley.py笑臉圖案
importturtleastt
tt.width(2)
tt.penup()#臉地輪廓
tt.goto(0,-150)
tt,pendown()
tt.circle(150)
tt.penup()#右眼
tt.goto(50,50)
tt.pendown()
tt.circle(10)
tt.penup()#左眼
tt.goto(-50,50)
tt.pendown()
tt.circle(10)
tt.penup()#右側(cè)弧線
tt.goto(0,-90)
tt.pendown()
tt.circle(80460)
tt.penup()#左側(cè)弧線
tt.setheading(180)#設(shè)置海龜朝向左方
tt.goto(0,-90)
tt.pendown()
tt.circle(-80,60)
tt.hideturtle()
tt.done()
3.實(shí)踐:Python地?cái)?shù)字舍入規(guī)則
對(duì)于Python地?cái)?shù)字舍入規(guī)則"四舍六入五成雙",可以查閱官方文檔標(biāo)準(zhǔn)庫(kù)參考頁(yè)對(duì)
round函數(shù)地說明來了解它地準(zhǔn)確含義
這個(gè)規(guī)則地實(shí)質(zhì)就是在上下兩邊選擇一個(gè)更接近地值,例如:
>>>round(2.49)
2
>>>round(2.51)
3
這個(gè)規(guī)則中最關(guān)鍵地一點(diǎn)是當(dāng)要舍去地值為5時(shí),與上下兩邊地位值恰好同樣接近,那么
將會(huì)選擇舍入到位值為偶數(shù)地一方,這樣向上舍入與向下舍入地幾率各為50%,處理大
量數(shù)據(jù)時(shí)就不會(huì)像四舍五入規(guī)則那樣產(chǎn)生累積地舍入誤差,因而更為合理:
>>>round(2.5)
2
>>>round(3.5)
4
>>>round(l.S)
2
還有一種看起來很怪異地情況,當(dāng)0.15保留1位小數(shù)E寸將舍入到0.1而不是0.2:
>>>round(0.15,1)
0.1
其中地原因在于浮點(diǎn)數(shù)所固有地精度限制,下面是使用Decimal類型查看浮點(diǎn)數(shù)地內(nèi)部
實(shí)際值,可以看到0.15地實(shí)際值略小于顯示值,而0.1與0.2地實(shí)際值略大于對(duì)應(yīng)顯示
值,所以0.15其實(shí)就是舍入到了更接近地值而已:
>>>fromdecimalimportDecimalasD
>>>D(0.15)
Decimal('0.1499999999999999944488848768742172978818416595458984375')
>>>D(0.1)
Decimal('0.1000000000000000055511151231257827021181583404541015625')
>>>D(0.2)
DecimalC0.200000000000000011102230246251555404236316680908203125')
當(dāng)向Decimal類型構(gòu)造器傳入字符串"0.15”來精確地表示0.15,保留1位小數(shù)時(shí)就會(huì)
止確地舍入到。.2:
>>>round(D("0.15"),1)
Decimal('0.2')
4.實(shí)踐:從鏡像站安裝Anaconda發(fā)行版
5.求正弦值
編寫求正弦值地程序,輸入角度n,輸出其正弦sin(n),至多保留2位小數(shù)
參考代碼:
#getsin.py求正弦值
importmath
n=float(input())
r=math.radians(n)
res=round(math.sin(r),2)
print(res)
資源鏈接
第4章流程控制
1.考拉茲序列
編寫程序打印考拉茲序列,輸入任意一個(gè)正整數(shù),如果為奇數(shù)則將其乘3加L如果為偶數(shù)
則將其除以2,輸出結(jié)果值并再次對(duì)結(jié)果值執(zhí)行上述操作,如此循環(huán)直到結(jié)果值為1時(shí)結(jié)
束。
示例輸入:
3
示例輸出:
105168421
參考代碼:
#collatz.py考拉茲序列
n=int(input())
whilen>1:
ifn%2==0:
print(n//2,end="")
n=n//2
else:
print(n*3+1,end="")
n=n*3+1
2.方形螺旋線圖案
編寫turtle繪圖程序,生成一個(gè)方形螺旋線圖案,參考下圖:
參考代碼:
#square_spiral.pyw方形螺旋線
importturtleastt
tt.Turtlescreen._RUNNING=True
line=10
inc=5
whileline<=300:
tt.forward(line)
tt?right(90)
line+=inc
tt.done()
3.實(shí)踐:蒙特卡羅方法計(jì)算圓周率
使用蒙特卡羅方法計(jì)算圓周率:半徑為1地圓面積即圓周率pi,在單位正方形內(nèi)隨機(jī)生
成大量地點(diǎn),則與原點(diǎn)距離小于于1地點(diǎn)數(shù)hits與總點(diǎn)數(shù)darts之比將趨向于pi/4,因
此pi=hits/darts*4
參考代碼:
#monte_carlo_pi.py#蒙特卡羅方法計(jì)算圓周率
fromtimeimporttime
fromrandomimportrandom
frommathimportsqrt
darts=1_000_000#向單位正方形擲出一百萬支飛鏢
hits=0#命中距離原點(diǎn)小于于1區(qū)域地次數(shù)
t=time()
foriinrange(l,darts+1):
x,y=random(),random()
dist=sqrt(x*x+y*y)
ifdist<=1.0:
hits+=1
pi=hits/darts*4
print(f”運(yùn)行時(shí)間:{time。-t:.2f}秒”)
print"“圓周率值:{pi}")
4.實(shí)踐:使用循環(huán)結(jié)構(gòu)繪制任意圖案
使用turtle模塊自行編寫繪制任意形狀與顏色圖案地程序,必須使用循環(huán)結(jié)構(gòu)。
參考代碼:
#flower.py畫一朵小紅花
importturtleastt
tt?color("red")#花瓣地顏色
tt.begin_fill()
#初始角度根據(jù)一個(gè)尖角朝下地五邊形來確定
tt.right(54)
for_inrange(5):#畫出五片花瓣
tt.circlcCSO,180)
tt.right(108)
tt.end_fill()
tt.penup()
tt.left(144)#海龜朝上跳到適當(dāng)位置
tt.forward(30)
tt.right(90)
tt,pendown()
tt.color("yellow")#花蕊地顏色
tt.begin_fill()
tt.circle(50)#畫出圓形地花蕊
tt.end_fill()
tt.hideturtle()
tt.done()
tt.bye()
5.區(qū)間求閏年個(gè)數(shù)
編寫區(qū)間求閏年個(gè)數(shù)程序,運(yùn)行時(shí)輸入以逗號(hào)分隔地兩個(gè)年份,輸出該區(qū)間內(nèi)(包含這兩
個(gè)年份)總共有多少個(gè)閏年。閏年地判斷條件:能被4整除但不能但100整除,或者能
被400整除。
參考代碼:
#leapyears.py區(qū)間求閏年個(gè)數(shù)
x,y=eval(input())
count=0
■Foryinrange(x,y+1):
ify%4==0andy%1001=0ory%400==0:
count+=1
print(count)
資源鏈接
第5章自定義函數(shù)
1.平均值函數(shù)
自定義一個(gè)平均值函數(shù)average,可以傳入任意多個(gè)數(shù)值參數(shù),返回它們地平均值(保留
至多兩位小數(shù)),并在程序中使用該函數(shù)計(jì)算用戶輸入地多個(gè)數(shù)值地平均值。
示例輸入:
5,8,16,5.8,20
示例輸出:
10.96
參考代碼:
#average.py平均值函數(shù)
defaverage(*args):
result=sum(args)/len(args)
returnround(result,2)
if_name_=="_main_":
num=eval(input())
print(average(*num))
2.六角星函數(shù)
自定義一個(gè)繪制六角星函數(shù)star6p,以指定位置為中心繪制指定大小地六角星,并使用該
函數(shù)并排繪制三顆六角星中間一顆較大,旁邊兩顆較小。參考下圖:
A
V
參考代碼:
#draw_star6p.py繪制六角星函數(shù)
importturtleastt
defstar6P(x,y,size=30):
心”六角星函數(shù),x,y為中心點(diǎn),size為邊長(zhǎng)”皿
tt.setpos(x-size,y)#起始點(diǎn)橫坐標(biāo)為x?size
tt.left(120)
LI.pendown()
for_inrange(6):#開始畫角星
tt.forward(size)
tt.right(120)
tt.forward(size)
tt.left(60)
tt.penup()
tt.setheading(0)#海龜朝向重置為0度
deftest():
tt.setup(width=720,height=480,startx=NoneJstarty=None)
tt.hideturtle()
tt.speed(0)
tt.width(2)
tt.penup()
star6P(-200,0)#畫三顆六角星
star6P⑶0,60)
star6P(200,0)
tt.done()
tt.bye()
if_name_=="_main_":
test()
3.輸出任意田字格
自定義函數(shù)cells(n),輸出由字符構(gòu)成地n*n田字格:
參考代碼:
#cells.py輸出任意田字格
defcells(n=2):
s=("+"+*4)*n+”+\n”
s2=("|"+""*4)*n+"|\n"
print((s+s2*4)*n+s)
if_name_=="_main_":
cells(4)
4.科赫曲線函數(shù)
自定義繪制大小為size階數(shù)為n地科赫曲線地函數(shù)koch(sizezn),并調(diào)用此函數(shù)生成
"科赫雪花"圖案。
參考代碼:
#koch.py定義科赫曲線函數(shù)并繪制“科赫雪花”
importturtleastt
defkoch(size,n):#科赫曲線函數(shù)
ifn==0:
tt.forward(size)
else:
foranglein[0,60,-120,60]:
tt.left(angle)
koch(size/3,n?1)
defmain():#繪制科赫雪花地主函數(shù)
ll.speed(0)
tt?color("blue")
tt.penup()
tt.goto(-300,200)
tt.pendown()
tt.pensize(2)
foriinrange(3):
koch(600,4)
tt.right(120)
tt.hideturtle()
tt.done()
tt.bye()
if_name_=="_main_":
main()
5.五星紅旗函數(shù)
編寫程序定義指定中心點(diǎn)坐標(biāo)與外接圓半徑繪制五角星地函數(shù),并繪制五星紅旗。
參考代碼:
#flag_prc.py定義繪制五角星函數(shù),并繪制五星紅旗
importmath
importturtleastt
tt.Turtlescreen._RUNNING=True
defstar5P(x=0,y=0,size=100,angle=0jcolor="red"):
繪制五角星
x:中心地橫坐標(biāo)
y:中心地縱坐標(biāo)
size:大小,指外接圓地半徑
angle:傾角,指以中心為軸旋轉(zhuǎn)地角度
color:顏色
IIIIIt
tt.color(color)
tt.penup()
tt.setheading(0)
start=math.radians(72)
startx=x-size*math.sin(start+math.radians(angle))
starty=y+size*math.cos(start+math.radians(angle))
edge=2*size*math.sin(start)
tt.goto(startxstarty)
tt.left(angle)
tt.pendown()
tt.begin_fill()
for_inrange(5):
tt.forward(edge)
tt.right(144)
tt.end_fill()
defflag_prc(width=600):
心”繪制五星紅旗
width:寬度
unit=width/30
tt.color("red")
tt.begin_fill()
tt.penup()
tt.goto(-15*unit,10*unit)
tt.pendown()
for_inrange(2):
tt.forward(30*unit)
tt.right(90)
tt.forward(20*unit)
tt.right(90)
tt.end_fill()
al=math.degrees(math.atan(3/5))+18
a2=math.degrees(math.atari(1/7))+18
a3=math.degrees(-math.atan(2/7))+18
a4=math.degrees(-math.atan(4/5))+18
star5p(-10*unit,5*unit,3*unit,0,"yellow")
star5p(-5*unit,8*unit,unit,al,"yellow")
star5p(-3*unit,6*unit,unit,a2,"yellow")
star5P(-3unit,3*unit,unit,a3,"yellow")
star5p(-5*unit,unitunitja4,"yellow")
if_name_=="_main_":
tt.speed(0)
flag_prc(600)
tt.hideturtle()
tt.done()
資源鏈接
第6章序列類型
1.打印并列地條目
編寫程序打印并列地條目,將用戶輸入地以空格分隔地多個(gè)條目以頓號(hào)并列地形式打印
出來。
示例輸入:
韓國(guó)日本美國(guó)
示例輸出:
韓國(guó),日本美國(guó)與
參考代碼:
#allitems.py打印并列地條目
defshowitems(items):
result="/'.join(items[:-l])
result+="與"+items[-l]
returnresult
if_name_=="_main_":
items=input().split()
print(showitems:items))
2.總成績(jī)排序
給定一個(gè)學(xué)生成績(jī)列表grades,其中每一項(xiàng)為學(xué)號(hào)與三門課程成績(jī)組成地四元組:
grades=[
("202001",85,92,73),
("202002",68,70,53),
("202003",72,58,77),
("202004",95,89,91),
("202005",65,73,89)]
要求按總成績(jī)從高到低排序打印輸出,如下所示。
202004958991275
202001859273250
202005657389227
202003725877207
202002687053191
參考代碼:
#grades.py總成績(jī)排序
grades=[
("202001",85,92,73),
("202002",68,70,53),
("202003",72,58,77),
(“202004”,95,89,
(“202005”,65,73,89)]
defmain():
result=[]
forgradeingrades:
newgrade=list(grade)
total=sum[grade[l:])
newgrade.append(total)
result.append(newgrade)
result.sort(key=lambdai:i[-1],reverse=True)
foriinresult:
print(*i)
if_name_=="_main_":
main()
3.驗(yàn)證陷阱數(shù)495
任意輸入一個(gè)三位數(shù)(各位上地?cái)?shù)字不同),然后用其各位上地?cái)?shù)字組成一個(gè)最大數(shù)與
最小數(shù),并用最大數(shù)減去最小數(shù)彳導(dǎo)到一個(gè)新地三位數(shù),重復(fù)上面地過程,最終數(shù)字必定會(huì)
停在495這個(gè)“陷阱數(shù)"上。請(qǐng)編程驗(yàn)證這個(gè)命題。
參考代碼:
#trap495.py驗(yàn)證陷阱數(shù)495
defmain():
s=input(“輸入一個(gè)三位數(shù)(各位上地?cái)?shù)字不同):”)
whiles!="495":
si,s2,s3=sorted(list(s))
inidx=±nl(s3+s2+si)
imin=int(s2+si+s3ifsi=="9"elsesi+s2+s3)
s=str(imax-imin)
print(f"{imax}-{imin}={s}")
if_name_=="_main_":
main()
4.實(shí)踐:Python數(shù)組類型
Python標(biāo)準(zhǔn)庫(kù)array模塊提供了高效地?cái)?shù)值數(shù)組類型array。數(shù)組屬于序列類型,其行
為與列表非常相似,不同之處在于其中存儲(chǔ)地對(duì)象類型是受限地。
例如以下代碼將構(gòu)造一個(gè)整型數(shù)組a:
fromarrayimportarray
a=array(“i”,[1,2,3,4,5])
數(shù)組a添加一個(gè)列表中地元素:
a.fromlist([7,8,9])
數(shù)組a轉(zhuǎn)換為列表:
a.tolist()
5.實(shí)踐:計(jì)算基本統(tǒng)計(jì)值
編寫計(jì)算基本統(tǒng)計(jì)值地程序,輸入一組數(shù)據(jù),輸出基本統(tǒng)計(jì)值
?平均值:對(duì)所有項(xiàng)求與,再除以總項(xiàng)數(shù)
?中位數(shù):各項(xiàng)值排序后,對(duì)奇數(shù)個(gè)取居中地?cái)?shù),對(duì)偶數(shù)個(gè)則取居中兩數(shù)地平均值
?標(biāo)準(zhǔn)差:對(duì)各項(xiàng)值與平均值地差地平方求與,再除以總項(xiàng)數(shù)減一,再求平方根
示例代碼:
#輸入多個(gè)數(shù)字放入列表,求平均值,中位數(shù),標(biāo)準(zhǔn)差
frommathimportsqrt
defmean(numbers):
“小平均值函數(shù)”,,,,
returnsum(numbers)/len(numbers)
defmedian(numbers):
“““中位數(shù)函數(shù)”小
numbers=sorted(numbers)
size=len(numbers)
ifsize%2==0:
return(numbers[size//2-l]+numbers[size//2])/2
else:
returnnumbers[size//2]
defstdev(numbers):
標(biāo)準(zhǔn)差函數(shù)
dev=0.0
m=mean(numbers)
forninnumbers:
dev+=(n-m)**2
returnsqrt(dev/(len(numbers)-1))
ifnamemain
print("請(qǐng)輸入數(shù)字,按回車退出:*,)
numbers=[]
whileTrue:
num=input])
ifnum:
numbers.append(eval(num))
else:
break
print(f”數(shù)值列表:{numbers}")
print(f”平均值:{mean(numbers)}")
print(f”中位數(shù):{median(numbers)}")
print(f”標(biāo)準(zhǔn)差:{stdev(numbers))")
資源鏈接
第7章映射與集合
1.條目計(jì)數(shù)
編寫一個(gè)條目計(jì)數(shù)程序,用戶輸入以空格分隔地條目,其中可能存在重復(fù),輸出條目名稱與
對(duì)應(yīng)數(shù)量,按數(shù)量從多到少排序。
示例輸入:
牛牛雞豬馬雞羊羊馬羊牛羊豬
示例輸出:
羊:4
牛:3
雞:2
豬:2
馬:2
(變化形式)輸入方式改為多次輸入,以回車結(jié)束;輸出方式改為單行輸出,以空格分隔
參考代碼:
#items.py條目計(jì)數(shù)
defitemscount(items):
d={)
foriinitems:
d.setdefault(i,0)
d[i]+=1
result=sorted;d.items(),key=lambdai:i[l],reverse=True)
fork,vinresult:
print(f-{k}:{v}")
”小單行輸出方式地示例代碼,最后一個(gè)條目要單獨(dú)處理
fork,vinresult[:-1]:
print(f"{k}{v}\end="")
k,v=result[-l]
print(f"{k}{v}")
IIIIII
#單行輸出方式地簡(jiǎn)潔寫法
#print(*[f"{k}{v}"fork,vinresult])
if_name_=="_main_":
items=input().split()
”小多次輸入方式地示例代碼
items=[]
whileTrue:
s=input()
ifs:
items.append(s)
else:
break
IIIIII
itemscount(items)
2.兩個(gè)骰子地組合
編寫一個(gè)程序輸出同時(shí)擲出兩個(gè)骰子所有可能地結(jié)果組合(例如1,2與2,1為同一組
合,不應(yīng)重復(fù)輸出)。
輸出應(yīng)如下所示。
1+1,1+2,1+3,...
參考代碼:
#twodices.py兩個(gè)骰子地組合
defmain():
result=[]
foriinrange(l,7):
forjinrange(i,7):
result.append((i,j))
fordl,d2inresult[:-1]:
print(f-{dl}+{d2}"Jend=",")
dl,d2=result[-l]
print(f-{dl}+{d2}")
if_name_=="_main_":
main()
3.兩個(gè)字典地比對(duì)
給定兩個(gè)字典dl與d2,請(qǐng)輸出一個(gè)新地字典,其元素是不同時(shí)存在于字典dl與d2地
兀素。
dl={
'brazil,:‘巴西1Htaly':'意大利:'egypt':'埃與
'Canada':,加拿大:'china':一,'mexico,:,墨西哥‘}
d2={
'cuba':'古巴','brazil':'巴西'italy':"意大利
,egypt':'埃與','Canada':'加拿大'china':")
參考代碼:
#dicjp.py兩個(gè)字典地比對(duì)
dl={'brazil':‘巴西'italyt'意大利[Fgyptt'埃與I
,canadat,加拿大,,'china':",'mexico':,墨西哥’}
d2={'cuba':‘古巴'brazil':‘巴西','italy':'意大利',
'egypt':‘埃與'Canada':‘加拿大‘,'china':"}
defmain():
si=set(dl.keys())
s2=set(d2.keys())
s=siAs2
dl.update(d2)
d={k:vfork,vindl.items()ifkins}
print(d)
if_name_=="_main_":
main()
4.實(shí)踐:英文詞頻統(tǒng)計(jì)
對(duì)"ZenofPython”中各個(gè)單詞地出現(xiàn)次數(shù)進(jìn)行統(tǒng)計(jì)并降序輸出。
參考代碼:
#word_count.py英文詞頻統(tǒng)計(jì)
importsubprocessassp
defmain():
#在子進(jìn)程中運(yùn)行this模塊
p=sp.Popen("python-mthis"shell=True>text=True,
stdout=sp.PIPE)
d={)
text=p.stdout.read()#從子進(jìn)程地標(biāo)港輸出讀取文本
forcin#將標(biāo)點(diǎn)符號(hào)替換為空格
ifcintext:
text=text.replace(c,"")
forwordintext.lower().split():#將文本轉(zhuǎn)為小寫并拆分為單詞
d.setdefaultCword^0)
d[word]+=1
#根據(jù)頻度字典鍵值對(duì)視圖生成按值大小降序排列地二元組列表
result=sorted(d?items(),key=lambdai:i[lj,reverse=True)
fork,vinresult[:20]:#打印前2。項(xiàng)結(jié)果
print(f"{k:8}{v:>2}")
if_name_=="_main_":
main()
5.實(shí)踐:莫爾斯電碼轉(zhuǎn)換
編寫程序?qū)崿F(xiàn)莫爾斯電碼地轉(zhuǎn)換。莫爾斯電碼是一種早期地?cái)?shù)字化通信形式,編碼主要
由兩個(gè)字符表示:與,即短信號(hào)與長(zhǎng)信號(hào)。
參考代碼:
#morsecode.py莫爾斯電碼轉(zhuǎn)換
MORSE_CODE_DICT={
111
'A'??_1,RO????,
'C,_?_?'J'n='?'-''F'?''
'F'???_??,'GxJ'?**II?????')
),,
'I'??',■?___?J'IiNz??.'_?_?J
'L''M':'N':
1111一111
'O'1___>pr.??Jfx.?--?-,
'R''?,?,J'ST'?-'???',1?J
'U'??.」,V:'W:
11111
'X'????,?v1'??JJ7.?1??J
'1'?-___?'2'**___''3'??--'
11
'4'1_??C????.1.,
'7',--?'2'?'___?'9'??-___'
111111
'0',,???.............9.......................
1?1/1?1?1.???
11
,-*--?,/*---*-J\
defencrypt(message):#編碼:原文譯為電碼
cipher=''#電碼
forletterinmessage:
iflAttAr!='#根據(jù)字典鍵取值,字符間隔一個(gè)空格
cipher+=MORSE_CODE_DICT[letter]+''
else:#單詞間隔兩個(gè)空格
cipher+=''
returncipher
defdccrypt(mcssagc):#解碼:電碼譯回原文
message+=''
decipher=''#原文
citext=*'#單個(gè)字符地電碼
forletterinmessage:
if(letter!=''):
i=0#空格”數(shù)器
citext+=letter
else:
i+=1#新地字符
ifi==2:#新地單詞
decipher+=''
else:#根據(jù)字典值取鍵(反查)
decipher+=list(MORSE_CODE_DICT.keys())[
list(MORSE_CODE_DICT.values()).index(citext)]
citext=''
returndecipher
defmain():
message="ILOVEPYTHON"
result=encrypt(message.upper())
print(result)
message="...-..—???一..-.???—??,,
result=decrypt(message)
print(result)
if_name_=='_main_':
main()
資源鏈接
第8章文件與目錄
1.自定義函數(shù)統(tǒng)計(jì)
編寫一個(gè)自定義函數(shù)統(tǒng)讓程序:統(tǒng)計(jì)練習(xí)項(xiàng)目中所有程序文件中自定義函數(shù)地?cái)?shù)量
(即def語句使用次數(shù)),輸出頻度最高地前20個(gè)名掰。
參考代碼:
#allfunc.py自定義函數(shù)統(tǒng)計(jì)
importos
importre
root=
defmain():
pydir=os.path.dirname(os.path.abspath(_file_))
os.chdir(pydir)
funcdict={}
forfolder,subfolders,filesinos.wdlk(roGl):
forfileinfiles:
iffile.endswith((".py",".pyw")):
withopen(os.path.join(folder,file)encoding="utf-
8")asf:
forlineinf:
po=re.pile(r"def(\w+)")
fornameinpo.findall(line):
funcdict.setdefault(name,0)
funcdict[nameJ+=1
result=sorted[funcdict.items()key=lambdai:i[l],
reverse=True)
t=0
fork,vinresult[:20]:
print(f"{k:>15}{v:2}\end="")
ift%5==4:
print()
t+=1
if_name_=="_main_":
main()
2.壓縮備份程序
編寫一個(gè)壓縮備份程序backup.py:使用命令行參數(shù)指定目錄或文件,打包為zip歸檔
文件(zip文件名即指定地目錄或文件名)。例如輸入以下命令將會(huì)創(chuàng)建包含指定目錄
全部?jī)?nèi)容地歸檔文件D:\pyAbc.zip:
pythonbackup.pyD:\pyAbc
參考代碼:
#backup.py壓縮備份程序
importos
importsys
importzipfile
defzip(pdLhridrne):
心”壓縮一個(gè)目錄或文件
IIIIII
filelist=[]
ifos.path.isfile(pathname):
filelist.append(pathname)
else:
forroot,dirs,filesinos.walk(pathname):
fordirindirs:
filelist.append(os.path.join(root,dir))
fornameinfiles:
filelist.append(os.path.join(root,name))
zf=zipfile.ZipFile(pathname+".zip","w",
zipfile.zlib.DEFLATED)
dirname=os.path.dirname(pathname)
foriinfilelist:
arame=i[len(dirname):]
zf,write(i,arame)
zf.close()
if_name_=="_main_":
pathname=os.path.abspath(sys.argv[l])
zip(pathname)
3.實(shí)踐:根據(jù)CSV數(shù)據(jù)生成HTML表格
根據(jù)從CSV文件讀取地內(nèi)容來生成HTML表格
pany.csv:
公司名稱,成立年份,創(chuàng)始人,總部城市
華為,1987,任正非,深圳
騰訊,1998,馬化騰,深圳
阿里巴巴1999,馬云,杭州
百度,2000,李彥宏,北京
參考代碼(使用JupyterNotebook):
#打開文件讀取首行,拆分為字段名列表
f=open("pany.csv",encoding="utf-8")
head=f.readline()
#將首行拆分為字段名列表
head=head.rstrip("\n").split("/')
#根據(jù)字段名列表生成表頭地HTML代碼
html="<table
width="500'><tr><th>{}</th><th>{}</th><th>{}</th><th>{}</thx/tr>".f
ormat(*head)
#將其余行拆分為列表并生成對(duì)應(yīng)行地HTML代碼
forrowinf:
row=row.rstrip("\n").split("/')
html+=
"<tr><td>{}</td><td>{}</td><td>{}</td><td>{}</tdx/tr>".format(*row)
f.close()
html+="</table>"
#JupyterNotebook可以直接顯示HTML表格
fromIPython.displayimportHTML
HTML(html)
4.實(shí)踐:圖像處理庫(kù)Pillow
安裝第三方包pillow進(jìn)行圖像處理
參考代碼(使用JupyterNotebook):
使用圖像模塊Image
fromPILimportImage
img=Image.open("FlowerVase.png")#打開圖片文件
img#JupyterNotebook可直接顯示圖片
圖片生成縮略圖
imgx=img.copy()
imgx.thumbnail((200,200))
imgx
圖片旋轉(zhuǎn)180度
imgx.rotate(180)
圖片轉(zhuǎn)換為灰度模式
imgx.convert("L")
圖像加強(qiáng)模塊ImageEnhance:亮度加強(qiáng)
fromPILimportImageEnhance
ImageEnhance.Brightness(imgx).enhance(l.S)
對(duì)比度加強(qiáng)
ImageEnhance.Contrast(imgx).enhance(2)
圖像濾鏡模塊ImageFilter■:浮雕濾鏡
fromPILimportImageFilter
imgx.filter(ImageFilter.EMBOSS)
輪廓濾鏡
imgx.filter(ImageFilter.CONTOUR)
圖像繪圖模塊ImageDraw,圖像字體模塊ImageFont:圖片添加圖形與文本
fromPILimportImageDraw^ImageFont
draw=ImageDraw.Draw(imgx)
draw.rectangle((1,1,199,199),outline—red',width=2)
font=ImageFont.truetype("/usr/share/fonts/truetype/wqy/wqy-
microhei.ttc",18)
draw.text((50,:180),'祝您幸福平安’,font=font,fill='green')
imgx
圖片保存為指定格式地文件
imgx.save("imgx.jpg")
打開EPS格式地圖片文件
#系統(tǒng)需求安裝GhostScript來支持EPS格式,可以使用以下conda命令安裝
#condainstall-cconda-forgeghostscript
eps=Image.openCptree.eps")
eps
5.實(shí)踐:操作《三國(guó)演義》文本文件
使用"ThreeKingoms.txt"練習(xí)文本文件地讀寫操作,下載鏈接:
提取《三國(guó)演義》地所有回目保存為文本文件"三國(guó)演義回目.txt"
withopenCThreeKingdoms.txt",encoding="utf-8")asf:
withopen("三國(guó)演義回目國(guó)'目",encoding="utf-8")asf2:
forlineinf:
ifline.startswith(“第”):
f2.write(line)
提取《三國(guó)演義》地所有回目與各章回前100字保存為"三國(guó)演義摘要.txt"
withopen("ThreeKingdoms.txt",encoding="utf-8")asf:
withopen("三國(guó)演義摘要.txt","w",encoding="utf-8")asf2:
forlineinf:
ifline.startswith(“第”):
f2.write(line)
f2.write(f.readline()[:100]+..\n\n")
importjieba#第三方包“結(jié)巴"中文分詞
withopenCThreeKingdoms.txt",encoding="utf-8-sig")asf:
txt=f.read()
#jieba.cut(s):將文本s拆分為漢語詞地迭代器
print(list(jieba.cut(txt[:50])))#打印三國(guó)演義開頭文本地分詞結(jié)果
注意:以上代碼中指定地編碼格式utf-8-sig適用于Windows系統(tǒng)專屬地UTF-8文
本文件,它與標(biāo)準(zhǔn)UTF-8地唯一區(qū)別是在開頭有一個(gè)"字節(jié)順序標(biāo)記"(BOM),對(duì)
UTF-8+BOM地文本文件使用utf-8解碼時(shí)會(huì)在開頭顯示一個(gè)特殊Unicode字符
\ufeff,而使用utf-8-sig解碼時(shí)則會(huì)自動(dòng)去掉這個(gè)字符。相關(guān)說明見
統(tǒng)計(jì)出現(xiàn)次數(shù)排前十位地人名
excludes={#將需求排除地詞定義為集合
”將軍卻說”,“荊州”,”二人“,”不可、“不能'”如此“,”商議二
“如何“,“主公”,“左右“,”軍馬、”軍士丞相二“引兵;”次日二
”大喜“,”天下”,”東吳,”于是“,”今日'“不敢”
)
names={#將需求合并地稱呼定義為字典
“玄德”:“劉備,“先主":”劉備:“孔明”:“諸葛亮“,“諸葛丞相“:”諸葛
亮二
”孟德“:“曹操”,“曹丞相”:“曹操”,“云長(zhǎng)“:”關(guān)羽”,“關(guān)公“:”關(guān)羽”,
“翼德“:“張飛”,“子龍“:”趙云”,“奉先”:”呂布仲謀“:”孫權(quán)二
“公瑾“:“周瑜“,“仲達(dá)“:”司馬懿”
)
jieba.suggest.freq((“玄德“,"曰“),True)#定義新詞以避免出現(xiàn)分詞錯(cuò)誤
jieba.suggest_freq((”孔明、"曰“),True)
words=jieba.cut(txt)
counts={}
forwordinwords:
iflen(word)==1orwordinexcludes:#排除單字詞與非人名
continue
elifname:=names.get(word):#將稱呼轉(zhuǎn)為姓名
word=name
counts[word]=counts.get(word,0)+1#統(tǒng)計(jì)詞頻
result=sorted(counts.items()key=lambdai:i[l],reverse=True)
fork,vinresult[:10]:#輸出結(jié)果前1。位
print(f"{k}\t{v:>5}")
濱源鏈接
第9章圖形用戶界面
1.貸款計(jì)算器
使用tkinter編寫一個(gè)貸款計(jì)算器程序:輸入貸款總部年利率與還款年限,點(diǎn)擊"開始
計(jì)算"按鈕即顯示每月還款額與還款總額。參考下圖他效果:
參考代碼:
"""loancalc.pyw貸款計(jì)算器
貸款總額3月利率i=年利率1/12,還款期數(shù)廿還款年限N*12
月還款額P=a*i*(1+i)**n/((1+i)**n-1)
IIIIII
importtkinterastk
defmain():
defcalc():
amount=float(amountVar.get())#貸款總額
iMonth=float(iYearVar.get())
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 凈水器出租協(xié)議書
- 出店入股合同范本
- 創(chuàng)作合作合同范本
- 別墅報(bào)價(jià)合同范本
- 劇場(chǎng)租賃合同協(xié)議
- 辦公區(qū)終止協(xié)議書
- 辦學(xué)合作合同范本
- 加山改梁合同范本
- 采購(gòu)鍋爐合同范本
- 南明與清朝協(xié)議書
- 供應(yīng)鏈管理在制造業(yè)供應(yīng)鏈協(xié)同中的創(chuàng)新與實(shí)踐報(bào)告
- 胎膜早破的診斷與處理指南
- 2025年藥店崗前培訓(xùn)試題(含答案)
- 貴州國(guó)企招聘:2025貴州涼都能源有限責(zé)任公司招聘10人備考題庫(kù)含答案詳解(綜合題)
- 被壓迫者的教育學(xué)
- 污水池內(nèi)壁防腐作業(yè)施工方案
- xx公司混凝土質(zhì)量控制培訓(xùn)課件-完整版
- 2025年紀(jì)檢監(jiān)察知識(shí)試題庫(kù)(含答案)
- CJT 288-2017 預(yù)制雙層不銹鋼煙道及煙囪
- 小麥病蟲害識(shí)別及“一噴三防”技術(shù)課件
- 2023第九屆希望杯初賽六年級(jí)(含解析)
評(píng)論
0/150
提交評(píng)論