Python 第十四天学习笔记

今天去面试数据分析师,遇见的是本科北交大硕士中科院学工业工程的同学。真的是压力山大。

面试被问到了SQL。最近都不要投简历关注实习了,先充电,学完Python再学SQL。

今天做第十一章类和对象的习题

0.对象中的属性和方法,在编程中实际是什么?

变量属性,函数方法

1.类和对象是什么关系?

对象是类的实例化,类是抽象的,对象是具体的

2.如果我们定义了一个猫类,那你能想象出“猫”类实例化的对象有哪些?

叮当猫,咖啡猫等

3.类的定义有时候或许不那么“拟物”,有时候会抽象一些,例如我们定义一个矩阵类,那你会为此添加哪些属性和方法?

属性:长和宽垂直,长和宽是直线

方法:计算周长,面积

4.类的属性定义应该尽可能抽象还是尽可能具体?

应该尽可能抽象

5.请用一句话概括面向对象的几个特征

封装:对外部隐藏对象的工作细节

继承:子类可以共享父类之间数据和方法的机制

多态:可以对不同类的对象调用相同的方法,产生不同的结果

6.函数和方法有什么区别

方法和函数几乎是一样的,但是方法默认有一个self参数


0.按照以下提示尝试定义一个Person类并生成实例对象

属性:姓名(默认小甲鱼)

方法:打印姓名

class Person:
    name = "小甲鱼"

    def printName(self):
        print(self.name)

>>> tt=Person()

>>> tt.name
'小甲鱼'


1.按照以下提示尝试定义一个矩形类并生成实例对象

属性:长和宽

方法:设置长和宽 setRect(self)  获得长和宽 grtRect(self)  获得面积 getArea(self)

  class Rect():
    length = 5
    width = 4

    def setRect(self):
        print("请输入长和宽")
        self.length = float(input("长:"))
        self.width = float(input("宽:"))

    def getArea(self):
        return self.length*self.width

    

第37课

2.self 参数的作用是什么?

绑定方法,据说有了这个参数,Python再也不会傻傻分不清是哪个对象在调用方法了,可以认为方法中的self其实就是实例对象的唯一标志

3.类在实例化后哪个方法会被自动调用

__init__会被自动调用

4.请解释下边代码报错的原因:

Python 第十四天学习笔记

定义完类后,就是类对象,即实例化,只有实例化后才能通过self参数进行调用

上图所示乜有实例化就直接调用,缺少self参数,所以会报错


0.按照以下要求定义一个游乐园门票的类,并尝试计算2个成文+1个小孩平日票价

平日票价100元,周末票价为平日的120%,儿童半票

class Ticket:
    def __init__(self,weekend=False,child=False):
        self.a = 100
        if weekend:
            self.discount1 = 1.2
        else:
            self.discount1 = 1
            if child:
                self.discount2 = 0.5
            else:
                self.discount2 = 1

    def price(self,num):

        return self.a * self.discount1 * self.discount2 * num          不会报错,下图第一种

        print( self.a * self.discount1 * self.discount2 * num)           会报错,下图第二种

Python 第十四天学习笔记


Python 第十四天学习笔记

import random as r

legal_x = [0,10]
legal_y = [0,10]

class Gui:
    def __init__(self):
        self.power = 100
        self.x = r.randint(0,10)
        self.y = r.randint(0,10)

    def move(self):
        new_x = self.x + r.choice([1,2,-1,-2])
        new_y = self.y + r.choice([1,2,-1,-2])

        if new_x < 0:
            self.x = -new_x
        elif new_x > 10:
            self.x = new_x - (new_x - 10)
        else:
            self.x = new_x

        if new_y < 0:
            self.y = -new_y
        elif self.y >10:
            self.y = new_y - (new_y - 10)
        else:
            self.y = new_y

        self.power -= 1
        return (self.x,self.y)

    def eat(self):
        self.power += 20
        if self.power > 100:
            self.power = 100

class Fish:
    def __init__(self):
        self.x = r.randint(0,10)
        self.y = r.randint(0,10)

    def move(self):
        new_x = self.x + r.choice([1,-1])
        new_y = self.y + r.choice([1,-1])

        if new_x < 0:
            self.x = - new_x
        elif new_x >10:
            self.x = new_x - 2
        else:
            self.x = new_x

        if new_y <0:
            self.y = -new_y
        elif new_y > 10:
            self.y = new_y - 2
        else:
            self.y = new_y
        return(self.x,self.y)
    
while True:
    if not len(fish):
        print("鱼儿吃完了,游戏结束")
        break
    if not gui.power:
        print("乌龟体力耗尽,游戏结束")
        break

    pos = gui.move()
    for each_fish in fish[:]:
        gui.eat()
        fish.remove(each_fish)

        print("有一条鱼儿被吃掉了")


第38课:

Python 第十四天学习笔记

Python 第十四天学习笔记

class A():
    def __init__(self):
        print("进入A")
        print("离开A")

class B(A):
    def __init__(self):
        print("进入B")
        A.__init__(self)
        print("离开B")
    
class C(A):
    def __init__(self):
        print("进入C")
        A.__init__(self)
        print("离开C")

class D(B,C):
    def __init__(self):
        print("进入D")
        B.__init__(self)
        C.__init__(self)

        print("离开D")

结果是:

>>> d=D()
进入D
进入B
进入A
离开A
离开B
进入C
进入A
离开A
离开C
离开D

进入D,进入B,进入A,离开A,离开B,进入C,进入A,离开A,离开C,离开D

用super函数改进

class A:

    def __init__(self):
        print("进入A")
        print("离开A")

class B(A):
    def __init__(self):
        print("进入B")
        super().__init__()
        print("离开B")

class C(A):
    def __init__(self):
        print("进入C")
        super().__init__()
        print("离开C")

class D(B,C):
    def __init__(self):
        print("进入D")
        super().__init__()
        print("离开D")

>>> d=D()
进入D
进入B
进入C
进入A
离开A
离开C
离开B

离开D

中间这步很重要,起到调用作用,省去之后就没有调用


Python 第十四天学习笔记

import math

class Point:
    def __init__(self,x=0,y=0):
        self.x = x
        self.y = y
    def getx(self):
        return self.x
    def gety(self):
        return self.y
     
class Line:
    def __init__(self,p1,p2):
        self.x = p1.getx() - p2.getx()
        self.y = p1.gety() - p2.gety()
        self.len = math.sqrt(self.x**2 + self.y**2)

    def getlen(self):
        return self.len
    

第39课

Python 第十四天学习笔记


下次看183页

争取在下周学完爬虫。时间不够就10天内。

然后学习SQL。