Python程序设计基础课后练习题答案1-13章全_第1页
Python程序设计基础课后练习题答案1-13章全_第2页
Python程序设计基础课后练习题答案1-13章全_第3页
Python程序设计基础课后练习题答案1-13章全_第4页
Python程序设计基础课后练习题答案1-13章全_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

第一章

判断题:1*4:VXVV

第二章

判断题:1-5:VXXVV6-10:XXVVV

11-15:XVVXV

添加代码题:

1.我们都知道,下面的代码:

print*7likewritinginPython.,z

printuItissomuchfun.”

型后,运行结果为:

IlikewritinginPython.

Itissomuchfun.

你能只用一行代码实现上述技果吗?

第3章习题参考答案:

一、选择题

ABABB

二、简答题

1.break或continue语句用来提前跳出循环,即循环条件没有满足False时或者序列还没

被完全递归完,也会停止执行循环语句。其中,continue语句用于跳出本次循环,而

break用于跳出整个循环。

该程序段的功能是检查用户输入的用户名及密码是否正确,输入正确则显示“登录成

功”;输入错误则由用户重新输入,但输入错误次数超过3次则不允许再次输入,直接显示

“登录失败”。break在此程序段中的作用是当输入用户名和密码正确时或输入错误次

数超过3次时直接结束循环。

2.Python语句代码缩进的书写原则:在逻辑行首的空白(空格和制表符)用来决定逻辑

行的缩进层次,从而用来决定语句的分组。这意味着同一层次的语句必须有相同的缩进。

有相同的缩进的代码表示这些代码属于同一代码块。

代码段1和代码段2的区别在于“print(sum)”这个语句的位置。在代码段1中,

aprint(sum)"和*'foriinrange(lO):"在同一层次,表示它们是并列的语句,

Uprint(sum)"不在循环体内,所以循环结束后才输出sum的值;而在代码段2中,

Mprint(sum)n在循环体内,表示每循环一次都会输出一次sum的值。

3.错误1:循环嵌套代码的缩进

错误2:range(L4)只是包括12,3,不包括4。所以要改成range(l,5)

错误3:if(i!=j!二k)的写法不对。改为if(i!=jandj!=k)

4.输出结果

>>>

1

3

5

5.bonusl=100000*0.1

bonus2=bonusl+100000*0.500075

bonus4=bonus2+200000*0.5

bonus6=bonus4+200000*0.3

buriuslO-bunus6+400000*0.15

i=int(raw_input('inputgain:\n'))

ifi<=100000:

bonus=i*0.1

elifi<=200000:

bonus=bonusl+(i-100000)*0,075

elifi<=400000:

bonus=bonus2+(i-200000)*0,05

elifi<=600000:

bonus=bonus4+(i-400000)*0.03

elifi<=1000000:

bonus=bonus6+(i-600000)*0,015

else:

bonus=bonuslO♦(i-1000000)*0.01

print'bonus=bonus

6.

ifscore>=90:

print("A")

else:60<=score<90:

print("B")

else:

print("C")

7.

str=input("enterasentence:")

forcharinstr:

if65<=ord(char)<=90or97<=ord(char)<=122:

print(“英文字母”)

eliford(char)==32:

print("空格“)

elif48<=ord(char)<=57:

print("数字”)

else:

print(“其它字符”)

8.

numl=l

num2=2

sum=0

foriinrange(l,21):

sum=num2/numl

num2=numl+num2

numl=num2

print(sum)

9.

riuni=inl(inpuL("enterariurn:"))

i=0

whilenum>0:

print(num%10,end=")

i+=l

num=num//10

print("\n这个数是%d位数"晰)

10.

foriinrange(100,1000):

ifi%7==0andi//10%10==2:

print(i)

11.

j=0

foriinrange(2000,2501):

ifi%400==0ori%4==0and%100!=0:

i+=i

print(i,end="")

ifj%8==0:

printf'")

12.

i=7

whileTrue:

ifi%2==landi%3==2andi%4二二3andi%5二二4andi%6==5andi%7==0:

print(i)

break

i+=l

13.

total=13

i=0

whiletotal<=26:

total=total*(l+0.008)

i+=l

print(i)

14.

num=int(input("pleaseenternum:"))

flag=True

fori=2tonum-1:

ifnum%i==0:

flag=False

ifflag:

print("%d是素数"%num)

else:

print("%d不是素数"%num)

15.

k=0

foriinrange(l,1001):

flag=True

forjinrange(2,i):

ifi%j==0:

flag=False

ifflag:

k+=l

print(i,end='')

ifk%10==0:

print("")

k=l

16.

a=int(input("entera:"))

b=int(input("enterb:"))

c=int(input("enterc:"))

ifa<b:

a,b=b,a

ifa>c:

ifb>c:

print(a,b,c)

else:

print(a,c,b)

else:

print(c,a,b)

三、实训题

1.求最大公约数代码参考书上例3.6。求出最大公约数后即可相应求出最小公倍

数。

2.求1!+2!+3!+…+20!

参考代码:

sum=0

foriinrange(l,21):

t=l

forjinrange(l,i+l):

t*=j

sum+=t

print(sum)

3.输出斐波那契数列的前20项

参考代码:

fl=l

f2=l

furiinranye(l,21);

print(fl,f2)

fl+=f2

f2+=fl

4.编程找出1000之内的所有完数,并输出其因子。

参考代码:

1=[]

forninrange(1,1001):

forainrange(l,n):

ifn%a==0:

l.append(a)

ifsum(l)==n:

print(I)

print(n)

1=0

5.输出九九乘法表

参考代码:

forxinrange(lt10):

foryinrange(l,x+l):

r=x*y

print(1%d*%d=%-2d,%(y,x,r),'[end=”)#%d格式化成整数,-代表左对齐.

数字代表占位。

print(end二",)#这一句代表,每次遍历完一个周期换行,并下一次遍历的结果将从

该行输出。如果是print。将从下一行开始输出。

6.输入一系列数字,并求和与求平均数。

sum=0.0

i=0

num=int(input("请输入数字,以。结束”))

whilenum!=0:

sum+=num

num=int(inputC'请输入数字,以0结束"))

i+=l

average=sum/i

print("加起来总数为%d,平均数蜥"%(sum,average))

第4章课后练习答案:

一、填空题:

1.'fi/e/l/l/oZ/w/u/r/l/d/!'2.回车换行3.FHse4.(1)slr[-l::-l](2;str.upper()(3)blr[5:12]

(4)str[::2](5)7,.join(list(str))

(6)'www.sina.www.gdpu.www.good.www.tianya’.replace('www','万维网')

5.,c:\\test.htm'6.17.'HELLOWORLD'8.True9.1123456'lO.True

二、简答题:

1.假设有一段英文,其中有单词中间的字母“i”误写为T,请编写程序进行纠正。

x="iamateacher,iamman,andiam38yearsold.Iamnotabusinessman."

x=x.replace('i','1')

print(x)

2.有一段英文文本,其中有单词连续重复了2次,编写程序检查重复的单词并只保留一

个。例如文本内容为uThisisisadesk.",程序输出为'Thisisadesk."

x='Thisisaadesk."

pattern=pile(r,(?P<f>\b\w+\b)\s(?P=f),)

matchResult=pattern.search(x)

x=x.replace(matchResult.group(0),matchResult.group(l))

print(x)

3.编写程序,用户输入一段英文,然后输出这段英文中所有长度为3个字母的单词。

importre

words=input("lnputthewords:")

l=re.split(1[\.]+,,words)#使用空格分隔词语,得到各个单词

print(l)

i=0#这里我设置的是计数器

foriinI:

iflen(i)==3:#如果单词的长度为3输出

print(i)

else:

print。)

4.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此

时共有5个数相加),几个数相加由键盘控制。

num=int(input("请输入一个数字"))

count=int(input("请输入数字的位数”))

sum=0

temp=0

foriinrange(count):

temp+=num*10**i

print(temp)

sum+=temp

print(sum)

5.一个数如果恰好等于它的因子之和,这个数就称为完数。例如6=1+2+3。编程找出1000

以内的所有完数。

#encoding:utf

n=input("Pleaseinputanumber!")

sum=O

printS=""

furiinrange(l,n):

ifn%i==0:

sum=sum+i

ifsum>n:

print"%dis不足数'驰n

elifsum<n:

print"%dis丰沛数

else:

print"%dis完数"%n

printS=str(n)+"="

foriinrange(l.n):

ifn%i==0:

printS+=str(i)+"+"

printprintS[O:len(printS)-l]

6.打印出如下图案。

(1)

foriinrange(l.lO):

print(''*(10-i),end=")

print(str(i)*(2*i-l))

n="123456789"

foriinn[-l:0:-l]:

s=n[-l:int(i)-2:-l]

print("%s*%d+%d=%d"%(s.9,int(i)-2,int(s)*9+int(i)-2))

实战作业

lx输入一串字符串,判断它是不是回文数。如MadamJmAdam是回文数。

提示要把一串字符中所有的标点符号去除,并把所有的大写字符变成小写字符再进行比较。

如“MadamJmAdam",转化后变成"madamimadam”,正读与逆读是一样的,为回文。

importstring#导入字符串函数库

string,punctuation='!"#$%&\'()*+,-./:;<=>?@[\\]A_'{|}-'

string.whitespace='\t\n\xOb\xOc\r'

importstring

originalStr=raw_input("enterastring:")

modifiedStr=originalStr.lower()

badChars=string.whitespace+string.punctuation

forcharinmodifiedStr:

ifcharinbadChars:

modifiedStr=modifiedStr.replace(char,"")

print"theoriginalStris:%s\nthemodifiedStris:%s\nthereverseStr

is:%s"%(originalStr,modifiedStr,modifiedStr[::-l])

ifmodifiedStr==modifiedStr[::-1]:

print"字符串%s是回文"%originalStr

else:

print"字符串%s不是回文写originalStr

2.计算Poker中出现各种手数的概率,现给出Poker-hand-testing.data文件,其中有

1000000条记录,要求读出每一条记录,并统计以下问题:

以下是每条记录的格式:

3,10,1,7,2,12,4,2,2,1,0

4,9,4.12,4,13,2,6,3,4,0

3,2,2,2,3,12,3,1,4,2,3

4,11,2,8,1.13,4,7,1,7,1

4,8,3,8,1,3,1,4,3,7,1

2,7,2,5,3,10,4,13,3,7,1

1,4,3,4,3,5,4,10,2,10,2

以下是各种类型的牌的编号:

图4-9牌的类型

要求:(1)计算Poker有多少行;

(2)计算包含1对牌的总手数与出现的概率;

(3)计算所有牌类型出现的手数及概率。

#countpokerhands

ft1.openthepokerdatafileforreading

poker_file=open("poker-hand-testing.data",'r')

total_count_int=0#2.createandinitializevariabletoholdthetotalcount

pair_count_int=0#createandinitializevariabletoholdpaircount

#3.Loopthrougheachlineofthefile

forline_strinpoker_file:

total_count_int=total_count_int+1#(a).addonetotalforeachhand

fields=line_str.split(',')#(b).splitonacomma

hand_rank_str=fields[-l]#andgetthelastfield

hand_rank_int=int(hand_rank_str)

ifhand_rank_int==1:#(c)ifhandRankis1(itisapair)

pair_count_int=pair_count_int+1#addonetopaircount

printf'Totalhandsinfile:",total_count_int)#4.printthevalues

print("Countofpairhands:",pair_count_int)

print("Probabilityofapair:{:>9.4%}".format(pair_count_int/total_count_int))

3.智多星游戏:

计算机随机产生4种不相同的颜色序列,玩家不知道,让玩家输入四种颜色,与计算机随机

产生的序列作比较,如果全部相同则显示猜对了,否则重新输入,设定总的输入次数,超过

总次数,则失败。

要求如下:(1)设定总的尝试次数。

(2)如果输入的颜色与随机序列在位置与颜色都相符,则打印“★二

(3)如果输入的颜色与随机序列的颜色相符,但是位置上不相符,则打印

(4)如查输入的颜色与位置都不对,则打印

(5)当输入的颜色与位置都对了,就显示猜对了。

(6)如果超过总的输入次数,就显示失败。

#encoding:gbk

importrandom

importwinsound

i=0

s="RYBGCOPW"

str=""

i=o

corr=""

#产生四个随机颜色与位置,并不能重复

whilej<4:

tempChar:random.choice(s)#生成一个随机字符

iftempCharnotinstr:

str+=tempChar

j+=l

#循环12次

whilei<=12:

print"Thisisthe%dthtry"%(i+l)

inputColor=raw_input("Pleaseenter4colors(\"RYBGCOPW\"):")

iflen(inputColor)!=4:#长度超过4个字符或者不够4个字符不予判断,请注意Continue

的用法

print"WRONGENTER!\nYoumustenter4color(\"RYBGCOP\A/\")!"

continue

forkinrange(0,4):#对每一种颜色进行判断

ifinputColor[k]==str[k]:

corr+="*"

elifinputColor[k]!=str[k]andinputColor[k]instr:

corr+="*

else:

uorr+=">"

printcorr

ifcorr二二“★★★

print"Bingo"

winsound.Beep(400,2000)

break

else:

corr=""

i+=l

else:

prinf'YouLost!"

第五章习题答案

一选择题

l.C2.B3.C4.B5.C6.B7.A

二简答题

1.相对路径是相对于什么7

答:相对路径相对于当前工作目录

2.绝对路径从什么开始?

答:绝对路径总是从根目录开始

3os.getrwd。和os.chdir。分别是做什么?

答:os.getcwd。获得当前工作目录,os.chdir。改变工作目录。

4.可以传递给open。函数的3种模式参数是什么?

答表示以读的方式打开文件;w,表示以写的方式打开文件;a,表示以追加的方式

打开文件。

5.read。和readlines。之间的区别是什么?

答:read。在未指定字符个数情况下会读取尽可能多的字符,有可能到文件末尾;

「eadlines。则按行的方式读取文件,返回一个列表,每一行为列表中的一个元素。

三编程题

1.

importos

os.mkdir("mydir")

os.chdir("mydir")

fi=open("mydoc.txt","w")

while(l):

str=input();

ifstr=="exit":

break;

fi.write(str)

fi.close()

2.

importos

os.mkdir("mydir")

os.chdir("mydir")

,,

fl=open("myfile.txt/"w")

str="Iloveprogrammingwithpython"

fl.write(str)

fl.close()

f2^open("myfileback.txt"/"w")

fl=open("myfile.txt","r")

str=fl.read()

f2.write(str)

fl.close()

f2.close()

3.

fileName=input:(”请输入文件名”)

f=open(fileNamez"r")

str=f.read()

words=str.split()

lines=str.split("\n")

print("字符数:",len字tr))

print。'单词数:"JenCwords))

print。'行数:"Jen(lines))

4.

fileName=input(”请输入文件名”)

f=open(fileName,"r")

str=f.read()

scores=str.split()

total=0

num=0

forsinscores:

total+=float(s)

num+=l

print("thereare”,num,"scores")

print("thetotalscoresis:",total)

print("theaveragescoreis:",total/num)

5.电子表格操作

电子表单程序比如MicrosoftExcel都有一个选项,可以将数据导出为CSV格式。在

本练习中,创建程序,读取电子表格(CSV格式)并操纵它。程序应具有以下功能:

(1)显示数据

(2)删除行或列

(3)插入行或列

(4)更改指定单元格中的数据

(5)输出CSV格式的数据

其中要考虑的问题有:

使用CSV模块,读取电子表格,选择恰当的数据结构来存储数据。该用列表、元组还

是字典?

在程序中使用循环,提示输入上述操作的名字。接口方式是用单个字母来表示相关操作,

例如“d”表格删除。

一、填空题:

1.True2.True3.[6,7,9,11]4,[5foriinrange(l.ll)]5.-16.[1,4,7]

7.[0,1,2,3,4]8.del9.False10.14ll.[iforiinrange(l,ll)]

12.[iforiinrange(l,ll)][4:8]13.L2[4]='bad';len(L2);L2.append('people');L2.sort();L2.pop()

二、简答题:

l.[iforiinrange(l,21)]

2.[iforiinrange(2,21,2)]

3.[chr(i)foriinrange(65,91)]

4.list(str)

5.".join(strList)

6.7'.join(list(str))

7.略。

8.mportrandom

v=[random.randint(0,100)foriinrange(20)]

print(v)

a=v[l:10]

a.sortfi

b=v[ll:20]

b.sort()

b.reverse()

print(a)

print(b)

c=a+b

print(c)

9.strList=[chr(i)foriinrange(65,91)]

strAII=|]

furiinranye(l,27):

strAll.append(strList[:i:])

print(strAII)

10.略

11.首先sorted和sort的区别主要在于sorted是将排序完的数据赋予给一个新变量,而

sort则是在原变量的基础上直接进行排序,不产生新变量。

sorted是内建函数,而sorted是类函数,其使用必须跟在对象后面。

12.IP.splitC,')

13.略

14.可以,可以

15.列表是可以修改的,(2,3)为列表中的一个对象,可以被替换,但是它本身是不能修改的.

如(2,3)改成(2,4)就不行。

元组是不能修改的,元组中的对象并没有被修改。只是元组中有个一个对象是列表,列

表本身可以修改,但是对象没有变。

实战作业

1.凯撒密码

(1)Text='ABCDEFGHIJKLMNOPQRSTUVWXYZ,

Cipher='DEFGHIJKLMNOPQRSTUVWXYZABC,

words=input("pleaseinputwords:")

str=""

words=words.upper()

forcharinwords:

ifcharinText:

str+=Cipher[Text.index(char)]

printstr

(2)Text='ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Cipher='DEFGHIJKLMNOPQRSTUVWXYZABC

words=input("pleaseinputwords:")

str=""

words=words.upper()

forcharinwords:

ifcharinCipher:

str+=Text[Cipher.index(char)]

printstr

2.编程实现《葛底斯堡演说》中单词的统计(gettysburg.txt)o

speach=[]

unique二口

temp=[]

count=0

file二openCgettysburg.txt"Jr")

allwords=file.readlines()

forwordsinallwords:

Lt?nip-wurds.spliL()

speach.extend(temp)

print("总共有%d个单词"%len(speach))

forwordinspeach:

ifwordnotinunique:

unique.append(word)

printunique

一、选择题

1、C2、B3、C

二、问答题

1、字典是Python语言中唯一的映射类型。映射类型对象里哈希值(键,key)和指向

的对象(值,value),通常被认为是可变的哈希表。字典对象是可变的.它是一个容器类型,

能存储任意个数的Python对象,其中也可包括其他容器类型。

字典是Python中最强大的数据类型之一,它与列表、元组等其它序列类型的主要区别

有以下几点:

(1)存取和访问数据的方式不同

(2)映射类型中的数据是无序排列的。这和序列类型是不一样的,序列类型是以数值序排

列的;

(3)映射类型用键直接“映射”到值。

(4)字典支持索引操作(索引值为键值),但不支持切片操作,因为切片操作是针对索引值

具有连续的,而字典的键不具备连续性。

(5)字典中的键必须是不可变且不重复,值可以是任何类型。

2、

(1)直接创建字典

创建一个空的字典

>>>mydict={}#创建一个空的字典

>>>mydict#输出此字典的内容

{}

(2)通过diet函数创建字典

diet函数是字典类的构造函数,也可以利用此函数来创建字典。

创建一个空字典:

>>>dict()

{)

3、

(1)get函数:访问字典成员

get。函数根据key获取值。

,,

>>>d={one':lz'two':2/three:3}

>>>print(d.get('two'))

(2)copy函数:返回一个具有相同键值的新字典

,,,,,,

>>>x={'one:l;two':2zthree':3/'test':[a/b7c]}#创建一个字典x

>>>print(x)#输出字典x

{'one':1,'two':2,'test':['a"z'b'z'c']z'three':3}

(3)pop函数:删除字典中对应的键

Pop函数可以删除字典中的键及其对应的值。

,,

>>>d={'one':lztwo':2/'three:3}

>>>d.popCtwo')#删除键'two'

(4)fromkeys函数:用给定的键建立新的字典

fromkeys函数可以用给定的键建立新的字典,键默认对应的值为None

>>>d=dict.fromkeys(['one'/two7three'])

(5)update函数:用一个字典更新另外一个字典

update函数可以用一个字典来更新另外一个字典。操作如下:

>>>d={

'one':123z

'two':2,

'three':3

)

实战作业:

1、

略(参考书中宁典操作举例)

2、

defgetdict(phone):

A=[iforiinrange(0,10)]

,,,

B=["zero","one"z"two"z"three,"four"/'five","six","seven","eight","nine"]

mydict=dict(zip(A,B))

foriinphone:

printmydict[int(i)]

defmain():

phone=raw_input("Pleaseenteraseriesphonenumber:")

getdict(phone)

main()

3、

importstring

defMostran(wholetext):

f=open("e:\\Mos.txt","r")

Mostext=""

forlineinf:

Mostext+=line

f.close()

Lwhole=Mostext.split()

Ll=Lwhole[::2]#这种间隔分片出来就是列表

L2=Lwhole[l::2]

MosDict=dict(zip(Ll,L2))

forcharinwholetext:

printMosDict[char]

defmain():

temp=raw_input("Enterapassage:")

temp=temp.upper()

wholetext=n"

forcharintemp:

ifcharnotinstring.whitespace+string.punctuation:

wholetext+=char

translation=Mostran(wholetext)

main()

第9章习题答案

一选择题

l.B2.C3.B4.D

二简答题

1、什么是异常?

答:异常是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况

下,在Python无法正常处理程序时就会发生一个异常。当Python脚本发生异常时我们需

要捕获并处理它,如果不处理,并且调用此程序的上层程序也不处理,程序会终止执行

2、异常和错误的区别?

答:错误通常是语法错误,是编程人员错误地使用语法、错误地键入字符等原因造成,这需

要编程人员不断提高编码能力来避免。异常是语法正确的代码在执行过程中遇到的无法处理

的情况,比如除数为0,数组越界等,这需要编程人员通过捕获异常来避免程序崩溃,以提

高程序的健壮性。

3、简述处理异常的一般结构?

异常处理结构如下:

I

■vbody>・

except<ExceptionTypel>:

<handlerl>

except<ExceptionTypeN>:

<handlerN>

except:

#上一句except分支不指定任何类型的异常,表示可以匹配任何异常类型。

<handlerExcept>

else:

■vprocos工

finally:

<process_finally>

4

答:A、statements不会执行。

B、statement4不会执行

C、statement会执行

5程序输出ulndexoutofbound"

6程序输出:

Done

Nothingiswrong

Finallywearehere

Continue

7程序输出:

Indexoutofbound

Finallywearehere

Continue

8ArithmeticError被先捕获,而它是ZeroDivisionError的父类,因此即便是因除数为0而抛

出异常,也是被except:AiithmeticEir。分支捕获,而不会被后面的except:ZeroDivisionError

分支捕获。因此,后面的分支永远不会被执行。

一、选择题

l.C2,A

二、简答题

1.wxPylhon中子语句块采用缩进方式编写,有子语句的语句以皆号结束,所有该行下

的缩进行都属于以该冒号终止的语句。当缩进回复到原来的缩进时,这一块子语句

块就结束了。

2.包括但不限于wx.RadioBox,wx.CheckBox,wx.ToolBar,wx.Dialog等

三、实战作业

1.

importwx

classMyFrame(wx.Frame):

def_init_(self,parent,title):

wx.Frame._init_(self,parent,title=title,size=(800,800))

self.control=wx.TextCtrl(self,style=wx.TE_MULTILINE)

self.Show(True)

app=wx.App(False)

frame=MyFrame(None,'我的小型编辑器’)

app.MainLoop()

2.略

3.略

一、选择题

1.B2.B3.A4.B

二、简答题

1.对象是对某个具体客观事物的抽象,类是对对象的抽象描述,在计算机语言中是一种抽

象的数据类型。类定义了数据类型的数据(属性)和行为(方法)。类与对象的关系是,对

象是类的实例,类是对象的模板。

2.面向对象程序设计具有如下优点:

(1)符合人们习惯的思维方法,便于分解大型的复杂多变的问题。由于对象对应于现实世

界中的实体,因而可以很自然地按照现实世界中处理实体的方法来处理对象,软件开发者可

以很方便地与问题提出者进行沟通和交流。

(2)易于软件的维护和功能的增减。对象的封装性及对象之间的松散组合,都给软件的修

改和维护带来了方便。

(3)可重用性好。重复使用一个类(类是对象的定义,对象是类的实例化),可以比较方便

地构造出软件系统,加上继承的方式,极大地提高了软件开发的效率。

(4)与可视化技术相结合,改善了工作界面。随着基于图形界面操作系统的流行,面向对

象的程序设计方法也将深入人心。它与可视化技术相结合,使人机界面进入GUI时代。

3.Python定义一个类使用关键字class声明,类的声明格式如下:

classclassName:

类体

4._init_。方法是类的构造方法,用于执行类的实例的初始化工作创建完实例后调用,

初始化当前对象的实例,无返回值。

5.非绑定方法不与类或对象绑定,类和对象都可以调用,但是没有自动传值。

6.self指的是类实例对象,不是类

7.继承反应客观世界中各类事物之间的一种''一般和特殊〃的关系。继承是指类之间有继承关

系,子类有条件地继承父类的特征。对象的一个新类可以从现有的类中派生出来,这个过程

称为类继承。例如''教师〃、''学生"是''人〃的一种,''人〃是父类,''教师〃、''学生〃继承''人〃的

特性。

多态一般指具有多种形态的能力。对象的多态是指在一般类中定义的属性或操作被特殊

类继承后,可以具有不同的数据类型或表现出不同的行为。利用多态性,用户可以发送一个

通用的信息,而将所有的实现细辛都留给接收消息的对象自行决定,这意味着同一消息即可

调用不同的方法。例如:Print消息被发送给一个图或表时调用的打印方法与将同样的Print

消息发送给一个正文文件而调用的打印方法会完全不同。

8.私有属性指的是只有在类方法中才能访问私有属性,对象不能直接访问私有属性。公有属

性可以被对象直接访问。通常,约定两个下划线开头,但是不以两个下划线结束的属性为私

有属性,其它的都是公有属性。

9.实例方法:在类中最常定义的成员方法,它至少有一个参数并且必须以实例对象作为其

第一个参数,一般以''self〃作为第一个参数。在类外,实例方法只能通过实例对象去调用。

实例方法的声明格式如下:

def方法名(self,[形参列表]):

函数体

类方法不对特定实例进行操作,在类方法中访问实例属性会导致错误。类方法需要用

修饰器”@classmethod”来标识其为类方法。对于类方法,第一个参数必须是类对象,一

般以“ds”作为第一个参数,类方法可通过实例对象和类对象去访问。类方法的声明格式如

下:

@classmethod

def类方法名(cis,[形参列表]):

函数体

静态方法是与类的对象实例无关的方法。静态方法不对特定实列进行操作,在静态方

法中访问对象实例会导致错误。静态方法需要通过修饰器”@staticmethod”来进行修饰,

声明格式如下:

@staticmethod

def静态方法名([形参列表])

函数体

10.将学生信息封装成一个类Student,包括姓名、性别、年龄、家庭地址。并在display。

方法中显示这些信息。

classStudent:

def_init_(self,name,sex,agezhome_addr):

=name

self.sex=sex

self.age=age

self.home_addr=home_addr

defdisplay(self):

print('Iamastudent,mynameis%sz%syearsold,sexis%sz

home_addris%s‘%(,self.age/self.sexzself.home_addr))

11.设彳一个类代表长方体,含有长、宽、高三个对象属性,含有计鼠体积的公有方法、计

算表面积的公有方法。编写主程序,生成一个一般长方体,生成一个正方体。

classRectangle:

def_init_(self,length,width,high):

self.length=length

self.width=width

self.high=high

defvolume(self):

returnl.O*self.length*self.width*self.high

defsurface(self):

return

2.0*(self.length*self.width+self.length*self.high+self.width*self.high)

cuboid=Rectangle(3.1,4.2,5.1)

vol=cuboid.volume()

sur=cuboid.surface()

print('cuboidvolumeis%sandsurfaceis%s'%(volzsur))

cube=Rectangle(2z2,2)

vol=cube.volume()

sur=cube.surface()

print('cubevolumeis%sandsurfaceis%s'%(volzsur))

12.定义一个类代表三角形,类中含三条边、求周长的函数,求面积的函数。

#程序无三边是否满足三角形限制的判断(三边大于0,任意两边之和大于第三边)

classTriangle:

def—init_(self,a,b,c):

self.a=a

self.b=b

self.c=c

defcircle(self):

returnself.a+self.b+self.c

defarea(self):

p=(self.a+self.b+self.c)/2.0

returnpow(p*(p-self.a)*(p-self.b)*(p-self.c),0.5)

c=tri.circle()

a=tri.area()

print('circleis%sandareais%s:'%(cza)))

三、实战作业

1.创建一个Point类表示二维坐标平面的点,定义实例属性x和y表示坐标对值。

classPoint:

def_init_(self,xzy):

self.x=x

self.y=y

defdistance(self,pt):

returnpow((pow[self.x-pt.x/2)+pow(self.y-pt.y,2))/0.5)

defsum(self,pt):

newx=(self.x-i-pt.x)

newy=(self.y+pt,y)

returnPoint(newxznewy)

p0=Point(0,0)

pl=Point(lzl)

p2=Roint(2z2)

p3=Point(l,3)

pl.d

温馨提示

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

评论

0/150

提交评论