Python编程习题题库试卷及答案_第1页
Python编程习题题库试卷及答案_第2页
Python编程习题题库试卷及答案_第3页
Python编程习题题库试卷及答案_第4页
Python编程习题题库试卷及答案_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章Python简介

1.HelloWorld程序

编写一个HelloWorld程序文件hello.py,并在命令行窗口中运行该程序。

参考代码:

#hello.pyHelloWorld

print("HelloWorld!")

2.交谈程序

编写一个交谈程序文件talk.py,运行时先输出"请问您贵姓?",并在用户输入某姓氏

之后输出"您好,某同学!”。

参考代码:

#Idlk.py交谈程序

name=input("请问您贵姓?")

print(f"您好,{name}同学!")

3.实践:从镜像站安装Python官方发行版

在大陆访问Python官方网站地速度较慢,因此推荐从国内镜像站下载Python官

在华为镜像站首页搜索Python,即可打开Python官方发行版安装包目录列表

4.实践:在Android设备上安装Python开发环境

要使用Android设备学习Python编程,可从下列站点获取Pydroid3:

ApkDownloadforAndroid

下载apk文件在Andoroid设备上安装App即可使用

5.实践:Python版扫雷游戏

在GitHub下载Python版扫雷游戏此程序基于Python标准库地图形用户界面工具包

tkinter,解压缩后即可在Python官方发行版环境下直接运行,包含一个Python程序文

件与一些图片文件,共255行代码。

第2章对象与类型

1.基本运算

编写一个程序,运行时输入以英文逗号分隔地两个数值输出两数之与,差,积,商。

参考代码:

#operate.py基本运算

a,b=eval(input(“输入以英文逗号分隔地两个数值:”))

print("两数之与为二a+b)

print("两数之差为“,a-b)

print("两数之积为“,a*b)

print("两数之商为",a/b)

2.单词反转

编写一个程序,将用户输入地英文短句中每个单词在句子中地位置进行反转后输出(单

词间均以空格分隔,不必考虑标点符号问题)。

示例输入:

nothinggoldcanstay

示例输出:

staycangoldnothing

参考代码:

#word_rev.py单词反转

s=input()

res="".join(i>.split()[::-1])

print(res)

3.输出田字格

编写一个程序,输出由字符构成地田字格,如下图所示:

参考代码:

#cell.py输出田字格

s=("+"+*4)*2+"+\n"

s2=("|"+""*4)*2+"|\n"

print((s+s2*4)*2+s)

5.生成字符串

编写生成字符串地程序,运行时输入一段英文文本,输出由该段文本开头两个与末尾两个

字符组成地新字符串。如果输入地文本长度小于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章模块与库

1.抽签程序

编写简单地抽签程序,运行时输入一个整数n,随机输出一个1到n范围内地整数。

示例愉入:

7

示例输出:

3

参考代码:

#lottery.py抽签程序

fromrandomimportrandint

n=int(input())

print(randint(l,n))

2.笑脸图案

编写turtle绘图程序,通过简单地几何形状组合出一张笑脸,参考下图:

参考代码:

#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()#右侧弧线

tt.goto(0,-90)

tt.pendown()

tt.circle(80460)

tt.penup()#左侧弧线

tt.setheading(180)#设置海龟朝向左方

tt.goto(0,-90)

tt.pendown()

tt.circle(-80,60)

tt.hideturtle()

tt.done()

3.实践:Python地数字舍入规则

对于Python地数字舍入规则"四舍六入五成双",可以查阅官方文档标准库参考页对

round函数地说明来了解它地准确含义

这个规则地实质就是在上下两边选择一个更接近地值,例如:

>>>round(2.49)

2

>>>round(2.51)

3

这个规则中最关键地一点是当要舍去地值为5时,与上下两边地位值恰好同样接近,那么

将会选择舍入到位值为偶数地一方,这样向上舍入与向下舍入地几率各为50%,处理大

量数据时就不会像四舍五入规则那样产生累积地舍入误差,因而更为合理:

>>>round(2.5)

2

>>>round(3.5)

4

>>>round(l.S)

2

还有一种看起来很怪异地情况,当0.15保留1位小数E寸将舍入到0.1而不是0.2:

>>>round(0.15,1)

0.1

其中地原因在于浮点数所固有地精度限制,下面是使用Decimal类型查看浮点数地内部

实际值,可以看到0.15地实际值略小于显示值,而0.1与0.2地实际值略大于对应显示

值,所以0.15其实就是舍入到了更接近地值而已:

>>>fromdecimalimportDecimalasD

>>>D(0.15)

Decimal('0.1499999999999999944488848768742172978818416595458984375')

>>>D(0.1)

Decimal('0.1000000000000000055511151231257827021181583404541015625')

>>>D(0.2)

DecimalC0.200000000000000011102230246251555404236316680908203125')

当向Decimal类型构造器传入字符串"0.15”来精确地表示0.15,保留1位小数时就会

止确地舍入到。.2:

>>>round(D("0.15"),1)

Decimal('0.2')

4.实践:从镜像站安装Anaconda发行版

5.求正弦值

编写求正弦值地程序,输入角度n,输出其正弦sin(n),至多保留2位小数

参考代码:

#getsin.py求正弦值

importmath

n=float(input())

r=math.radians(n)

res=round(math.sin(r),2)

print(res)

资源链接

第4章流程控制

1.考拉兹序列

编写程序打印考拉兹序列,输入任意一个正整数,如果为奇数则将其乘3加L如果为偶数

则将其除以2,输出结果值并再次对结果值执行上述操作,如此循环直到结果值为1时结

束。

示例输入:

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绘图程序,生成一个方形螺旋线图案,参考下图:

参考代码:

#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.实践:蒙特卡罗方法计算圆周率

使用蒙特卡罗方法计算圆周率:半径为1地圆面积即圆周率pi,在单位正方形内随机生

成大量地点,则与原点距离小于于1地点数hits与总点数darts之比将趋向于pi/4,因

此pi=hits/darts*4

参考代码:

#monte_carlo_pi.py#蒙特卡罗方法计算圆周率

fromtimeimporttime

fromrandomimportrandom

frommathimportsqrt

darts=1_000_000#向单位正方形掷出一百万支飞镖

hits=0#命中距离原点小于于1区域地次数

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”运行时间:{time。-t:.2f}秒”)

print"“圆周率值:{pi}")

4.实践:使用循环结构绘制任意图案

使用turtle模块自行编写绘制任意形状与颜色图案地程序,必须使用循环结构。

参考代码:

#flower.py画一朵小红花

importturtleastt

tt・color("red")#花瓣地颜色

tt.begin_fill()

#初始角度根据一个尖角朝下地五边形来确定

tt.right(54)

for_inrange(5):#画出五片花瓣

tt.circlcCSO,180)

tt.right(108)

tt.end_fill()

tt.penup()

tt.left(144)#海龟朝上跳到适当位置

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.区间求闰年个数

编写区间求闰年个数程序,运行时输入以逗号分隔地两个年份,输出该区间内(包含这两

个年份)总共有多少个闰年。闰年地判断条件:能被4整除但不能但100整除,或者能

被400整除。

参考代码:

#leapyears.py区间求闰年个数

x,y=eval(input())

count=0

■Foryinrange(x,y+1):

ify%4==0andy%1001=0ory%400==0:

count+=1

print(count)

资源链接

第5章自定义函数

1.平均值函数

自定义一个平均值函数average,可以传入任意多个数值参数,返回它们地平均值(保留

至多两位小数),并在程序中使用该函数计算用户输入地多个数值地平均值。

示例输入:

5,8,16,5.8,20

示例输出:

10.96

参考代码:

#average.py平均值函数

defaverage(*args):

result=sum(args)/len(args)

returnround(result,2)

if_name_=="_main_":

num=eval(input())

print(average(*num))

2.六角星函数

自定义一个绘制六角星函数star6p,以指定位置为中心绘制指定大小地六角星,并使用该

函数并排绘制三颗六角星中间一颗较大,旁边两颗较小。参考下图:

A

V

参考代码:

#draw_star6p.py绘制六角星函数

importturtleastt

defstar6P(x,y,size=30):

心”六角星函数,x,y为中心点,size为边长”皿

tt.setpos(x-size,y)#起始点横坐标为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.输出任意田字格

自定义函数cells(n),输出由字符构成地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.科赫曲线函数

自定义绘制大小为size阶数为n地科赫曲线地函数koch(sizezn),并调用此函数生成

"科赫雪花"图案。

参考代码:

#koch.py定义科赫曲线函数并绘制“科赫雪花”

importturtleastt

defkoch(size,n):#科赫曲线函数

ifn==0:

tt.forward(size)

else:

foranglein[0,60,-120,60]:

tt.left(angle)

koch(size/3,n・1)

defmain():#绘制科赫雪花地主函数

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.五星红旗函数

编写程序定义指定中心点坐标与外接圆半径绘制五角星地函数,并绘制五星红旗。

参考代码:

#flag_prc.py定义绘制五角星函数,并绘制五星红旗

importmath

importturtleastt

tt.Turtlescreen._RUNNING=True

defstar5P(x=0,y=0,size=100,angle=0jcolor="red"):

绘制五角星

x:中心地横坐标

y:中心地纵坐标

size:大小,指外接圆地半径

angle:倾角,指以中心为轴旋转地角度

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.打印并列地条目

编写程序打印并列地条目,将用户输入地以空格分隔地多个条目以顿号并列地形式打印

出来。

示例输入:

韩国日本美国

示例输出:

韩国,日本美国与

参考代码:

#allitems.py打印并列地条目

defshowitems(items):

result="/'.join(items[:-l])

result+="与"+items[-l]

returnresult

if_name_=="_main_":

items=input().split()

print(showitems:items))

2.总成绩排序

给定一个学生成绩列表grades,其中每一项为学号与三门课程成绩组成地四元组:

grades=[

("202001",85,92,73),

("202002",68,70,53),

("202003",72,58,77),

("202004",95,89,91),

("202005",65,73,89)]

要求按总成绩从高到低排序打印输出,如下所示。

202004958991275

202001859273250

202005657389227

202003725877207

202002687053191

参考代码:

#grades.py总成绩排序

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.验证陷阱数495

任意输入一个三位数(各位上地数字不同),然后用其各位上地数字组成一个最大数与

最小数,并用最大数减去最小数彳导到一个新地三位数,重复上面地过程,最终数字必定会

停在495这个“陷阱数"上。请编程验证这个命题。

参考代码:

#trap495.py验证陷阱数495

defmain():

s=input(“输入一个三位数(各位上地数字不同):”)

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.实践:Python数组类型

Python标准库array模块提供了高效地数值数组类型array。数组属于序列类型,其行

为与列表非常相似,不同之处在于其中存储地对象类型是受限地。

例如以下代码将构造一个整型数组a:

fromarrayimportarray

a=array(“i”,[1,2,3,4,5])

数组a添加一个列表中地元素:

a.fromlist([7,8,9])

数组a转换为列表:

a.tolist()

5.实践:计算基本统计值

编写计算基本统计值地程序,输入一组数据,输出基本统计值

・平均值:对所有项求与,再除以总项数

•中位数:各项值排序后,对奇数个取居中地数,对偶数个则取居中两数地平均值

•标准差:对各项值与平均值地差地平方求与,再除以总项数减一,再求平方根

示例代码:

#输入多个数字放入列表,求平均值,中位数,标准差

frommathimportsqrt

defmean(numbers):

“小平均值函数”,,,,

returnsum(numbers)/len(numbers)

defmedian(numbers):

“““中位数函数”小

numbers=sorted(numbers)

size=len(numbers)

ifsize%2==0:

return(numbers[size//2-l]+numbers[size//2])/2

else:

returnnumbers[size//2]

defstdev(numbers):

标准差函数

dev=0.0

m=mean(numbers)

forninnumbers:

dev+=(n-m)**2

returnsqrt(dev/(len(numbers)-1))

ifnamemain

print("请输入数字,按回车退出:*,)

numbers=[]

whileTrue:

num=input])

ifnum:

numbers.append(eval(num))

else:

break

print(f”数值列表:{numbers}")

print(f”平均值:{mean(numbers)}")

print(f”中位数:{median(numbers)}")

print(f”标准差:{stdev(numbers))")

资源链接

第7章映射与集合

1.条目计数

编写一个条目计数程序,用户输入以空格分隔地条目,其中可能存在重复,输出条目名称与

对应数量,按数量从多到少排序。

示例输入:

牛牛鸡猪马鸡羊羊马羊牛羊猪

示例输出:

羊:4

牛:3

鸡:2

猪:2

马:2

(变化形式)输入方式改为多次输入,以回车结束;输出方式改为单行输出,以空格分隔

参考代码:

#items.py条目计数

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}")

”小单行输出方式地示例代码,最后一个条目要单独处理

fork,vinresult[:-1]:

print(f"{k}{v}\end="")

k,v=result[-l]

print(f"{k}{v}")

IIIIII

#单行输出方式地简洁写法

#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.两个骰子地组合

编写一个程序输出同时掷出两个骰子所有可能地结果组合(例如1,2与2,1为同一组

合,不应重复输出)。

输出应如下所示。

1+1,1+2,1+3,...

参考代码:

#twodices.py两个骰子地组合

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.两个字典地比对

给定两个字典dl与d2,请输出一个新地字典,其元素是不同时存在于字典dl与d2地

兀素。

dl={

'brazil,:‘巴西1Htaly':'意大利:'egypt':'埃与

'Canada':,加拿大:'china':一,'mexico,:,墨西哥‘}

d2={

'cuba':'古巴','brazil':'巴西'italy':"意大利

,egypt':'埃与','Canada':'加拿大'china':")

参考代码:

#dicjp.py两个字典地比对

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.实践:英文词频统计

对"ZenofPython”中各个单词地出现次数进行统计并降序输出。

参考代码:

#word_count.py英文词频统计

importsubprocessassp

defmain():

#在子进程中运行this模块

p=sp.Popen("python-mthis"shell=True>text=True,

stdout=sp.PIPE)

d={)

text=p.stdout.read()#从子进程地标港输出读取文本

forcin#将标点符号替换为空格

ifcintext:

text=text.replace(c,"")

forwordintext.lower().split():#将文本转为小写并拆分为单词

d.setdefaultCword^0)

d[word]+=1

#根据频度字典键值对视图生成按值大小降序排列地二元组列表

result=sorted(d・items(),key=lambdai:i[lj,reverse=True)

fork,vinresult[:20]:#打印前2。项结果

print(f"{k:8}{v:>2}")

if_name_=="_main_":

main()

5.实践:莫尔斯电码转换

编写程序实现莫尔斯电码地转换。莫尔斯电码是一种早期地数字化通信形式,编码主要

由两个字符表示:与,即短信号与长信号。

参考代码:

#morsecode.py莫尔斯电码转换

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!='#根据字典键取值,字符间隔一个空格

cipher+=MORSE_CODE_DICT[letter]+''

else:#单词间隔两个空格

cipher+=''

returncipher

defdccrypt(mcssagc):#解码:电码译回原文

message+=''

decipher=''#原文

citext=*'#单个字符地电码

forletterinmessage:

if(letter!=''):

i=0#空格”数器

citext+=letter

else:

i+=1#新地字符

ifi==2:#新地单词

decipher+=''

else:#根据字典值取键(反查)

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.自定义函数统计

编写一个自定义函数统让程序:统计练习项目中所有程序文件中自定义函数地数量

(即def语句使用次数),输出频度最高地前20个名掰。

参考代码:

#allfunc.py自定义函数统计

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.压缩备份程序

编写一个压缩备份程序backup.py:使用命令行参数指定目录或文件,打包为zip归档

文件(zip文件名即指定地目录或文件名)。例如输入以下命令将会创建包含指定目录

全部内容地归档文件D:\pyAbc.zip:

pythonbackup.pyD:\pyAbc

参考代码:

#backup.py压缩备份程序

importos

importsys

importzipfile

defzip(pdLhridrne):

心”压缩一个目录或文件

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.实践:根据CSV数据生成HTML表格

根据从CSV文件读取地内容来生成HTML表格

pany.csv:

公司名称,成立年份,创始人,总部城市

华为,1987,任正非,深圳

腾讯,1998,马化腾,深圳

阿里巴巴1999,马云,杭州

百度,2000,李彦宏,北京

参考代码(使用JupyterNotebook):

#打开文件读取首行,拆分为字段名列表

f=open("pany.csv",encoding="utf-8")

head=f.readline()

#将首行拆分为字段名列表

head=head.rstrip("\n").split("/')

#根据字段名列表生成表头地HTML代码

html="<table

width="500'><tr><th>{}</th><th>{}</th><th>{}</th><th>{}</thx/tr>".f

ormat(*head)

#将其余行拆分为列表并生成对应行地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.实践:图像处理库Pillow

安装第三方包pillow进行图像处理

参考代码(使用JupyterNotebook):

使用图像模块Image

fromPILimportImage

img=Image.open("FlowerVase.png")#打开图片文件

img#JupyterNotebook可直接显示图片

图片生成缩略图

imgx=img.copy()

imgx.thumbnail((200,200))

imgx

图片旋转180度

imgx.rotate(180)

图片转换为灰度模式

imgx.convert("L")

图像加强模块ImageEnhance:亮度加强

fromPILimportImageEnhance

ImageEnhance.Brightness(imgx).enhance(l.S)

对比度加强

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格式地图片文件

#系统需求安装GhostScript来支持EPS格式,可以使用以下conda命令安装

#condainstall-cconda-forgeghostscript

eps=Image.openCptree.eps")

eps

5.实践:操作《三国演义》文本文件

使用"ThreeKingoms.txt"练习文本文件地读写操作,下载链接:

提取《三国演义》地所有回目保存为文本文件"三国演义回目.txt"

withopenCThreeKingdoms.txt",encoding="utf-8")asf:

withopen("三国演义回目国'目",encoding="utf-8")asf2:

forlineinf:

ifline.startswith(“第”):

f2.write(line)

提取《三国演义》地所有回目与各章回前100字保存为"三国演义摘要.txt"

withopen("ThreeKingdoms.txt",encoding="utf-8")asf:

withopen("三国演义摘要.txt","w",encoding="utf-8")asf2:

forlineinf:

ifline.startswith(“第”):

f2.write(line)

f2.write(f.readline()[:100]+..\n\n")

importjieba#第三方包“结巴"中文分词

withopenCThreeKingdoms.txt",encoding="utf-8-sig")asf:

txt=f.read()

#jieba.cut(s):将文本s拆分为汉语词地迭代器

print(list(jieba.cut(txt[:50])))#打印三国演义开头文本地分词结果

注意:以上代码中指定地编码格式utf-8-sig适用于Windows系统专属地UTF-8文

本文件,它与标准UTF-8地唯一区别是在开头有一个"字节顺序标记"(BOM),对

UTF-8+BOM地文本文件使用utf-8解码时会在开头显示一个特殊Unicode字符

\ufeff,而使用utf-8-sig解码时则会自动去掉这个字符。相关说明见

统计出现次数排前十位地人名

excludes={#将需求排除地词定义为集合

”将军却说”,“荆州”,”二人“,”不可、“不能'”如此“,”商议二

“如何“,“主公”,“左右“,”军马、”军士丞相二“引兵;”次日二

”大喜“,”天下”,”东吴,”于是“,”今日'“不敢”

)

names={#将需求合并地称呼定义为字典

“玄德”:“刘备,“先主":”刘备:“孔明”:“诸葛亮“,“诸葛丞相“:”诸葛

亮二

”孟德“:“曹操”,“曹丞相”:“曹操”,“云长“:”关羽”,“关公“:”关羽”,

“翼德“:“张飞”,“子龙“:”赵云”,“奉先”:”吕布仲谋“:”孙权二

“公瑾“:“周瑜“,“仲达“:”司马懿”

)

jieba.suggest.freq((“玄德“,"曰“),True)#定义新词以避免出现分词错误

jieba.suggest_freq((”孔明、"曰“),True)

words=jieba.cut(txt)

counts={}

forwordinwords:

iflen(word)==1orwordinexcludes:#排除单字词与非人名

continue

elifname:=names.get(word):#将称呼转为姓名

word=name

counts[word]=counts.get(word,0)+1#统计词频

result=sorted(counts.items()key=lambdai:i[l],reverse=True)

fork,vinresult[:10]:#输出结果前1。位

print(f"{k}\t{v:>5}")

滨源链接

第9章图形用户界面

1.贷款计算器

使用tkinter编写一个贷款计算器程序:输入贷款总部年利率与还款年限,点击"开始

计算"按钮即显示每月还款额与还款总额。参考下图他效果:

参考代码:

"""loancalc.pyw贷款计算器

贷款总额3月利率i=年利率1/12,还款期数廿还款年限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等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论