其他分享
首页 > 其他分享> > 19.5.5笔记and作业

19.5.5笔记and作业

作者:互联网

笔记
将二维列表打印为一维列表

a=[[1,2,3],[4,5,6],[7,8,9]]
b=[j for x in a for j in x ]
print(b)

打印3*3的列表,用推导式

b=[[3*i+1+j for j  in range(3)] for i in range(3)]
print(b)##j控制元素的数量,i控制列表的数量

#打印4*4的列表,用推导式

b=[[4*i+1+j for j in range(4)] for i in range(4)]
print(b)

map和filter的作用

def hanashu(a):
    return a*a
a=[1,2,3]
b=map(hanashu,a)
for x in b:
    print(x)

filter函数,过滤掉不符合条件的数

a=[1,2,3,4,5]
b=filter(lambda x:True if x%2==0 else False, a)
for x in b:
    print(x)

面向对象

class Student():
    name=''
    age=0
    sex=''
    def dayin(self):
        print(self.name,self.age,self.sex)
zs=Student()
zs.name='张三'
zs.age=19
zs.sex='男'
zs.dayin()

ls=Student()
ls.name='李四'
ls.age=29
ls.sex='男'
ls.dayin()

#init初始化方法

   class People():
        def __init__(self,name,age,sex):#self指的就是对象本身
            print(id(self))
            self.name=name
            self.age=age
            self.sex=sex
        def dayin(self):
            print(id(self))
            print('我叫',self.name)
            print('今年',self.age)
            print('性别',self.sex)
    
    zs=People('张三',19,'男')
    print(id(zs))
    zs.dayin()

class Teacher():
    def __init__(self,name,age,work_age):
        self.name=name
        self.age=age
        self.work_age=work_age
    def showSelf(self):
        print('我叫',self.name,'今年',self.age,'工龄',self.work_age)
    def jiangke(self):
        print('所教的科目是python')
zs=Teacher('张三',39,15)
zs.showSelf()
zs.jiangke()

#赋值要在调用前

   class A():
        def __init__(self):
            pass
        def hs1(self,x):
            self.name=x
        def showSelf(self):
            print(self.name)
    zs=A()
    zs.hs1('张三')##给name赋值,要在调用函数前赋值
    zs.showSelf()

    class X():
        def hehe(self):
            print(self.name)
    z=X()
    z.name='张三'
    z.hehe()

求圆的周长和面积

class Yuan():
    def __init__(self,r):
        self.r=r
    def zhouchang(self):
       print(2*3.14*self.r)
    def mianji(self):
        print( 3.14*self.r*self.r)
yuan=Yuan(3)
yuan.mianji()
yuan.zhouchang()

类属性
c

lass Stu():
    count=0
    def __init__(self,name):
        self.name=name
        Stu.count+=1
    def showSelf(self):
        print(self.name)

print(Stu.count)
zs=Stu('张三')
print(zs.count)#count为1,一个对象使用一次,count加1
ls=Stu('李四')
print(ls.count)#count为2,两个对象使用,count加2,对象也可以使用类属性
print(Stu.count)

class Stu():

count=0#类属性,放在方法外
def __init__(self,name):
    self.name=name#self属性,都是对象属性
    Stu.count+=1
def showSelf(self):
    print(self.name)

#当类属性和对象属性重名的时候,(可以把类属性认为是全局变量,对象属性是局部变量)优先使用对象属性
a=Stu('张三')
b=Stu('李四')
print(a.count,Stu.count)#一个对象使用一次,count加1,张三和李四都使用了,所以变为2
a.count=1000
print(a.count)###输出为1000
print(Stu.count)##2  对象也可以使用类属性

#对象属性中没有count,所以调用了类属性里面的count,然后赋值给对象属性里面的count

class Stu():
    count=0#类属性,放在方法外
    def __init__(self,name):
        self.name=name#self属性,都是对象属性
        Stu.count+=1
    def showSelf(self):
        print(self.name)

a=Stu('张三')
b=Stu('李四')
a.count=a.count+5#输出7,对象属性中没有count,所以调用了类属性里面的count,然后赋值给对象属性里面的count
print(a.count)
print(Stu.count)#输出2
del a.count##删除对象属性后,去调用类属性
print(a.count)

#删除的属性,不能再被调用,但其他属性可以被调用

class X():
    def __init__(self,name,age):
        self.name=name
        self.age=age
zs=X('张三',19)
print(zs.name)
del zs.name##删除之后即不能调用name属性
print(zs.age)
print(zs.name)##无输出

修改的时候,如果是同一内容,则值一样

class Stu():
    count=0
    ls=[1,2,3]
    def __init__(self,name,age):
        self.name=name
        self.age=age
        self.count+=1
    def showSelf(self):
        print(self.name,self.age)

zs=Stu('张三',19)
zs.ls.append(4)
Stu.ls.append(5)
print(zs.ls)##输出为[1,2,3,4,5]
print(Stu.ls)##输出为[1,2,3,4,5]

#写一个学生类,里面包含名字和id,然后再写添加和删除的方法

class Student():
    def __init__(self,name,id):
        self.name=name
        self.id=id
class Oper():
    def __init__(self):
        self.stu_lb=[]
    def addStudent(self):
        id =input('请输入id')
        for stu in self.stu_lb:
            if stu.id==id:
                print('id重复')
                break
        else:
            name=input('请输入姓名')
            stu=Student(name,id)
            self.stu_lb.append(stu)
        self.dayin()
    def delStudent(self):
        id=input('请输入要删除的id')
        for stu in self.stu_lb:
            if stu.id==id:
                print('删除',stu.name)
                self.stu_lb.remove(stu)
                break
        else:
            print('无此人')
        self.dayin()
    def dayin(self):
        for stu in self.stu_lb:
            print(stu.name,stu.id)
x=Oper()
x.addStudent()
x.addStudent()
x.delStudent()

类方法

class Student():
    count=9
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def say(self):
        print(self.name,self.age)
    @classmethod#类方法
    def cM(cls):
        print(id(cls))
        print(id(Student))##cls就等于Student
        print(cls.count,'--------')
    @staticmethod
    def hehe(a,b):
        print(a+b)
zs=Student('张三',19)
Student.cM()
Student.hehe(2,5)

#静态方法

class Teacher():
    count=0
    tax=0.002
    def __init__(self,name,salary):
        self.name=name
        self.salary=salary
        Teacher.count+=1
    @classmethod
    def dayin(cls):
        print(cls.count)
    @staticmethod
    def shui(a,b):
        print((a+b)*Teacher.tax)
zs=Teacher('张三',10000)
ls=Teacher('李四',20000)
Teacher.dayin()
Teacher.shui(zs.salary,ls.salary)

__str__的用法

class Stu():
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __str__(self):
        return '我叫{},今年{}岁'.format(self.name,self.age)
zs=Stu('张三',19)
b=str(zs)
print(zs)

作业
1.面向对象中 属性的练习
陈赫 体重 75.0 公斤
陈赫每次 奔跑 会减肥 0.1 公斤
陈赫每次 吃东西 体重增加 0.5 公斤

class Person():
    def __init__(self,name,weight):
        self.name=name
        self.weight=weight
    def __str__(self):
        return '我是{},体重{}'.format(self.name,self.weight)
    def Run(self):
        print('{}爱跑步,可以减肥'.format(self.name))
        self.weight-=0.1
    def Eat(self):
        print('{}是吃货'.format(self.name))
        self.weight+=0.5
chenhe=Person('陈赫',80)
chenhe.Eat()
chenhe.Run()
chenhe.Eat()
print(chenhe)

2.植物大战僵尸

class Game(object):
    zuigaofen=0
    def __init__(self,player_name):
        self.player_name=player_name
    @staticmethod
    def show_help():
        print('提示:小心被僵尸吃了哦')
    @classmethod
    def show_zuigaofen(cls):
        print('历史记录%d'%cls.zuigaofen)
    def startGame(self):
        print('%s开始游戏了....'%self.player_name)

Game.show_help()
Game.show_zuigaofen()
game=Game('张三')
game.startGame()

3.枪炮手
两个类配合使用练习

“”"
需求
狙击手 麦克 有一把 狙M99
麦克 可以 开火
狙M99 能够 发射 子弹
狙M99 装填 装填子弹 —— 增加子弹数量

“”"

class Gun:
    def __init__(self, model):
        # 枪的型号
        self.model = model
        # 子弹数量
        self.bullet_count = 0
def add_bullet(self, count):
    self.bullet_count += count

def shoot(self):
    # 判断是否还有子弹
    if self.bullet_count <= 0:
        print("没有子弹了...")

        return

    # 发射一颗子弹
    self.bullet_count -= 1

    print("%s 发射子弹[%d]..." % (self.model, self.bullet_count))


class Sniper:
def __init__(self, name):
    # 姓名
    self.name = name
    # 狙击枪,狙击手初始没有枪 None
    self.gun = None

def fire(self):
    # 1. 判断士兵是否有枪
    if self.gun is None:
        print("[%s] 还没有枪..." % self.name)

        return

    # 2. 高喊口号
    print("冲啊...[%s]" % self.name)

    # 3. 让枪装填子弹
    self.gun.add_bullet(50)

    # 4. 让枪发射子弹
    self.gun.shoot()


m99 = Gun("M99")
sniper = Sniper('麦克')
sniper.gun = m99
sniper.fire()

标签:count,19.5,name,self,作业,笔记,__,print,def
来源: https://blog.csdn.net/peter_fanxing/article/details/89855948