目录
实验五 组合数据类型
实验六 函数
实验七 文件
实验八 面向对象
(2)编写程序,模拟栈操作。
要求:栈的操作包括入栈、出栈、查看栈顶元素、栈的长度、栈是否为空、退出。
提示:
(a)使用列表实现。列表的常用操作,包括添加列表元素 append()、移除并返回列表的最后一个元素 pop()、列表元素个数 len(),以及根据索引访问列表元素,并以此模仿栈的操作。
(b)列表的元素可以用索引表示,如 stack[i]表示 stack 列表中的第 i-1 个元素,索引可以为负数;stack[-1]表示列表中的最后一个元素。在不确定列表长度的情况下,用这种方法表示列表的末尾元素十分方便。
list_one=[1,2]
list_one.append(input("请添加元素:"))
print(len(list_one))
list_one.pop()
print(list_one)
print(list_one[1]
(3)编写程序,完成字典操作。
要求:
(a)建立字典 dict,包含以下内容:"数学":"L04","语文":"W01","英语":"W02","物理":"L02","地理":"Q03"。
(b)向字典中添加键值对"化学":"L03"。
(c)修改"数学"对应的值为"L01"。
(d)删除"地理"对应的键值对。
(e)输出字典 dict 的全部信息。
dict={"数学":"L04","语文":"W01","英语":"W02","物理":"L02","地理":"Q03"}
dict['化学']="L03"
dict['数学']="L01"
dict.pop("地理")
print(dict)
(4)列表中的数据统计的实现。
要求:定义一个列表,存储一个班级所有学生某科目考试的成绩等级,编写程序,统计输出各级别的人数,并按各级别人数的倒序输出(注意要按照优秀、良好、及格、不及格的顺序输出统计结果)。
例如:
ls_score=["及格","优秀","良好","优秀","及格","不及格","良好","及格",\"良好","不及格","良好","良好","良好","及格","及格","优秀",\"优秀","良好","不及格","良好","及格","良好","及格","优秀"]
输出结果如下。
优秀:5
良好:9
及格:7
不及格:3
Is_score=["及格","优秀","良好","优秀","及格","不及格","良好","及格","良好","不及格","良好","良好","良好","及格","及格","优秀","优秀","良好","不及格","良好","及格","良好","及格","优秀"]
count={}
for i in Is_score:
count[i]=count.get(i,0)+1
print(count)
(5)编写程序,计算和、平均值、方差。
要求:输入一组 10 个整数,存放在列表 numbers 中,计算这组数的和、平均值、方差。
提示:请自行搜索计算方差的公式。
list=[]
for i in range(10):
list.append(int(input("请输入第%d个整数"%(i+1))))
a=0
for i in range(10):
a=a+list[i]
b=a/10
sdev=0
for i in list:
sdev=sdev+(i-b)**2
print(sdev/10)
print("和为%d"%(a))
print("平均数为%d"%(a/10))
print(list)
print("和为%d"%(a))
print("平均数为%d"%(a/10))
print(list)
(2)编程求两点之间的曼哈顿距离。
要求: 主程序代码如下,实现函数 abs()。
提示: 给出平面上两个点的坐标, 平面上点 A(x1,y1)与点 B(x2,y2)的曼哈顿距离为:
|x1-x2|+|y1-y2|。
x1,y1=eval(input("输入A点坐标,以逗号分隔:"))
x2,y2=eval(input("输入B点坐标,以逗号分隔:"))
mht=abs(x1-x2)+abs(y1-y2)
print(mht)
(3)编写函数,计算某班级学生考试的平均分。
要求:(a)班级共 10 人,计算平均分时可以根据全部人数或者实际参加考试人数计算。
def avgScore(scores,n=10):
avg=sum(scores)/n
return avg
scores=[90,88,76,45,77,95,66,88,91]
print("按班级人数计算的平均值:{:.2f}".format(avgScore(scores)))
print("按考试人数计算的平均值:{:.2f}".format(avgScore(scores,len(scores))))
(4)编写函数,利用可变参数计算一组数的最大值。
提示:部分代码如下,请补全代码。
def maxnum(*nums):
t=max(nums)
return t
print(maxnum(-1,34,-9,56))
print(maxnum(1,4,6,95,3,78))
(1) 按照作业管理系统中提供的”徽墨制作方法.txt"文件内容,提取出如下图所示内容,并保存为文件"徽墨制作简介.txt"。
with open('F:\徽墨制作方法.txt',encoding='utf-8') as f:
results = f.readlines()
temp = []
for i in range(0,len(results)-1,2):
print(results[i],end='')
temp.append('步骤' + results[i])
print(temp)
with open('F:\徽墨制作简介.txt',mode='w',encoding='utf-8') as p:
p.writelines(temp)
(2) 按照作业管理系统中提供的“独家秘制臭鳜鱼的做法.txt”文件内容,提取出如下图所示内容,并保存为文件"臭鳜鱼制作简介.txt"。
with open('F:\独家秘制臭鳜鱼的做法.txt',encoding='utf-8') as f:
results = f.readlines()
temp = []
for i in range(0,len(results)):
print(results[i],end='')
b=i+1
temp.append(results[i].replace(str(b),"step%d:"%b))
with open('F:独家秘制臭鳜鱼的做法.txt',mode='w',encoding='utf-8') as p:
p.writelines(temp)
3)逐一统计文本文件中的字符数。
要求:统计某一文本文件中的大写字母、小写字母和数字出现的次数。
import re
with open('D:\Python\独家秘制臭鳜鱼的做法.txt',encoding='utf-8') as f:
text = f.read()
len_da = len(re.findall(r'[A-Z]', text)) # 把大写字母单个的整合到一个列表里边,并计算长度
print('大写字母有%d个' % len_da)
len_xiao = len(re.findall(r'[a-z]', text))
print('小写字母有%d个' % len_xiao)
len_shu = len(re.findall(r'[0-9]', text))
print('数字有%d个' % len_shu)
(4) 编程实现文本文件的加密和解密功能。
要求:程序使用 key 作为参数,对给定的文本文件执行加密运算,加密后的文件输出到另一
文本文件中。
提示:加密算法是对于文件中的每个字母,用字母表中其后第 n 个字母来替代,其中 n 为密
钥。加密后的文件可以用密钥-n 来解密。
例如,文件内容如果是“abc123<(”,密钥是 4,则加密后的文件是“efg567@,”
with open ('F:\新建文本文档.txt') as f:
a = f.read()
b= int(4)
c=''
for i in a:
temp = ord(i)+b
c+=chr(temp)
with open('F:\作业.txt', mode='w') as p:
p.write(c)
(5)编程实现中英文歌词的提取。
要求:从网络上搜索到英文歌曲的中英文双语版歌词,并在本地保存成文本文件,再分别提取其中的中文歌词保存到"歌曲名_chinese.txt”和英文歌词保存到"歌曲名_english.txt"。
with open('D:\歌曲.txt',encoding='utf-8') as p:
result=p.readlines()
for i in range(0,len(result)):
if ('A'<=result[i]<='Z'):
with open ('D:\www_english.txt',mode='a',encoding='utf-8') as s:
s.writelines(result[i])
elif ('a'<= result[i]<= 'z'):
with open('D:\www_english.txt', mode = 'a', encoding = 'utf-8') as s:
s.writelines(result[i])
else:
with open ('D:\www_chinese.txt',mode='a',encoding='utf-8') as t:
t.writelines(result[i])
(2)设计并测试表示一 个点的MyPoint类。
要求:该类包括以下属性:
x:点的横坐标。
y:点的纵坐标。
包括如下方法:
init_ 0 (self, x, y):构造方法,创建对象的同时为属性x、 y赋初值。
getX0:获得点的横坐标。
getY0:获得点的纵坐标。
getDdistance (self,p):返回当前点与点p之间的距离。
MoveHorizontal (self,step): 返回当前点水平移动step位移后的形成的新点。
MoveVertical (self,step): 返回当前点垂直移动step位移后的形成的新点。
from math import sqrt
class MyPoint():
def __init__(self,x=0,y=0):
self.x=x
self.y=y
def getX(self,x):
self.x=x
def getY(self,y):
self.y=y
def getDistance(self,p):
dx=self.x-p.x
dy=self.y-p.y
return sqrt(dx**2+dy**2)
def MoveHorizontal(self,step):
self.x+=step
def MoveVertical(self,step):
self.y+=step
def __str__(self):
return '(%s,%s)'%(str(self.x),str(self.y))
def main():
p1=MyPoint(3,5)
p2=MyPoint()
print(p1)
print(p2)
print("p1与p2的距离为:"+str(p1.getDistance(p2)))
step=int(input("请输入水平位移量:"))
p1.MoveHorizontal(step)
print("水平移动%d位移后形成的新点"%step+str(p1))
step=int(input("请输入垂直位移量:"))
p1.MoveVertical(step)
print("垂直移动%d位移后形成的新点"%step+str(p1))
if __name__ == '__main__':
main()