实验9 面向对象程序设计方法

一、 实验目的

1、理解面向程序设计的基本概念

2、掌握类与对象的定义和使用方法

3、掌握类的继承和多态的实现方法

4、掌握面向对象程序设计的应用方法

二、 实验内容

1、写出程序的运行结果:

class P1:
      def foo(self):
            print('callable P1-foo')
class P2:
      def foo(self):
            print('callable P2-foo')
      def bar(self):
            print('callable P2-bar')
class C1(P1,P2):
      pass
class C2(P1,P2):
      def bar(self):
            print('callable C2-bar()')
class GC(C1,C2):
      pass
gc=GC()
gc.foo()
gc.bar()

在这里插入图片描述
2、写出程序的运行结果:

import math
class Circle:
      def __init__(self, radius):
            self.radius=radius
      def getRadius(self):
            return self.radius
      def getArea(self):
            return math.pi*self.radius*self.radius
def main():
      c1=Circle(10)
      print(c1.getRadius())
      print('{:7.2f}'.format(c1.getArea()))
if __name__=='__main__':
      main()

在这里插入图片描述

3、定义一个 Circle 类,根据圆的半径求周长和面积。再由 Circle 类创建两个圆对象,其半径分别为 5 和 10,要求输出各自的周长和面积。请补充程序:

import math
class Circle:
    def __init__(self,radius=5):    #完成构造函数
        self.radius=radius
    def getPerimeter(self):
        return 2*math.pi*self.radius
    def getArea(self):
        return math.pi*self.radius*self.radius
c1=Circle()
c2=Circle(10)                       #向构造函数传递新的参数
print(c1.radius, c1.getPerimeter(), c1.getArea())
print(c2.radius, c2.getPerimeter(), c2.getArea())

在这里插入图片描述
4、利用面向对象方法求 n!,并输出 10!的值。

class Factorial:
    def fac (self,num):
        factorial = 1
        for i in range(1,num+1):
            factorial *= i
        return factorial
        
if __name__ == '__main__':
    factorial = Factorial()
    n=int(input('请输入n:'))
    print(n,'!=',factorial.fac(n))

在这里插入图片描述

5、定义change 类,用以实现角度和弧度之间的转换。

class Change:
    import math
    def rad_to_ang(self,radian):
        return radian*180/math.pi
    def ang_to_rad(self,angle):
        return angle*math.pi/180
    
if __name__ == '__main__':
    import math
    change=Change()
    print('{0}弧度 = {1}°'.format(math.pi,change.rad_to_ang(math.pi)))
    print('{0}° = {1}弧度'.format(90,change.ang_to_rad(90)))

在这里插入图片描述
6、设计点类,并为这个点类设置一个方法来计算两点之间的距离。

class Point:
	def cal_distance(self,p1,p2):
		import math
		return math.sqrt(math.pow((p2[0] - p1[0]), 2) + math.pow((p2[1] - p1[1]), 2))
if _name_=='_main_':
	point=Point()
  	p1=[0,0]
   	p2=[1,1]
    	print('点{0}与点{1}之间的距离{2}'.format(p1,p2,point.cal_distance(p1,p2)))
		 

在这里插入图片描述
7、设计长方形类,并用其成员函数计算两个给定的长方形的周长和面积。

class Rectangle:
    def get_perimeter(self,length,width):
        return 2*(length+width)
    def get_area(self,length,width):
        return length*width
if __name__ == '__main__':
    rectangle=Rectangle()
    print('长{0}宽{1}的长方形:周长={2},面积={3}'.format(3,7,rectangle.get_perimeter(3,7),rectangle.get_area(3,7)))
    print('长{0}宽{1}的长方形:周长={2},面积={3}'.format(14,14,rectangle.get_perimeter(14,14),rectangle.get_area(14,14)))

在这里插入图片描述

8、已有若干个学生数据,这些数据包括学号,姓名,程序设计基础成绩,高等
数学成绩和英语成绩,要求定义学生类,并用其成员函数求各门课程的平均分。

class Student:
    def __init__(self,id,name,program,math,english):
        self.id=id
        self.name=name
        self.program=program
        self.math=math
        self.english=english
    @staticmethod
    def get_avg(*students):
        program_total=0
        math_total=0
        english_total=0
        for i in range(len(students)):
            program_total += students[i].program
            math_total += students[i].math
            english_total += students[i].english
        return [program_total/len(students),math_total/len(students),english_total/len(students)]
 if __name__ == '__main__':
    student1=Student('001','A',70,70,70)
    student2=Student('002','B',80,80,80)
    student3=Student('003','C',90,90,90)
    students=[student1,student2,student3]
    print('平均分\n程序设计基础:{0},高等数学:{1},英语:{2}'.format(Student.get_avg(*students)[0],Student.get_avg(*students)[1],Student.get_avg(*students)[2]
    

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46074899/article/details/106783932