Python編程習(xí)題題庫(kù)試卷及答案_第1頁(yè)
Python編程習(xí)題題庫(kù)試卷及答案_第2頁(yè)
Python編程習(xí)題題庫(kù)試卷及答案_第3頁(yè)
Python編程習(xí)題題庫(kù)試卷及答案_第4頁(yè)
Python編程習(xí)題題庫(kù)試卷及答案_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論