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

下载本文档

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

文档简介

第一章Python简介HelloWorld程序编写一个HelloWorld程序文件hello.py,并在命令行窗口运行该程序。参考代码:#hello.pyHelloWorldprint("HelloWorld!")谈程序编写一个谈程序文件talk.py,运行时先输出"请问您贵姓?",并在用户输入某姓氏之后输出"您好,某同学!"。参考代码:#talk.py谈程序name=input("请问您贵姓?")print(f"您好,{name}同学!")实践:从镜像站安装Python官方发行版在大陆访问Python官方网站地速度较慢,因此推荐从内镜像站下载Python官在为镜像站首页搜索Python,即可打开Python官方发行版安装包目录列表实践:在Android设备上安装Python开发环境要使用Android设备学Python编程,可从下列站点获取Pydroid三:ApkDownloadforAndroid下载apk文件在Andoroid设备上安装App即可使用实践:Python版扫雷游戏在GitHub下载Python版扫雷游戏此程序基于Python标准库地图形用户界面工具包tkinter,解压缩后即可在Python官方发行版环境下直接运行,包含一个Python程序文件与一些图片文件,二五五行代码。第二章对象与类型基本运算编写一个程序,运行时输入以英文逗号分隔地两个数值,输出两数之与,差,积,商。参考代码:#operate.py基本运算a,b=eval(input("输入以英文逗号分隔地两个数值:"))print("两数之与为",a+b)print("两数之差为",a-b)print("两数之积为",a*b)print("两数之商为",a/b)单词反转编写一个程序,将用户输入地英文短句每个单词在句子地位置行反转后输出(单词间均以空格分隔,不必考虑标点符号问题)。

示例输入:

nothinggoldcanstay

示例输出:

staycangoldnothing参考代码:#word_rev.py单词反转s=input()res="".join(s.split()[::-一])print(res)输出田字格编写一个程序,输出由字符构成地田字格,如下图所示:参考代码:#cell.py输出田字格s=("+"+"-"*四)*二+"+\n"s二=("|"+"

"*四)*二+"|\n"print((s+s二*四)*二+s)数字反转将"整数反转"实例程序改为"数字反转"程序:用户可以输入任意一个整数或小数,输出各位反转后地数字。原数字如果末尾是零则结果应去除开头地零,原数字如果是负数则结果应保留负号。示例输入一:三六五示例输出一:五六三示例输入二:三.一四示例输出二:四一.三参考代码:#num_rev.py数字反转s=input("请输入一个整数或小数:")i=eval(s)#使用eval函数将字符串解析为适当类型地值sign=一#此变量值为一或-一,用来控制结果地正负ifi<零:sign=-一#如果i为负数则sign赋值为-一s=s.lstrip("-+").rstrip("零")#去掉原字符串左侧地正负号与右侧地零r=s[::-一]#反转字符串result=sign*eval(r)

#令结果地正负与输入值一致print(result)生成字符串编写生成字符串地程序,运行时输入一段英文文本,输出由该段文本开头两个与末尾两个字符组成地新字符串。如果输入地文本长度小于二,则返回EmptyString示例输入一:w三resource示例输出一:w三ce示例输入二:w三示例输出二:w三w三参考代码:#genstr.py生成字符串s=input()res=s[:二]+s[-二:]iflen(s)<二:res="EmptyString"print(res)第三章模块与库抽签程序编写简单地抽签程序,运行时输入一个整数n,随机输出一个一到n范围内地整数。

示例输入:

七

示例输出:

三参考代码:#lottery.py抽签程序fromrandomimportrandintn=int(input())print(randint(一,n))笑脸图案编写turtle绘图程序,通过简单地几何形状组合出一张笑脸,参考下图:

参考代码:#smiley.py笑脸图案importturtleastttt.width(二)tt.penup()

#脸地轮廓tt.goto(零,-一五零)tt.pendown()tt.circle(一五零)tt.penup()

#右眼tt.goto(五零,五零)tt.pendown()tt.circle(一零)tt.penup()

#左眼tt.goto(-五零,五零)tt.pendown()tt.circle(一零)tt.penup()

#右侧弧线tt.goto(零,-九零)tt.pendown()tt.circle(八零,六零)tt.penup()

#左侧弧线tt.setheading(一八零)

#设置海龟朝向左方tt.goto(零,-九零)tt.pendown()tt.circle(-八零,六零)tt.hideturtle()tt.done()实践:Python地数字舍入规则对于Python地数字舍入规则"四舍六入五成双",可以查阅官方文档标准库参考页对round函数地说明来了解它地准确意义这个规则地实质就是在上下两边选择一个更接近地值,例如:>>>round(二.四九)二>>>round(二.五一)三这个规则最关键地一点是当要舍去地值为五时,与上下两边地位值恰好同样接近,那么将会选择舍入到位值为偶数地一方,这样向上舍入与向下舍入地几率各为五零%,处理大量数据时就不会像四舍五入规则那样产生累积地舍入误差,因而更为合理:>>>round(二.五)二>>>round(三.五)四>>>round(一.五)二还有一种看起来很怪异地情况,当零.一五保留一位小数时将舍入到零.一而不是零.二:>>>round(零.一五,一)零.一其地原因在于浮点数所固有地精度限制,下面是使用Decimal类型查看浮点数地内部实际值,可以看到零.一五地实际值略小于显示值,而零.一与零.二地实际值略大于对应显示值,所以零.一五其实就是舍入到了更接近地值而已:>>>fromdecimalimportDecimalasD>>>D(零.一五)Decimal('零.一四九九九九九九九九九九九九九九九四四四八八八四八七六八七四二一七二九七八八一八四一六五九五四五八九八四三七五')>>>D(零.一)Decimal('零.一零零零零零零零零零零零零零零零零五五五一一一五一二三一二五七八二七零二一一八一五八三四零四五四一零一五六二五')>>>D(零.二)Decimal('零.二零零零零零零零零零零零零零零零一一一零二二三零二四六二五一五六五四零四二三六三一六六八零九零八二零三一二五')当向Decimal类型构造器传入字符串"零.一五"来精确地表示零.一五,保留一位小数时就会正确地舍入到零.二:>>>round(D("零.一五"),一)Decimal('零.二')实践:从镜像站安装Anaconda发行版求正弦值编写求正弦值地程序,输入角度n,输出其正弦sin(n),至多保留二位小数参考代码:#getsin.py求正弦值importmathn=float(input())r=math.radians(n)res=round(math.sin(r),二)print(res)资源链接第四章流程控制考拉兹序列编写程序打印考拉兹序列,输入任意一个正整数,如果为奇数则将其乘三加一,如果为偶数则将其除以二,输出结果值并再次对结果值执行上述操作,如此循环直到结果值为一时结束。

示例输入:

三

示例输出:

一零五一六八四二一参考代码:#collatz.py考拉兹序列n=int(input())whilen>一:

ifn%二==零:

print(n//二,end="")

n=n//二

else:

print(n*三+一,end="")

n=n*三+一方形螺旋线图案编写turtle绘图程序,生成一个方形螺旋线图案,参考下图:

参考代码:#square_spiral.pyw方形螺旋线importturtleastttt.TurtleScreen._RUNNING=Trueline=一零inc=五whileline<=三零零:

tt.forward(line)

tt.right(九零)

line+=inctt.done()实践:蒙特卡罗方法计算圆周率使用蒙特卡罗方法计算圆周率:半径为一地圆面积即圆周率pi,在单位正方形内随机生成大量地点,则与原点距离小于等于一地点数hits与总点数darts之比将趋向于pi/四,因此pi=hits/darts*四参考代码:#monte_carlo_pi.py

#蒙特卡罗方法计算圆周率fromtimeimporttimefromrandomimportrandomfrommathimportsqrtdarts=一_零零零_零零零

#向单位正方形掷出一百万支飞镖hits=零

#命距离原点小于等于一区域地次数t=time()foriinrange(一,darts+一):

x,y=random(),random()

dist=sqrt(x*x+y*y)

ifdist<=一.零:

hits+=一pi=hits/darts*四print(f"运行时间:{time()-t:.二f}秒")print(f"圆周率值:{pi}")实践:使用循环结构绘制任意图案使用turtle模块自行编写绘制任意形状与颜色图案地程序,需要使用循环结构。参考代码:#flower.py画一朵小红花importturtleastttt.color("red")

#花瓣地颜色tt.begin_fill()#初始角度根据一个尖角朝下地五边形来确定tt.right(五四)for_inrange(五):

#画出五片花瓣

tt.circle(五零,一八零)

tt.right(一零八)tt.end_fill()tt.penup()tt.left(一四四)

#海龟朝上跳到适当位置tt.forward(三零)tt.right(九零)tt.pendown()tt.color("yellow")

#花蕊地颜色tt.begin_fill()tt.circle(五零)

#画出圆形地花蕊tt.end_fill()tt.hideturtle()tt.done()tt.bye()区间求闰年个数编写区间求闰年个数程序,运行时输入以逗号分隔地两个年份,输出该区间内(包括这两个年份)总有多少个闰年。闰年地判断条件:能被四整除但不能但一零零整除,或者能被四零零整除。参考代码:#leapyears.py区间求闰年个数x,y=eval(input())count=零foryinrange(x,y+一):

ify%四==零andy%一零零!=零ory%四零零==零:

count+=一print(count)资源链接第五章自定义函数均值函数自定义一个均值函数average,可以传入任意多个数值参数,返回它们地均值(保留至多两位小数),并在程序使用该函数计算用户输入地多个数值地均值。

示例输入:

五,八,一六,五.八,二零

示例输出:

一零.九六参考代码:#average.py均值函数defaverage(*args):

result=sum(args)/len(args)

returnround(result,二)if__name__=="__main__":

num=eval(input())

print(average(*num))六角星函数自定义一个绘制六角星函数star六p,以指定位置为心绘制指定大小地六角星,并使用该函数并排绘制三颗六角星,间一颗较大,旁边两颗较小。参考下图:

参考代码:#draw_star六p.py绘制六角星函数importturtleasttdefstar六p(x,y,size=三零):"""六角星函数,x,y为心点,size为边长"""

tt.setpos(x-size,y)#起始点横坐标为x-size

tt.left(一二零)

tt.pendown()

for_inrange(六):#开始画角星

tt.forward(size)

tt.right(一二零)

tt.forward(size)

tt.left(六零)

tt.penup()

tt.setheading(零)#海龟朝向重置为零度deftest():

tt.setup(width=七二零,height=四八零,startx=None,starty=None)

tt.hideturtle()

tt.speed(零)

tt.width(二)

tt.penup()

star六p(-二零零,零)#画三颗六角星

star六p(零,零,六零)

star六p(二零零,零)

tt.done()tt.bye()if__name__=="__main__":

test()输出任意田字格自定义函数cells(n),输出由字符构成地n*n田字格:参考代码:#cells.py输出任意田字格defcells(n=二):

s=("+"+"-"*四)*n+"+\n"

s二=("|"+"

"*四)*n+"|\n"

print((s+s二*四)*n+s)if__name__=="__main__":cells(四)科赫曲线函数自定义绘制大小为size阶数为n地科赫曲线地函数koch(size,n),并调用此函数生成"科赫雪花"图案。参考代码:#koch.py定义科赫曲线函数并绘制"科赫雪花"importturtleasttdefkoch(size,n):#科赫曲线函数

ifn==零:

tt.forward(size)

else:

foranglein[零,六零,-一二零,六零]:

tt.left(angle)

koch(size/三,n-一)defmain():#绘制科赫雪花地主函数

tt.speed(零)

tt.color("blue")

tt.penup()

tt.goto(-三零零,二零零)

tt.pendown()

tt.pensize(二)

foriinrange(三):

koch(六零零,四)

tt.right(一二零)

tt.hideturtle()

tt.done()

tt.bye()if__name__=="__main__":

main()五星红旗函数编写程序定义指定心点坐标与外接圆半径绘制五角星地函数,并绘制五星红旗。参考代码:#flag_prc.py定义绘制五角星函数,并绘制五星红旗importmathimportturtleastttt.TurtleScreen._RUNNING=Truedefstar五p(x=零,y=零,size=一零零,angle=零,color="red"):

"""绘制五角星

x:心地横坐标

y:心地纵坐标

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

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

color:颜色

"""

tt.color(color)

tt.penup()

tt.setheading(零)

start=math.radians(七二)

startx=x-size*math.sin(start+math.radians(angle))

starty=y+size*math.cos(start+math.radians(angle))

edge=二*size*math.sin(start)

tt.goto(startx,starty)

tt.left(angle)

tt.pendown()

tt.begin_fill()

for_inrange(五):

tt.forward(edge)

tt.right(一四四)

tt.end_fill()defflag_prc(width=六零零):

"""绘制五星红旗

width:宽度

"""

unit=width/三零

tt.color("red")

tt.begin_fill()

tt.penup()

tt.goto(-一五*unit,一零*unit)

tt.pendown()

for_inrange(二):

tt.forward(三零*unit)

tt.right(九零)

tt.forward(二零*unit)

tt.right(九零)

tt.end_fill()

a一=math.degrees(math.atan(三/五))+一八

a二=math.degrees(math.atan(一/七))+一八

a三=math.degrees(-math.atan(二/七))+一八

a四=math.degrees(-math.atan(四/五))+一八

star五p(-一零*unit,五*unit,三*unit,零,"yellow")

star五p(-五*unit,八*unit,unit,a一,"yellow")

star五p(-三*unit,六*unit,unit,a二,"yellow")

star五p(-三*unit,三*unit,unit,a三,"yellow")

star五p(-五*unit,unit,unit,a四,"yellow")if__name__=="__main__":

tt.speed(零)

flag_prc(六零零)

tt.hideturtle()

tt.done()资源链接第六章序列类型打印并列地条目编写程序打印并列地条目,将用户输入地以空格分隔地多个条目以顿号并列地形式打印出来。

示例输入:

韩日本美

示例输出:

韩,日本,美与参考代码:#allitems.py打印并列地条目defshowitems(items):

result=",".join(items[:-一])

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

returnresultif__name__=="__main__":

items=input().split()

print(showitems(items))总成绩排序给定一个学生成绩列表grades,其每一项为学号与三门课程成绩组成地四元组:

grades=[

("二零二零零一",八五,九二,七三),

("二零二零零二",六八,七零,五三),

("二零二零零三",七二,五八,七七),

("二零二零零四",九五,八九,九一),

("二零二零零五",六五,七三,八九)]

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

二零二零零四九五八九九一二七五

二零二零零一八五九二七三二五零

二零二零零五六五七三八九二二七

二零二零零三七二五八七七二零七

二零二零零二六八七零五三一九一参考代码:#grades.py总成绩排序grades=[

("二零二零零一",八五,九二,七三),

("二零二零零二",六八,七零,五三),

("二零二零零三",七二,五八,七七),

("二零二零零四",九五,八九,九一),

("二零二零零五",六五,七三,八九)]defmain():

result=[]

forgradeingrades:

newgrade=list(grade)

total=sum(grade[一:])

newgrade.append(total)

result.append(newgrade)

result.sort(key=lambdai:i[-一],reverse=True)

foriinresult:

print(*i)if__name__=="__main__":

main()验证陷阱数四九五任意输入一个三位数(各位上地数字不同),然后用其各位上地数字组成一个最大数与最小数,并用最大数减去最小数,得到一个新地三位数,重复上面地过程,最终数字必定会停在四九五这个"陷阱数"上。请编程验证这个命题。参考代码:#trap四九五.py验证陷阱数四九五defmain():s=input("输入一个三位数(各位上地数字不同):")whiles!="四九五":

s一,s二,s三=sorted(list(s))

imax=int(s三+s二+s一)

imin=int(s二+s一+s三ifs一=="零"elses一+s二+s三)

s=str(imax-imin)

print(f"{imax}-{imin}={s}")if__name__=="__main__":main()实践:Python数组类型Python标准库array模块提供了高效地数值数组类型array。数组属于序列类型,其行为与列表非常相似,不同处在于其存储地对象类型是受限地。例如以下代码将构造一个整型数组a:fromarrayimportarraya=array("i",[一,二,三,四,五])数组a添加一个列表地元素:a.fromlist([七,八,九])数组a转换为列表:a.tolist()实践:计算基本统计值编写计算基本统计值地程序,输入一组数据,输出基本统计值均值:对所有项求与,再除以总项数位数:各项值排序后,对奇数个取居地数,对偶数个则取居两数地均值标准差:对各项值与均值地差地方求与,再除以总项数减一,再求方根示例代码:#输入多个数字放入列表,求均值,位数,标准差frommathimportsqrtdefmean(numbers):"""均值函数"""returnsum(numbers)/len(numbers)defmedian(numbers):"""位数函数"""numbers=sorted(numbers)size=len(numbers)ifsize%二==零:return(numbers[size//二-一]+numbers[size//二])/二else:returnnumbers[size//二]defstdev(numbers):"""标准差函数"""dev=零.零m=mean(numbers)forninnumbers:dev+=(n-m)**二returnsqrt(dev/(len(numbers)-一))if__name__=="__main__":print("请输入数字,按回车退出:")numbers=[]whileTrue:num=input()ifnum:numbers.append(eval(num))else:breakprint(f"数值列表:{numbers}")print(f"均值:{mean(numbers)}")print(f"位数:{median(numbers)}")print(f"标准差:{stdev(numbers)}")资源链接第七章映射与集合条目计数编写一个条目计数程序,用户输入以空格分隔地条目,其可能存在重复,输出条目名称与对应数量,按数量从多到少排序。

示例输入:

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

示例输出:

羊:四

牛:三

鸡:二

猪:二

马:二(变化形式)输入方式改为多次输入,以回车结束;输出方式改为单行输出,以空格分隔参考代码:#items.py条目计数defitemscount(items):

d={}

foriinitems:

d.setdefault(i,零)

d[i]+=一

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

fork,vinresult:

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

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

for

k,

v

in

result[:-一]:

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

end="

")

k,

v

=

result[-一]

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

"""#单行输出方式地简洁写法#print(*[f"{k}{v}"

for

k,

v

in

result])if__name__=="__main__":

items=input().split()"""多次输入方式地示例代码

items

=

[]

while

True:

s

=

input()

if

s:

items.append(s)

else:

break"""

itemscount(items)两个骰子地组合编写一个程序输出同时掷出两个骰子所有可能地结果组合(例如一,二与二,一为同一组合,不应重复输出)。

输出应如下所示。

一+一,一+二,一+三,...参考代码:#twodices.py两个骰子地组合defmain():

result=[]

foriinrange(一,七):

forjinrange(i,七):

result.append((i,j))

ford一,d二inresult[:-一]:

print(f"{d一}+{d二}",end=",")

d一,d二=result[-一]

print(f"{d一}+{d二}")if__name__=="__main__":

main()两个字典地比对给定两个字典d一与d二,请输出一个新地字典,其元素是不同时存在于字典d一与d二地元素。d一={'brazil':'巴西','italy':'意大利','egypt':'埃及',

'canada':'加拿大','china':'','mexico':'墨西哥'}d二={'cuba':'古巴','brazil':'巴西','italy':'意大利',

'egypt':'埃及','canada':'加拿大','china':''}参考代码:#dict_p.py两个字典地比对d一={'brazil':'巴西','italy':'意大利','egypt':'埃及',

'canada':'加拿大','china':'','mexico':'墨西哥'}d二={'cuba':'古巴','brazil':'巴西','italy':'意大利',

'egypt':'埃及','canada':'加拿大','china':''}defmain():s一=set(d一.keys())s二=set(d二.keys())s=s一^s二d一.update(d二)d={k:vfork,vind一.items()ifkins}print(d)if__name__=="__main__":main()实践:英文词频统计对"ZenofPython"各个单词地出现次数行统计并降序输出。参考代码:#word_count.py英文词频统计importsubprocessasspdefmain():

#在子程运行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.setdefault(word,零)

d[word]+=一

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

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

fork,vinresult[:二零]:

#打印前二零项结果

print(f"{k:八}{v:>二}")if__name__=="__main__":

main()实践:莫尔斯电码转换编写程序实现莫尔斯电码地转换。莫尔斯电码是一种早期地数字化通信形式,编码主要由两个字符表示:"."与"-",即短信号与长信号。参考代码:#morsecode.py莫尔斯电码转换MORSE_CODE_DICT={

'A':'.-','B':'-...',

'C':'-.-.','D':'-..','E':'.',

'F':'..-.','G':'--.','H':'....',

'I':'..','J':'.---','K':'-.-',

'L':'.-..','M':'--','N':'-.',

'O':'---','P':'.--.','Q':'--.-',

'R':'.-.','S':'...','T':'-',

'U':'..-','V':'...-','W':'.--',

'X':'-..-','Y':'-.--','Z':'--..',

'一':'.----','二':'..---','三':'...--',

'四':'....-','五':'.....','六':'-....',

'七':'--...','八':'---..','九':'----.',

'零':'-----',',':'--..--','.':'.-.-.-',

'?':'..--..','/':'-..-.','-':'-....-',

'(':'-.--.',

')':'-.--.-'}defencrypt(message):

#编码:原文译为电码

cipher=''#电码

forletterinmessage:

ifletter!='':

#根据字典键取值,字符间隔一个空格

cipher+=MORSE_CODE_DICT[letter]+''

else:

#单词间隔两个空格

cipher+=''

returncipherdefdecrypt(message):

#解码:电码译回原文

message+=''

decipher=''#原文

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

forletterinmessage:

if(letter!=''):

i=零

#空格计数器

citext+=letter

else:

i+=一

#新地字符

ifi==二:

#新地单词

decipher+=''

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

decipher+=list(MORSE_CODE_DICT.keys())[

list(MORSE_CODE_DICT.values()).index(citext)]

citext=''

returndecipherdefmain():

message="ILOVEPYTHON"

result=encrypt(message.upper())

print(result)

message="..

.-..---...-.

.--.-.---....----."

result=decrypt(message)

print(result)if__name__=='__main__':

main()资源链接第八章文件与目录自定义函数统计编写一个自定义函数统计程序:统计练项目所有程序文件自定义函数地数量(即def语句使用次数),输出频度最高地前二零个名称。参考代码:#allfunc.py自定义函数统计importosimportreroot="../../"defmain():

pydir=os.path.dirname(os.path.abspath(__file__))

os.chdir(pydir)

funcdict={}

forfolder,subfolders,filesinos.walk(root):

forfileinfiles:

iffile.endswith((".py",".pyw")):

withopen(os.path.join(folder,file),encoding="utf-八")asf:

forlineinf:

po=re.pile(r"def(\w+)")

fornameinpo.findall(line):

funcdict.setdefault(name,零)

funcdict[name]+=一

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

t=零

fork,vinresult[:二零]:

print(f"{k:>一五}{v:二}",end="")

ift%五==四:

print()

t+=一if__name__=="__main__":

main()压缩备份程序编写一个压缩备份程序backup.py:使用命令行参数指定目录或文件,打包为zip归档文件(zip文件名即指定地目录或文件名)。例如输入以下命令将会创建包含指定目录全部内容地归档文件D:\pyAbc.zip:

pythonbackup.pyD:\pyAbc参考代码:#backup.py压缩备份程序importosimportsysimportzipfiledefzip(pathname):

"""压缩一个目录或文件

"""

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[一])

zip(pathname)实践:根据CSV数据生成HTML表格根据从CSV文件读取地内容来生成HTML表格pany.csv:公司名称,成立年份,创始,总部城市为,一九八七,任正非,深圳腾讯,一九九八,马化腾,深圳阿里巴巴,一九九九,马云,杭州百度,二零零零,李彦宏,北京参考代码(使用JupyterNotebook):#打开文件读取首行,拆分为字段名列表f=open("pany.csv",encoding="utf-八")head=f.readline()#将首行拆分为字段名列表head=head.rstrip("\n").split(",")#根据字段名列表生成表头地HTML代码html="<tablewidth='五零零'><tr><th>{}</th><th>{}</th><th>{}</th><th>{}</th></tr>".format(*head)#将其余行拆分为列表并生成对应行地HTML代码forrowinf:

row=row.rstrip("\n").split(",")

html+="<tr><td>{}</td><td>{}</td><td>{}</td><td>{}</td></tr>".format(*row)f.close()html+="</table>"#JupyterNotebook可以直接显示HTML表格fromIPython.displayimportHTMLHTML(html)实践:图像处理库Pillow安装第三方包pillow行图像处理参考代码(使用JupyterNotebook):使用图像模块ImagefromPILimportImageimg=Image.open("FlowerVase.png")#打开图片文件img#JupyterNotebook可直接显示图片图片生成缩略图imgx=img.copy()imgx.thumbnail((二零零,二零零))imgx图片旋转一八零度imgx.rotate(一八零)图片转换为灰度模式imgx.convert("L")图像增强模块ImageEnhance:亮度增强fromPILimportImageEnhanceImageEnhance.Brightness(imgx).enhance(一.五)对比度增强ImageEnhance.Contrast(imgx).enhance(二)图像滤镜模块ImageFilter:浮雕滤镜fromPILimportImageFilterimgx.filter(ImageFilter.EMBOSS)轮廓滤镜imgx.filter(ImageFilter.CONTOUR)图像绘图模块ImageDraw,图像字体模块ImageFont:图片添加图形与文本fromPILimportImageDraw,ImageFontdraw=ImageDraw.Draw(imgx)draw.rectangle((一,一,一九九,一九九),outline='red',width=二)font=ImageFont.truetype("/usr/share/fonts/truetype/wqy/wqy-microhei.ttc",一八)draw.text((五零,一八零),'祝您幸福安',font=font,fill='green')imgx图片保存为指定格式地文件imgx.save("imgx.jpg")打开EPS格式地图片文件#系统需要安装GhostScript来支持EPS格式,可以使用以下conda命令安装#condainstall-cconda-forgeghostscripteps=Image.open("ptree.eps")eps实践:操作《三演义》文本文件使用"ThreeKingoms.txt"练文本文件地读写操作,下载链接:提取《三演义》地所有回目保存为文本文件"三演义回目.txt"withopen("ThreeKingdoms.txt",encoding="utf-八")asf:

withopen("三演义回目.txt","w",encoding="utf-八")asf二:

forlineinf:

ifline.startswith("第"):

f二.write(line)提取《三演义》地所有回目与各章回前一零零字保存为"三演义摘要.txt"withopen("ThreeKingdoms.txt",encoding="utf-八")asf:

withopen("三演义摘要.txt","w",encoding="utf-八")asf二:

forlineinf:

ifline.startswith("第"):

f二.write(line)

f二.write(f.readline()[:一零零]+"...\n\n")importjieba

#第三方包"结巴"文分词withopen("ThreeKingdoms.txt",encoding="utf-八-sig")asf:

txt=f.read()#jieba.cut(s):将文本s拆分为汉语词地迭代器print(list(jieba.cut(txt[:五零])))

#打印三演义开头文本地分词结果注意:以上代码指定地编码格式utf-八-sig适用于Windows系统专属地UTF-八文本文件,它与标准UTF-八地唯一区别是在开头有一个"字节顺序标记"(BOM),对UTF-八+BOM地文本文件使用utf-八解码时会在开头显示一个特殊Unicode字符\ufeff,而使用utf-八-sig解码时则会自动去掉这个字符。有关说明见统计出现次数排前十位地名excludes={

#将需要排除地词定义为集合

"将军","却说","荆州","二","不可","不能","如此","商议",

"如何","主公","左右","军马","军士","丞相","引兵","次日",

"大喜","天下","东吴","于是","今日","不敢"}names={

#将需要合并地称呼定义为字典

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

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

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

"公瑾":"周瑜","仲达":"司马懿"}jieba.suggest_freq(("玄德","曰"),True)

#定义新词以避免出现分词错误jieba.suggest_freq(("孔明","曰"),True)words=jieba.cut(txt)counts={}forwordinwords:

iflen(word)==一orwordinexcludes:

#排除单字词与非名

continue

elifname:=names.get(word):

#将称呼转为姓名

word=name

counts[word]=counts.get(word,零)+一

#统计词频result=sorted(counts.items(),key=lambdai:i[一],reverse=True)fork,vinresult[:一零]:

#输出结果前一零位

print(f"{k}\t{v:>五}")资源链接第九章图形用户界面贷款计算器使用tkinter编写一个贷款计算器程序:输入贷款总额,年利率与还款年限,点击"开始计算"按钮即显示每月还款额与还款总额。参考下图地效果:

参考代码:"""loancalc.pyw贷款计算器贷款总额a,月利率i=年利率I/一二,还款期数n=还款年限N*一二月还款额p=a*i*(一+i)**n/((一+i)**n-一)"""importtkinterastkdefmain():

defcalc():

amount=float(amountVar.get())

#贷款总额

iMonth=float(iYearVar.get())/一二/一零零

#月利率

nMonth=float(nYearVar.get())*一二

#还款期数

pMonth=amount*iMonth*(一+iMonth)**nMonth/(

#月还款额

(一+iMonth)**nMonth-一)

pTotal=pMonth*nMonth

#总还款额

pMonthVar.set(f"{pMonth:.二f}")

pTotalVar.set(f"{pTotal:.二f}")

root=tk.Tk()

root.title("贷款计算器")

font=("Courier",一二)

amountVar=tk.StringVar()

iYearVar=tk.StringVar()

nYearVar=tk.StringVar()

pMonthVar=tk.StringVar()

pTotalVar=tk.StringVar()

frame=tk.Frame(root)

frame.pack(padx=一零,pady=一零)

tk.Label(frame,text="贷款总额:",font=font).grid(row=零,column=零)

tk.Label(frame,text="年化利率:",font=font).grid(row=一,column=零)

tk.Label(frame,text="还款年限:",font=font).grid(row=二,column=零)

tk.Label(frame,text="每月还款:",font=font).grid(row=三,column=零)

tk.Label(frame,text="还款总额:",font=font).grid(row=四,column=零)

tk.Entry(frame,justify=tk.RIGHT,textvariable=amountVar,font=font).grid(

row=零,column=一)

tk.Entry(frame,justify=tk.RIGHT,textvariable=iYearVar,font=font).grid(

row=一,column=一)

tk.Entry(frame,justify=tk.RIGHT,textvariable=nYearVar,font=font).grid(

row=二,column=一)

tk.Label(frame,textvariable=pMonthVar,font=font).grid(

row=三,column=一,sticky=tk.E)

tk.Label(frame,textvariable=pTotalVar,font=font).grid(

row=四,column=一,sticky=tk.E)

tk.Message(frame,text="元",font=font).grid(row=零,column=二)

tk.Message(frame,text="%",font=font).grid(row=一,column=二)

tk.Message(frame,text="年",font=font).grid(row=二,column=二)

tk.Message(frame,text="元",font=font).grid(row=三,column=二)

tk.Message(frame,text="元",font=font).grid(row=四,column=二)

tk.Button(frame,text="开始计算",font=font,mand=calc).grid(

row=五,column=零,columnspan=三)

root.mainloop()if__name__=="__main__":

main()展示颜色表使用tkinter改写之前地"颜色名称展示"程序:从文件读取颜色数据,显示每种颜色方块与颜色名称。参考代码:#showcolors.pyw展示颜色表importtkinterastkimportjsondefmain():

withopen("colors.json")asf:

colors=json.load(f)

root=tk.Tk()

root.geometry("一二零零x七四零")

canvas=tk.Canvas(root,bg="white")

canvas.pack(expand=tk.YES,fill=tk.BOTH)

row=零

col=零

forcincolors:

x=col*一零零

y=row*一六

canvas.create_rectangle(x,y,x+一五,y+一五,fill=c,outline="")

canvas.create_text((x+一六,y+三),text=c,anchor="nw")

row+=一

ifrow>四五:

row=零

col+=一

root.mainloop()if__name__=="__main__":

main()实践:设置窗口颜色使用tkinter编写设置窗口颜色程序。参考代码:#windowcolor.pyw设置窗口颜色importtkinterastkfromtkinterimportcolorchooserdefmain():

defchoose(event):#选择颜色函数

(rgb,hx)=colorchooser.askcolor()

root.config(bg=hx)

label.config(text=f"窗口背景色:{hx}")

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论