zoukankan      html  css  js  c++  java
  • part6-3 Python 类和对象练习

    练习:

    1、编写一个学生类,提供 name、age、gender、phone、address、email等属性,为学生类提供带所有成员变量的构造器,为学生类提供方法,用于描绘吃、喝、玩、睡等行为。
     1 class Student:
     2     """描述学生的类"""
     3     def __init__(self, name, age, gender, phone, address, email):
     4         """构造器函数"""
     5         self.name = name
     6         self.age = age
     7         self.gender = gender
     8         self.phone = phone
     9         self.address = address
    10         self.email = email
    11 
    12     def eat(self, food):
    13         """"""
    14         print("%s正在吃%s" % (self.name, food))
    15 
    16     def drink(self, drink):
    17         """"""
    18         print("%s正在喝%s" % (self.name, drink))
    19 
    20     def play(self, sport, other):
    21         """"""
    22         print("我今年%s岁,正在和%s玩%s" % (self.age, other, sport))
    23 
    24     def sleep(self):
    25         """"""
    26         print("%s正在%s睡觉" % (self.name, self.address))
    27 
    28     def __repr__(self):
    29         return 'Student(name=%s, age=%s, phone=%s, address=%s, email=%s)' % 
    30                (self.name, self.age, self.phone, self.address, self.email)
    31 
    32 if __name__ == '__main__':
    33     stu = Student('Michael', 25, 201901, 10086, '成都', 'michael@163.com')
    34     stu.eat('苹果')
    35     stu.drink('饮料')
    36     stu.play('蓝球', 'Stark')
    37     stu.sleep()
    38     print(stu)
    39 
    40 程序运行结果如下:
    41 Michael正在吃苹果
    42 Michael正在喝饮料
    43 我今年25岁,正在和Stark玩蓝球
    44 Michael正在成都睡觉
    45 Student(name=Michael, age=25, phone=10086, address=成都, email=michael@163.com)

    2、 利用前面定义的 Student 类,定义一个列表保存多个 Student 对象作为通讯录数据。程序可通过 name、email、address 查询,如果找不到数据,则进行友好提示。
     1 # 首先导入 Student 类,student 是文件名
     2 from student import Student
     3 
     4 # 定义一个列表保存多个 Student 对象
     5 concacts = [Student('michael', 25, 201901, 10086, '成都', 'michael@163.com'),
     6             Student('stark', 28, 201902, 10001, '重庆', 'stark@126.com'),
     7             Student('tom', 31, 201903, 10087, '上海', 'tom@sina.com.cn'),
     8             Student('jack', 27, 201904, 10081, '上海', 'jack@qq.com')]
     9 
    10 # 查询 name
    11 def find_by_name(name):
    12     return [x for x in concacts if name in x.name]
    13 
    14 def find_by_email(email):
    15     return [x for x in concacts if email in x.email]
    16 
    17 def find_by_address(address):
    18     return [x for x in concacts if address in x.address]
    19 
    20 if __name__ == '__main__':
    21     t = input('请输入查找的方式,名字(n),Email(e),地址(a): ')
    22     k = input('请输入查找的关键字:')
    23     if t == 'n':
    24         print(find_by_name(k))
    25     elif t == 'e':
    26         print(find_by_email(k))
    27     elif t == 'a':
    28         print(find_by_address(k))
    29     else:
    30         print('输入有误!')
    31 
    32 运行示例如下所示:
    33 请输入查找的方式,名字(n),Email(e),地址(a): a
    34 请输入查找的关键字:上海
    35 [Student(name=tom, age=31, phone=10087, address=上海, email=tom@sina.com.cn),
    36  Student(name=jack, age=27, phone=10081, address=上海, email=jack@qq.com)]

    3、 定义代表二维坐标系上某个点的 Point 类(包括x、y两个属性),为该类提供一个方法用于计算两个Point 之间的距离,再提供一个方法用于判断三个Point 组成的三角形是钝角、锐角还是直角三角形。
    class Point:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def distance(self, other):
            """计算两点之间的距离"""
            return ((self.x - other.x) ** 2 + (self.y - other.y) ** 2) ** 0.5
    
        def judge_triangle(self, p1, p2):
            '''判断3个点组成的三角形'''
            # 首先计算3条边的距离
            self_p1 = self.distance(p1)
            self_p2 = self.distance(p2)
            p1_p2 = p1.distance(p2)
            # 如果 self_p1 的距离最大
            if self_p1 > self_p2 and self_p1 > p1_p2:
                if self_p1 > (self_p2 + p1_p2):
                    print('不是三角形')
                else:
                    print('钝角三角形') if self_p1 ** 2 > (self_p2 ** 2 + p1_p2 ** 2) 
                        else print('锐角三角形') if self_p1 ** 2 < (self_p2 ** 2 + p1_p2 ** 2) 
                        else print('直角三角形')
            # 如果 self_p2 的距离最大
            if self_p2 > self_p1 and self_p2 > p1_p2:
                if self_p2 > (self_p1 + p1_p2):
                    print('不是三角形')
                else:
                    print('钝角三角形') if self_p2 ** 2 > (self_p1 ** 2 + p1_p2 ** 2) 
                        else print('锐角三形') if self_p2 ** 2 < (self_p1 ** 2 + p1_p2 ** 2) 
                        else print('直角三角形')
            # 如果 p1_p2 的距离最大
            if p1_p2 > self_p1 and p1_p2 > self_p2:
                if p1_p2 > (self_p1 + self_p2):
                    print('不是三角形')
                else:
                    print('钝角三角形') if p1_p2 ** 2 > (self_p1 ** 2 + self_p2 ** 2) 
                        else print('锐角三角形') if p1_p2 ** 2 < (self_p1 ** 2 + self_p2 ** 2) 
                        else print('直角三角形')
    
        def __repr__(self):
            return 'Point(x=%s, y=%s)' % (self.x, self.y)
    
    if __name__ == '__main__':
        p1 = Point(1, 1)
        print(p1.distance(Point(2, 3)))
        p1.judge_triangle(Point(4, 5), Point(-8, 7))
    
    程序运行结果如下所示:
    2.23606797749979
    钝角三角形

    4、 定义代表三维笛卡尔坐标系上某个点的 Points 类(包含x、y、z三个属性),为该类定义一个方法,可接收b、c、d 三个参数,用于计算当前点和b、c 组成的面与 b、c、d 组成的面之间的夹角。提示:cos(夹角)=(X·Y)/|X||Y|,其中 X=AB*BC,Y=BC*CD,X·Y 代表X与Y的点积,AB*BC 代表 AB 与 BC 的叉乘。
     1 import math
     2 
     3 class Points:
     4     '''描述点的类'''
     5     def __init__(self, x, y, z):
     6         '''构造器'''
     7         self.x = x
     8         self.y = y
     9         self.z = z
    10 
    11     def __sub__(self, other):
    12         '''为减法提供支持的方法'''
    13         return Points((self.x - other.x), (self.y - other.y), (self.z - other.z))
    14 
    15     def dot(self, other):
    16         """点积,相乘后积相加"""
    17         return (self.x * other.x) + (self.y * other.y) + (self.z * other.z)
    18 
    19     def cross(self, other):
    20         """叉积"""
    21         return Points((self.y*other.z-self.z*other.y), (self.z*other.x-self.x*other.z), (self.x*other.y-self.y*other.x))
    22 
    23     def absolute(self):
    24         return pow((self.x ** 2 + self.y ** 2 + self.z ** 2), 0.5)
    25 
    26 if __name__ == '__main__':
    27     points = list()
    28     print('依次输入4个点的 x y z(中间以空格分隔)')
    29     for _ in range(4):
    30         a = list(map(float, input().split()))
    31         points.append(a)
    32     a, b, c, d = Points(*points[0]), Points(*points[1]), Points(*points[2]), Points(*points[3])
    33     X = (b - a).cross(c - b)
    34     Y = (c - b).cross(d - c)
    35     angle = math.acos(X.dot(Y) / (X.absolute() * Y.absolute()))
    36     print("%.2f" % math.degrees(angle))
    37 
    38 运行一次实例如下:
    39 依次输入4个点的 x y z(中间以空格分隔)
    40 2.8 9.5 -12.4
    41 4.9 23.5 14.2
    42 -60.8 -100 200
    43 200 -300 -1000
    44 12.92

    5、 定义交通工具、汽车、火车、飞机类,注意这些类的继承关系,为这些类提供构造器。
     1 class TrafficTools:
     2     def __init__(self, name):
     3         self.name = name
     4 
     5     def move(self, distance):
     6         print("我移动了%s千米" % distance)
     7 
     8 class Car(TrafficTools):
     9     def __init__(self, name, color):
    10         super(Car, self).__init__(name)
    11         self.color = color
    12 
    13     def move(self, distance):
    14         print("我是%s的%s车,在道路上移动了%s千米" % (self.color, self.name, distance))
    15 
    16 class Train(TrafficTools):
    17     def __init__(self, name, color):
    18         super(Train, self).__init__(name)
    19         self.color = color
    20 
    21     def move(self, distance):
    22         print("我是%s的%s,在铁轨上移动了%s千米" % (self.color, self.name, distance))
    23 
    24 class Plain(TrafficTools):
    25     def __init__(self, name, company):
    26         super(Plain, self).__init__(name)
    27         self.company = company
    28 
    29     def move(self, distance):
    30         print("我是%s的%s飞机,在天空中飞了%s千米" % (self.company, self.name, distance))
    31 
    32 if __name__ == '__main__':
    33     c = Car('宝马', '红色')
    34     c.move(100.33)
    35 
    36     t = Train('火车', '绿皮')
    37     t.move(50)
    38 
    39     p = Plain('空客', '川航')
    40     p.move(400)
    41 
    42 运行结果如下所示:
    43 我是红色的宝马车,在道路上移动了100.33千米
    44 我是绿皮的火车,在铁轨上移动了50千米
    45 我是川航的空客飞机,在天空中飞了400千米
  • 相关阅读:
    决策树
    训练/测试
    机器学习 标准差
    pandas01
    提交参数说明
    pandas_series02
    Yarn 模式
    词云图
    软件需求与分析课堂综合测试
    课堂测试10
  • 原文地址:https://www.cnblogs.com/Micro0623/p/11678657.html
Copyright © 2011-2022 走看看