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. 下面程序运行的结果为 [3,2][1,2] .
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)
答:
分别填写 randint、50、0
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)-1,s[low]!=s[high],break,high-=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)
答案:'-'*30;len(w);item_width-4;len(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(r’D:\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
文档为doc格式