完整word版,python练习题-答案 下载本文

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

学,最后打印最高分、最低分、平均分、最高分同学。

scores = {\\ highest = max(scores.values()) lowest = min(scores.values())

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

highestPerson = [name for name, score in scores.items() if / score == highest] #分行 print(highest,lowest,average,highestPerson)

9. 统计不及格的学生及成绩,要求:给定一些学生姓名和成绩;询问用户是否还需要输入更多的

学生姓名和成绩,用户回答是就继续输入,继续询问;打印所有补考学生名单和成绩。 d=[[\张三\李四\王五\郑六\ s1=input(\输入数据Y or N:\去掉前后空格 while s1 == 'Y':

s2=input(\请输入学生及成绩(空格隔开)\ name,grade=s2.split() d.append([name,grade]) #d[name]=int(grade)

s1=input(\继续输入Y or N:\ else: print(d)

print(\不及格的名单:\ for name,grade in d: if float(grade) < 60:

print(\姓名:\成绩:\

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

n=eval(input(”请输入数字个数:”)) for i in range(n):

number=eval(input(”请输入数字:”)) lst.append(number) for value in lst:

print(value,end=’ ’)

111111. 序列求和,n通过用户输入: 1????...?(?1)n?1234nn=int(input(“请输入N的值:”))

s=0 fh=1

for i in range(1,n+1):

s +=fh*1/i # 求和语句 fh=-fh #正负交替

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

12. 生成一个包含50个两位随机整数的列表,然后删除其中的所有奇数(提示从后向前删) lst=[random.randint(1,100) for i in range(50)] print('50个随机两位整数:',lst) k=len(lst)-1

for i in range(k,-1,-1):#从后往前删,减少列表元素移动 if lst[i] % 2==1: lst.pop(i)

print(\偶数为\

13. 恺撒(kaisa)密码:原文:ABCDEFGHIJKLMNOPQRSTUVWXYZ,对应的密文为: DEFGHIJKLMNOPQRSTUVWXYZABC,请设计程序实现之。 plaincode=input('请输入明文:') for p in plaincode: if 'a'<=p<='z':

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

#ord是字符编码的值,都减掉ord('A')才可以得到字符的顺序0-25 print(c,end='') elif 'A'<=p<='Z' :

c=chr(ord('A')+(ord(p)-ord('A')+3)&) print(c,end='') else:

print(p,end='')

14. 如果一个字符串从前往后和从后往前读时是一样的,那么这个字符串就是回文串。请编写一个

函数判断是否为回文串,同时编写测试代码检验回文串。 def isPalindrome(s)

if s==s[::-1]: #切片操作,倒序和顺序一样 return True else:

return False

s=input('input a string:') if isPalindrome(s):

print(‘%s is a palindrome!’%s) else:

print(‘%s is not a palindrome!’%s)

15. 输入一串字符,统计每个字符数,用字典输出. s=input(\输入一行字符串或句子:\ char_counts={} for char in s:

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

16. 生成包含100个随机字符的字符串,然后统计前20个高频字符. import string,random

str1=string.ascii_letters +string.digits str1=str1.lower()

str2=[random.choice (str1) for i in range(100)] print(str2) str_count={} for char in str2:

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

items=list(str_count.items())

items.sort(key=lambda x:x[1],reverse=True) #以数量降序 for i in range(20):

word,count = items[i]

print(\-15s ]\ #-表示左对齐,s表字符,d表示整数

17. 统计”e:\\HarryPotterSorcerStone.txt”文件中的英文单词及其数量,打印出单词及其个数

filename =r'HarryPotterSorcerStone.txt' infile = open(filename, \ txt=infile.read()

words=txt.split() #以空格分割单词 words_counts={} for word in words:

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

18. 读取文本文件data.txt中所有整数,将其排序后写入文本文件data_asc.txt中. with open('data.txt','r') as fp:

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

data=[int(line.strip()) for line in data] #列表的数据变成整数 data.sort()

data=[str(i)+'\\n‘ for i in data] #数字后加换行符 with open(‘data_asc.txt’,'w') as fp:

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() for line in lines:

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

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

for i in data[2:]:

if int(i)<60:

k+=1 if k>=2: #两门以上(含两门)课程不及格 f2.write(line) else:

f3.write(line)

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