Python几个简单实验下(组合数据类型 函数 文件 面向对象)

目录

实验五 组合数据类型

实验六 函数

实验七 文件

实验八 面向对象


实验五 组合数据类型

(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()

你可能感兴趣的:(python,python)