面向过程, 面向对象, 类和对象, 类与数据类型 面向过程编程 面向过程编程:面向(对着)-->过程(流程/步骤)-->编程(码代码) 面向对象编程 类和对象 定制对象独有属性 LeetCode检测机制 类与数据类型

函数内定义注释可以提取

def f1():
    """f1的注释"""
    pass
print(f1.__doc__)   #函数内定义注释可以将注释提取出来

面向过程编程:面向(对着)-->过程(流程/步骤)-->编程(码代码)

IPO

iput(输入)-->Process(过程/处理)-->Output(输出) #主路线

塑料(定义变量)-->融化-->丢到瓶子的模具里面-->瓶子(输出一个结果)

类似于车间中的(流水线工作过程)-->面向对象编程

未来码代码的目的:输入一些变量,然后通过一系列步骤改变变量,然后得到你想要的结果

def compare2(x,y):
    if x > y:
        return x
    else:
        return y
x = input()
y = input()
res = compare2(x,y)
print(res)   

面向过程编程:一步一步(一个函数一个函数),上一个函数的输出是下一个函数的输入

编程:控制变量不断的变化

优点:代码的独立性提高了(分函数书写,需要时调用),流程清晰

缺点:一个错误直接让程序崩掉

编程

控制变量不断变化

怎么找bug

x = 10
y = 20

#流程1
#变量每变化一次,就打印一次
#流程(方法有无数种)-->需求的实现是多样化的,压根就没有唯一解
#流程2

res = 50	#实际结果res = 40

debug的来源

x = 10
#流程
print('第一步',x)
x *= 10
x *=0

print(1/x)
print('第二步',x)
#流程
print('第三步',x)
x += 2
print('第四步',x)

1.定位bug,不一定是那一行出错了,从该行往上找错

2.打印变量变化的状态,判断该流程是否有问题

面向对象编程

#面向(对象)对象(object)编程(码代码)-->(一个孙悟空就是一个对象,一个猪八戒也是一个对象)
    #西游记-->4个和尚-->悟空(七十二变,金箍棒)/沙和尚(36变,九齿钉耙)/猪八戒/唐僧
    #-->1匹马-->小白龙
    #做一个游戏:西游记()
        #1.孙悟空
        #2.沙和尚
        #3.猪八戒
        #4.唐僧
    #这种方法造出来的游戏-->通过面向编程造的-->对象与对象之间交互
        #优点:孙悟空的变化不会对其他对象造成影响
        #缺点:异常复杂
    #面向对象编程:就是对象与对象之间交互

类和对象

#对象:一系列属性(特征)和技能(方法)的结合体

'''
nick对象:
    姓名:nick
    身高:180
    体重:140
    年龄:18
    技能:
        上课

学生类:
    姓名
    身高
    体重
    年龄
    技能:
        选课

老师类:
    姓名
    身高
    体重
    年龄
    技能
        上课
'''
#类:(模板/类别)划分了对象,具有相同的属性和技能的对象属于同一类(自己控制)
    #1000对象,类小于1000种
    #现实世界中先有对象才会有类,但是python中先有类后有对象

#定义类
class Student():
    def __init__(self,name,height,weight,age):
        self.name = name
        self.height = height
        self.weight = weight
        self.age = age
    def choose_course(self):
        print(f'{self.name}正在选课')

#定义对象
yutong = Student('宇通',150,170,16)
print(yutong.name)
print(yutong.height)
print(yutong.weight)
print(yutong.age)
yutong.choose_course()
#如果该对象属于这个类,那么类拥有的,对象一定也拥有

定制对象独有属性

# class Student():
#     school = 'q34y'
#     name = 'd12'
#     height = 1
#     weight = 1000
#     def choose_course(self):    #self实例化对象
#         print('正在选课')
# stu1 = Student()
# print(stu1.name)
# stu2 = Student()
# print(stu2.name)
#
# def init(obj,name,height,weight):
#     obj.name = name
#     obj.height = height
#     obj.weight = weight
# stu3 = Student()
# init(stu3,'cql',172,120)
# print(stu3.name)
# print(stu3.height)
# print(stu3.weight)

class Student():
    school = 'oldboy'
    def __init__(self,name,weight,height):  #init函数初始化类定制的独有属性
        self.name = name
        self.weight = weight
        self.height = height
        print(self)
stu4 = Student('lyz',6,20)  #类中定义了几个属性,实例化对象中就需要传入几个参数

print('stu4:',stu4)
print(stu4.__dict__)    #获取对象stu4的所有属性并以字典形式存储
print(stu4.name)
print(stu4.weight)
print(stu4.height)
stu5 = Student('lcy',54,130)
print('stu5:',stu5)
print(stu5.__dict__)
print(stu5.name)
print(stu5.weight)
print(stu5.height)
#类在对象实例化是就会调用类中的函数

LeetCode检测机制

class Solution:
    def twoSum(self, nums: list, target: int) -> list:
        for i in range(len(nums), -1, -1):  # for i in range(4) == for i in [0,1,2,3]:
            for j in range(i + 1, len(nums)):  # [1,2,3]
                if nums[i] + nums[j] == target:
                    return [i, j]
nums = [2, 7, 11, 15]
target = 9
result = [0,1]
def main(nums,target,result):
    s = Solution()
    res = s.twoSum(nums,target)
    if res == result:
        print('tongguo')
    else:
        print('butongguo')
main(nums,target,result)

类与数据类型

# lt = list([2,3,1])
# lt.sort()
# print(lt)

# class List:
#     def __init__(self,lis):
#         print(self)
#         self = lis
#         print(self)
#         pass
# lt = List([2,3,1])
# print(lt)

class List:
    def __init__(self,lis):
        self.lis = lis
    def paixu(self):    #self == lt
        self.lis.sort()

lt =List([2,3,1,456,231,789])
print(lt.lis)
lt.paixu()
print(lt.lis)
#python中一切(数据类型)皆对象,一切皆数据类型
    # dic1 = dic()
    # dic2 = dic()

x = int(10)
y = float(10.1)
def func():
    pass
print(func)
    #1.作为对象
        #1.引用   x = 10; y = x
        #2.作为容器类元素 lis = [x,func,Student]
        #3.作为函数参数 def func(x, func, Student)
        #4.作为函数返回值, return x, func, Student

def func():
    print('from func')
lis = [1,2,func]
lis[2]()

def f2(f):
    f()
f2(func)

def f3():
    return func
f3()()   #调用f3,返回对象函数func,在通过func()调用对象func函数

list_ = [23,41,58,9,5,27,15]
#冒泡排序算法
def maopao():
    for j in range(len(list_)-1):
        for i in range(0,len(list_)-1-j):
            if list_[i] > list_[i+1]:
                list_[i], list_[i+1] = list_[i+1],list_[i]
maopao()
print(list_)

#选择排序算法
def xuanze():
    min = 0
    for j in range(len(list_)):
        for i in range(j+1, len(list_)):
            if list_[i] < min:
                min = list_[i]
                list_[j] = min
xuanze()
print(list_)