python练习题-答案

发布时间:2020-04-26 16:21:12   来源:文档文库   
字号:

Python练习题库

By郑红波 2017-12-19

一、 填空题

1. Python标准库math中用来计算平方根的函数是 __________。(sqrt

2. Python__________表示空类型。None

3. 列表、元组、字符串是Python_________(有序?无序)序列。(有序)

4. 查看变量类型的Python内置函数是________________。(type()

5. 查看变量内存地址的Python内置函数是_________________。(id()

6. 表达式[1,2,3]*3的执行结果为 ______________________。([1,2,3,1,2,3,1,2,3]

7. list(map(str,[1,2,3]))的执行结果为_____________________。([1,2,3]

8.

已知x=

3,并且id(x)的返回值为496103280,那么执行语句

x+=6之后,表达式

id(x)==

496103280

的值为___________。(False

9.

已知x=3,那么执行语句

x*=6之后,x的值为________________。(18

10.

表达式[3]in[1,2,3,4]的值为________________。(False

11.

假设列表对象aList的值为[3,4,5,6,7,9,11,13,15,17],那么切片aList[3:7]得到的值是

______________________。([6,7,9,11]

12.

使用列表推导式生成包含

10个数字5的列表,语句可以写为

_______________。([5

foriin

range(10)]

13.

假设有列表

a=['name','age','sex']b=['Dong',38,'Male'],请使用一个语句将这两个列表的内

容转换为字典,并且以列表

a中的元素为,以列表b中的元素为,这个语句可以写

_____________________。(c=dict(zip(a,b))

14.

任意长度的

Python列表、元组和字符串中最后一个元素的下标为

________。(-1

15.

Python语句''.join(list('helloworld!'))执行的结果是____________________。('helloworld!'

16. 转义字符\n的含义是___________________。(回车换行)

17. Python语句list(range(1,10,3))执行结果为___________________。([1,4,7]

18. 切片操作list(range(6))[::2]执行结果为________________。([0,2,4]

19. 表达式'ab'in'acbed'的值为________。(False

20. Python3.x语句print(1,2,3,sep=':')的输出结果为____________。(1:2:3

21. 表达式int(4**0.5)的值为____________。(2

22.

达式sorted([111,2,33],key=lambdax:-len(str(x)))

的值为____________。([111,33,2]

23.

已知列表对象

x=['11','2','3'],则表达式max(x)

的值为___________。('3'

24.

表达式min(['11','2','3'])的值为_________________。('11'

25.

已知列表对象

x=['11','2','3'],则表达式max(x,key=len)的值为___________。('11'

26. 语句x=(3,)执行后x的值为_______________。((3,)

27. 语句x=(3)执行后x的值为________________。(3

28. 已知x={1:2},那么执行语句x[2]=3之后,x的值为________________。({1:2,2:3}

29. 字典对象的_____________方法返回字典中的 -值对列表。(items()

30. 使用列表推导式得到100以内所有能被13整除的数的代码可以写作

___________________________________。([iforiinrange(100)ifi%13==0]

31. 表达式3**2的值为_________。(9

32. 表达式3*2的值为___________。(6

33.

已知x=[3,5,7],那么执行语句

x[len(x):]=[1,2]之后,x的值为______________(。[3,5,7,1,2]

34.

表达式

list(zip([1,2],[3,4]))的值为________________________。([(1,3),(2,4)]

35.

已知x=[1,2,3,2,3],执行语句

x.pop()之后,x的值为_____________。([1,2,3,2]

36.

表达式

[xforxin[1,2,3,4,5]ifx<3]

的值为_____________________。([1,2]

37. 表达式[indexforindex,valueinenumerate([3,5,7,3,7])ifvalue==max([3,5,7,3,7])]的值为

__________________。([2,4]

38. 已知 path=r'c:\test.html',那么表达式 path[:-4]+'htm' 的值为__________。('c:\\test.htm'



39.

表达式

'%d,%c'%(65,65)的值为________。('65,A'

40.

表达式

'Thefirst:{1},thesecondis{0}'.format(65,97)

的值为______________________________

'Thefirst:97,thesecondis65'

41.

表达式

':'.join('abcdefg'.split('cd'))

的值为______________。('ab:efg'

42.

表达式

isinstance('abcdefg',str)

的值为____________。(True

43.

表达式

'Helloworld.IlikePython.'.find('python')

的值为________。(-1

44.

表达式

','.join('a

bccc\n\n\nddd

'.split())

的值为______________。('a,b,ccc,ddd'

45.

已知x='123'y='456',那么表达式

x+y

的值为______________。('123456'

46.

表达式

'abcab'.replace('a','yy')的值为___________。('yybcyyb'

47.

已知

table=''.maketrans('abcw','xyzc'),那么表达式

'Hellowworld'.translate(table)的值为

______________________。('Helloccorld'

48.

已知x={'b':1,'a':2}

,那么执行语句x.update({a:3,d:4})之后,表达式sorted(x.items())的值为

____________________。([('a',3),('b',1),('d',4)]

49.

已知x=list(range(20)),那么语句print(x[100:200])

的输出结果为_______________。([]

50.

表达式sorted({'a':9,'b':3,'c':78}.values())

的值为_____________。([3,9,78]

51.

type(1+2*3.14)的结果是:

floatclass

二、 阅读程序

1. 写出下面代码的执行结果。

defJoin(List,sep=None):

return(sepor',').join(List)

print(Join(['a','b','c']))

print(Join(['a','b','c'],':'))

答:

a,b,c

a:b:c

2. k为整数,下述 while循环执行的次数为: 9

k=1000

whilek>1:

print(k)

k=k//2

3. 写出下面代码的运行结果。

defSum(a,b=3,c=5):

returnsum([a,b,c])

print(Sum(a=8,c=2))

print(Sum(8))

print(Sum(8,2))

答:

13

16

15

4. 写出下列程序输出结果

i=1

whilei+1:

ifi>4:

print("%d"%i)

i+=1



break

print("%d"%i)

i+=1

i+=1

5. 写出下面代码的运行结果。

defSum(*p):

returnsum(p)

print(Sum(3,5,8))

print(Sum(8))

print(Sum(8,2,10))

答:

16

8

20

6. 下面程序的执行结果是__________________。(1

s=0

foriinrange(1,101):

s+=i

else:

print(1)

7. 下面程序的执行结果是______________。(1275

s=0

foriinrange(1,101):

s+=i

if i==50:

print(s)

break

else:

print(1)

8. 阅读下面的代码,输出结果为_____________

x=list(range(10))

forindex,valueinenumerate(x):

ifvalue==3:

x[index]=5

else:

print(x)

答:将列表 x中值为3的元素修改为 5

9. 阅读下面的代码,解释其功能:

>>> importstring

>>> x=string.ascii_letters+string.digits

>>> importrandom

>>> print(''.join(random.sample(x,10)))

答:输出由英文字母大小写或数字组成的长度为 10且不重复的随机字符串。

10. 下面的代码输出结果为 _____________。(3

defdemo():

x=5



x=3

demo()

print(x)

11. 下面程序运行的结果为 _______________。([5,6,1,2,3,4]

defdemo(lst,k):

ifk

returnlst[k:]+lst[:k]

lst=[1,2,3,4,5,6]

demo(lst,4)

12. 下面程序运行的结果为 _____appyNewYear!H__________

deffoo(s):

ifs=="":

returns

else:

returns[1:]+s[0]

print(foo('HappyNewYear!'))

13. 下面程序运行的结果是 {1:'aa',2:'bb',3:'ff',6:'dd',87:'ee'}

l1=[1,2,3,6,87,3]

l2=['aa' ,'bb' ,'cc' ,'dd' ,'ee' ,'ff' ]

d={}

for index inrange(len(l1)):

d [l1[index]]=l2[index]printd

14. 下面程序运行的结果为 [32][12] .

list1=[1,2]

list2=list1[::]

list1[0]=3

print(list1,list2)

15. 下面程序运行的结果为 恭喜,你已获得我公司的面试机会 !

age,subject,college=24计算机非重点)

if(age>25andsubject=="电子信息工程 ")or(college=="重点"andsubject=="电子信息工程 ")or

(age<=28andsubject=="计算机"):

print("恭喜,你已获得我公司的面试机会 !")

else:

print("抱歉,你未达到面试要求 ")



16. 下面程序运行的结果为fornuminrange(2,10):

if num%2==0:

continue

print("Findaoddnumer",num)

答案:

Findaoddnumer3

Findaoddnumer5

Findaoddnumer7

Findaoddnumer9

17. 下面程序打印结果:

foriinrange(1,7):



1

21

321

4321

54321

654321



print(''*2*(6-i),end='')

forjinrange(i,0,-1):

print(j,end="")

print()

18.下面程序输入>>>rev(Iloveyou)返回值为youloveIdefrev1(s):

s=s.split()

s1= .join(reversed(s))

returns1

19.阅读程序,打印结果是

1000

defaddInterest(balance,rate):

newBalance=balance*(1+rate)

balance=newBalance

defmain():

amount=1000

rate=0.05

addInterest(amount,rate)

print(amount)

main()

20. 阅读程序,打印结果是

defdemo(newitem,old_list=[]):

old_list.append(newitem)

returnold_list

defmain():



print(demo(



a))



print(demo(



b))



main()



答案:



['a']



['a','b']



21. 阅读程序,打印结果是deffunc5(a,b,*c):

print(a,b)

print("lengthofcis%d,cis"%len(c),c)

func5(1,2,3,4,5,6)

答案:12

lengthofcis4,cis(3,4,5,6)

22. 阅读程序,打印结果是 (2.5,3,4)

defdemo(*para):

avg=sum(para)/len(para)

g=[iforiinparaifi>avg]

return(avg,)+tuple(g)

print(demo(1,2,3,4))

23. 阅读程序,打印结果是deff(w=1,h=2):print(w,h)

f()

f(w=3)



f(h=7)

f(a=3)

答案:12

3 2

1 7

错误

24. 阅读程序,打印结果是

defsort(number1,number2):

ifnumber1

returnnumber1,number2

else:

returnnumber2,number1

n1,n2=sort(3,2)

print('n1is',n1)

print('n2is',n2)

答案:n1is

2

n2is

3

25. 阅读程序,打印结果是 1060

defdemo(m,n):

ifm>n:

m,n=n,m

p=m*n

whilem!=0:

r=n%m

n=m

m=r

return(n,p//n)

print(demo(20,30))

三、程序填空题

1. 下面代码的功能是,随机生成50个介于[1,20]之间的整数,然后统计每个整数出现频率。请把缺少的代码补全。

importrandom

x=[random.____________(1,20)foriinrange(_______)]

r=dict()

foriinx:

r[i]=r.get(i,_____)+1

fork,vinr.items():

print(k,v)

答:

分别填写 randint500

2. 生成包含1000个随机字符的字符串,然后统计前20个高频字符,最后以15个位左对齐输出高频字符,以5个位右对齐输出个数。请把缺少的代码补全。

importrandom

x=string.ascii_letters+string.digits+string.punctuation

y=[ foriinrange(1000)]

d=dict()



forchiny:

d[ch]=d.get(ch,0)+1

items=list(d.items())

items.sort( ,reverse=True)

foriinrange(20):

word,count=items[i]

print( %(word,count))

答案:importstring random.choice(x)key=lambdax:x[1]%-15s%5d

3. 用户输入5,打印如右图字符金字塔图形,请补全代码:

n=input('输入行数:')

foriinrange(1,n+1):



print(



,end=





')



forjinrange(1,2*i):



print('&',



)



print()

答案:n=int(n)''*(n-i)end=''

4. 质因数分解,如输入60,则得到60=2*2*3*5.请补全代码:

x=eval(input("请输入小于 1000的整数:"))

k=2



while



x>1:



if



:



print(k,end="")

x=x//k

ifx>1:

print("*",end="")

else:



答案:



print(x,"="



,end="")x%k==0



k+=1



5. 验证哥德巴赫猜想:一个大于等于6的偶数可以表示为两个素数之和,请补全代码。

importmath



x=eval(input(



输入一个数))



while



x<6



orx%2==1:



#大于



6的偶数



x=eval(input(



输入一个数))



for



n1



in



:



m1=int(math.sqrt(n1)+1)



fori



inrange(2,m1):



#2-sqrt(n1)



if



:



break

else:



m2=math.ceil(math.sqrt(n2)+1)

forjinrange(2,m2):

ifn2%j==0andj



else:

print(x,'=',n1,'+',n2)

答案:range(3,x//2,2)n1%i==0,n2=x-n1,break

6. 右对齐九九乘法表,请补全代码:

foriinrange(1,10):

s1=str(i)+'×'+str(j)+'='+str(i*j)

print( )

print()

答案:forjinrange(1,i+1):,'%8s'%(s1),end=''

7. 输出右边图形,请补充程序:

fori :

print(( *-1))*(2*i.center(30))

foriinrange(6,0,-1):

print( )

答案:in range(6)('* (2*i-1)).center(5*n)

8. 下面代码判断回文串,请补全代码:s='雾锁山头山锁雾'

low=0

high=

whilelow

if :#倒序和顺序不一样

print(s,"不是回文")

low+=1

else:

print(s,"是回文串")

答案:len(s)-1s[low]!=s[high]breakhigh-=1

9. 输出右边图形,请补充程序:

s='''Iamateacher!Youarestudents!'''print('='*30)

print('统计信息'.center(28))

print()item_width=25line=s.count('\n')+1word=s.split()

char=list(s)#包含空格、标点符号w_num=0

forwinword:

w_num+=

print('%-*s%5d'%(item_width-3,' 行数',line))

print('%-*s%5d'%( ,'单词数',len(word)))



print('%-*s%5d'%(item_width-10,' 字符数(包含空格) ', ))

print('%-*s%5d'%(item_width-11,' 字符数(不包含空格) ',w_num))

print('-'*30)

答案:'-'*30len(w)item_width-4len(char)



10. 输出右边图形,请补充程序:

defdemo(t):

print([1])

line=[1,1]

foriinrange(2,t):

forjinrange(0,len(line)-1):

r.append(

)

line=[1]+r+[1]

print(line)

demo(

)

答案:print([1,1])r=[]line[j]+line[j+1]

10



[1]

[1,1]

[1,2,1]

[1,3,3,1]

[1,4,6,4,1]

[1,5,10,10,5,1]

[1,6,15,20,15,6,1]

[1,7,21,35,35,21,7,1]

[1,8,28,56,70,56,28,8,1]

[1,9,36,84,126,126,84,36,9,1]



四、编程题

1. 编写程序,在 D盘根目录下创建一个文本文件 test.txt,并向其中写入字符串 helloworld

答:

fp=open(rD:\test.txt,a+)

print(helloworld,file=fp)

fp.close()

2. 编写程序,生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。(提示:使用切片。

答:

importrandom

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

print(x)

y=x[::2]

y.sort(reverse=True)

x[::2]=y

print(x)

3. 编写函数,判断一个数字是否为素数,是则返回字符串 YES,否则返回字符串 NO。再编写测

试函数。

答:

importmath

defIsPrime(v):

n=int(math.sqrt(v)+1)

foriinrange(2,n):

ifv%i==0:

return'No'

else:

return'Yes'

print(IsPrime(77))



4. 编写函数,模拟Python内置函数sorted(lst)

答:

defsorted(v):

t=v[::]

r=[]

whilet:

tt =min(t)r.append(tt)t.remove(tt)

returnr

print(sorted([1,3,2,4])

5. 编写程序,生成包含20个随机数的列表,然后将前10个元素升序排列,10个元素降序排列,并输出结果。

答:

importrandom

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

print(x)

y=x[0:10]

y.sort()

x[0:10]=y

y=x[10:20]

y.sort(reverse=True)

x[10:20]=y

print(x)

6.编写程序,运行后用户输入

4

位整数作为年份,判断其是

x

y

否为闰年。如果年份能被

400

整除,则为闰年;如果年份

能被4整除但不能被100整除也为闰年。

x<0

0



答:

x=input('Pleaseinputanintegerof4digitsmeaningtheyear:')

x=eval(x)

ifx%400==0or(x%4==0andnotx%100==0):

print('Yes')

else:

print('No')

7. 编写程序,实现分段函数计算,如下表所示。

答:

x=input('Pleaseinputx:')

x=eval(x)

ifx<0orx>=20:

print(0)

elif0<=x<5:

print(x)

elif5<=x<10:

print(3*x-5)

elif10<=x<20:

print(0.5*x-2)



0<=x<5 x

5<=x<10 3x-5

10<=x<20 0.5x-2

20<=x 0



8. 已知有一个包含一些同学成绩的字典,计算成绩的最高分、最低分、平均分,并查找最高分同学,最后打印最高分、最低分、平均分、最高分同学。

scores={"ZhangSan":45,"LiSi":78,"WangWu":40,"ZhouLiu":96,"ZhaoQi":65,"SunBa":90,

"ZhengJiu":78,"WuShi":99,"DongShiyi":60}

highest=max(scores.values())

lowest=min(scores.values())

average=sum(scores.values())/len(scores)

highestPerson=[nameforname,scoreinscores.items()if/score==highest]#分行print(highest,lowest,average,highestPerson)

9. 统计不及格的学生及成绩,要求:给定一些学生姓名和成绩;询问用户是否还需要输入更多的学生姓名和成绩,用户回答是就继续输入,继续询问;打印所有补考学生名单和成绩。

d=[["张三",76],["李四",45],["王五",83],["郑六",66],['a',54],['c',68],['b',89]]s1=input("输入数据YorN:").strip()#去掉前后空格

whiles1=='Y':

s2=input("请输入学生及成绩(空格隔开) ")

name,grade=s2.split()

d.append([name,grade])

#d[name]=int(grade)

s1=input("继续输入 YorN:").strip()

else:

print(d)

print("不及格的名单 :")

forname,gradeind:

iffloat(grade)<60:

print("姓名:",name,"\t","成绩:",grade)

10. 由用户一个一个输入一个数值型列表,然后将每个元素逐一打印。

lst=[]

n=eval(input( 请输入数字个数: ))

foriinrange(n):

number=eval(input( 请输入数字: ))

lst.append(number)

forvalueinlst:

print(value,end=’’)



11.序列求和,n通过用户输入:

1

1

1

1

3

...

n=int(input(请输入N的值:))

2

4

s=0

fh=1

foriinrange(1,n+1):

s+=fh*1/i

#求和语句

fh=-fh

#正负交替

print("1-1/2+1/3-1/4...+(-1)^(n-1)/n=" ,s,i)

12. 生成一个包含50个两位随机整数的列表,然后删除其中的所有奇数

lst=[random.randint(1,100)foriinrange(50)]print('50个随机两位整数:',lst)k=len(lst)-1



( 1)n11

n

(提示从后向前删 )



foriinrange(k,-1,-1):#从后往前删,减少列表元素移动

iflst[i]%2==1:

lst.pop(i)

print("偶数为",lst)

13. 恺撒(kaisa)密码:原文: ABCDEFGHIJKLMNOPQRSTUVWXYZ ,对应的密文为:

DEFGHIJKLMNOPQRSTUVWXYZABC ,请设计程序实现之。

plaincode=input('请输入明文:')

forpinplaincode:



if



'a'<=p<='z':



c=chr(ord('a')+(ord(p)-ord('a')+3)%26)



#ord是字符编码的值,都减掉 ord('A')才可以得到字符的顺序

print(c,end='')

elif 'A'<=p<='Z':

c=chr(ord('A')+(ord(p)-ord('A')+3)%26)

print(c,end='')



0-25



else:

print(p,end='')

14. 如果一个字符串从前往后和从后往前读时是一样的,那么这个字符串就是回文串。请编写一个函数判断是否为回文串,同时编写测试代码检验回文串。

defisPalindrome(s)

ifs==s[::-1]:#切片操作,倒序和顺序一样returnTrue

else:

returnFalse

s=input('inputastring:')ifisPalindrome(s):

print(is%sapalindrome!%s)else:

print(is%snotapalindrome!%s)

15. 输入一串字符,统计每个字符数,用字典输出.

s=input("输入一行字符串或句子: ")

char_counts={}

forcharins:

char_counts[char]=char_counts.get(char,0)+1



print(char_counts)



16. 生成包含 100个随机字符的字符串,然后统计前



20个高频字符



.



importstring,random

str1=string.ascii_letters+string.digits

str1=str1.lower()

str2=[random.choice(str1)foriinrange(100)]

print(str2)

str_count={}

forcharinstr2:



str_count[char]=str_count.get(char,0)+1

print(str_count)

items=list(str_count.items())



items.sort(key=lambdax:x[1],reverse=True)



#以数量降序



foriinrange(20):

word,count=items[i]



print("%-15s %5d"%(word,count))



#-表示左对齐,



s表字符,



d表示整数



17. 统计HarryPotterSorcerStone.txt 文件中的英文单词及其数量

filename=r'HarryPotterSorcerStone.txt'

infile=open(filename,"r")#Openthefile

txt=infile.read()



,打印出单词及其个数



words=txt.split() #以空格分割单词

words_counts={}

forwordinwords:

words_counts[word]=words_counts.get(word,0)+1

print(words_counts)



18. 读取文本文件 data.txt中所有整数,将其排序后写入文本文件

withopen('data.txt','r')asfp:

data=fp.readlines() #文件全部读完返回字符列表



data_asc.txt.



print(符列表,data)

data=[int(line.strip()) forlineindata]

data.sort()



#列表的数据变成整数



withopen(



n foriindata] #数字后加换行符

data_asc.txt ,'w')asfp:

fp.writelines(data)#一次全部写入



19. 编程,如图,在文件 score.txt中写入五名学生的姓名、学号和 3门考试课的成绩,然后将所有

两门以上(含两门)课程不及格的学生信息输出到文件 bad.txt、其他学生信息输出到 pass.txt



fw=open(r'score2.txt','w')

s=['张三,','2017010101,','66,','77,','88','\n']

fw.writelines(s)

fw.write('李四,2017010102,60,70,80\n')

fw.write('王五,2017010103,64,73,82\n')

fw.write('赵六,2017010104,56,67,48\n')

fw.write('钱七,2017010105,46,57,68\n')

fw.close()

f1=open(r'score2.txt','r')

f2=open(r'bad2.txt','w')

f3=open(r'pass2.txt','w')

lines=f1.readlines()

forlineinlines:

data=list(line.split(','))

print(data)#['张三','2017010101','66','77','88\n']

k=0



foriindata[2:]:

ifint(i)<60:

k+=1

ifk>=2: #两门以上(含两门)课程不及格

f2.write(line)

else:

f3.write(line)

f1.close();f2.close();f3.close()

本文来源:https://www.2haoxitong.net/k/doc/c9e5ee157e192279168884868762caaedc33ba9a.html

《python练习题-答案.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式