python笔记(来源:尚硅谷)


因想要快速简单过一遍Python,只是简单地了解语法,没有自己记笔记,资料来源尚硅谷李立超老师

第三章 流程控制语句(视频39-57)

简介

Python代码在执行时是按照自上向下顺序执行的。
通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次
流程控制语句分成两大类:条件判断语句,循环语句

条件判断语句(if语句)

练习1:
    编写一个程序,获取一个用户输入的整数。然后通过程序显示这个数是奇数还是偶数。

练习2:
    编写一个程序,检查任意一个年份是否是闰年。
    如果一个年份可以被4整除不能被100整除,或者可以被400整除,这个年份就是闰年

练习3:
    我家的狗5岁了,5岁的狗相当于多大年龄的人呢?
    其实非常简单,狗的前两年每一年相当于人类的10.5岁,然后每增加一年就增加四岁。
    那么5岁的狗相等于人类的年龄就应该是10.5+10.5+4+4+4 = 33岁 

    编写一个程序,获取用户输入的狗的年龄,然后通过程序显示其相当于人类的年龄。
    如果用户输入负数,请显示一个提示信息

练习4:
    从键盘输入小明的期末成绩:
        当成绩为100时,'奖励一辆BMW'
        当成绩为[80-99]时,'奖励一台iphone'
        当成绩为[60-79]时,'奖励一本参考书'
        其他时,什么奖励也没有

练习5:
    大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:
        高:180cm以上; 富:1000万以上; 帅:500以上;
        如果这三个条件同时满足,则:'我一定要嫁给他'
        如果三个条件有为真的情况,则:'嫁吧,比上不足,比下有余。'
        如果三个条件都不满足,则:'不嫁!'

循环语句

练习1:
    求100以内所有的奇数之和

练习2:
    求100以内所有7的倍数之和,以及个数

练习3: 
    水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1**3 + 5**3 + 3**3 = 153)。
    求1000以内所有的水仙花数

练习4:    
    获取用户输入的任意数,判断其是否是质数。质数是只能被1和它自身整除的数,1不是质数也不是合数。

循环嵌套

练习1:
    打印99乘法表
    1*1=1
    1*2=2 2*2=4
    1*3=3 2*3=6 3*3=9
    ...                 9*9=81

练习2:
    求100以内所有的质数

小游戏 《唐僧大战白骨精》

1、身份选择
    ① 显示提示信息
        欢迎光临 xxx 游戏!
        请选择你的身份:
            1.xxx
            2.xxx
        请选择:x
    ② 根据用户选择来分配身份(显示不同的提示消息)  
        1.---
        2.---
        3.---  

2、游戏进行
    ① 显示玩家的基本信息(攻击力 生命值)
    ② 显示玩家可以进行的操作:
        1、练级
            - 提升玩家的攻击力和生命值
        2、打BOSS
            - 玩家对BOSS进行攻击,玩家要攻击BOSS,BOSS对玩家进行反击
            - 计算BOSS是否被玩家消灭,玩家是否被BOSS消灭
            - 游戏结束
        3、逃跑
            - 退出游戏,显示提示信息,游戏结束!

第四章 序列(视频58-76)

列表(list)

- 列表是Python中的一个对象
- 对象(object)就是内存中专门用来存储数据的一块区域
- 之前我们学习的对象,像数值,它只能保存一个单一的数据
- 列表中可以保存多个有序的数据
- 列表是用来存储对象的对象
- 列表的使用:
    1.列表的创建
    2.操作列表中的数据

- 练习:
    - 创建一个列表,在列表中保存你最好的5个朋友的名字
        然后分别通过索引来获取每一个朋友的名字

序列(sequence)

- 序列是Python中最基本的一种数据结构
- 数据结构指计算机中数据存储的方式
- 序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)
    并且序列中的数据会按照添加的顺序来分配索引
- 序列的分类:
    可变序列(序列中的元素可以改变):
        > 列表(list)
    不可变序列(序列中的元素不能改变):
        > 字符串(str)    
        > 元组(tuple)
    - 刚刚我们所讲所有操作都是序列的通用操作01 02 03 三个文件中的操作

EMS(Employee Manager System 员工管理系统) 练习

- 做命令行版本的员工管理系统
- 功能:
    四个:
        1.查询
            - 显示当前系统当中的所有员工
        2.添加
            - 将员工添加到当前系统中
        3.删除
            - 将员工从系统当中删除
        4.退出
            - 退出系统
- 员工信息要保存到哪里? 列表,在系统中应该有一个列表,专门用来保存所有员工信息的 

可变对象

- 每个对象中都保存了三个数据:
    id(标识)
    type(类型)
    value(值)    

- 列表就是一个可变对象
    a = [1,2,3]

- a[0] = 10 (改对象)
    - 这个操作是在通过变量去修改对象的值
    - 这种操作不会改变变量所指向的对象    
    - 当我们去修改对象时,如果有其他变量也指向了该对象,则修改也会在其他的变量中体现

- a = [4,5,6] (改变量)
    - 这个操作是在给变量重新赋值
    - 这种操作会改变变量所指向的对象
    - 为一个变量重新赋值时,不会影响其他的变量

- 一般只有在为变量赋值时才是修改变量,其余的都是修改对象

字典(dict)

- 字典属于一种新的数据结构,称为映射(mapping)
- 字典的作用和列表类似,都是用来存储对象的容器
- 列表存储数据的性能很好,但是查询数据的性能的很差
- 在字典中每一个元素都有一个唯一的名字,通过这个唯一的名字可以快速的查找到指定的元素
- 在查询元素时,字典的效率是非常快的
- 在字典中可以保存多个对象,每个对象都会有一个唯一的名字
    这个唯一的名字,我们称其为键(key),通过key可以快速的查询value
    这个对象,我们称其为值(value)
    所以字典,我们也称为叫做键值对(key-value)结构
    每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)

集合(set)

- 集合和列表非常相似
- 不同点:
    1.集合中只能存储不可变对象
    2.集合中存储的对象是无序(不是按照元素的插入顺序保存)
    3.集合中不能出现重复的元素

第五章 函数

函数简介(function)

- 函数也是一个对象
- 对象是内存中专门用来存储数据的一块区域
- 函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用
- 创建函数:
    def 函数名([形参1,形参2,...形参n]) :
        代码块
    - 函数名必须要符号标识符的规范
        (可以包含字母、数字、下划线、但是不能以数字开头)    
- 函数中保存的代码不会立即执行,需要调用函数代码才会执行
- 调用函数:
    函数对象()
- 定义函数一般都是要实现某种功能的    

函数的参数

- 在定义函数时,可以在函数名后的()中定义数量不等的形参,
    多个形参之间使用,隔开
- 形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值
- 实参(实际参数)
    - 如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,
        实参将会赋值给对应的形参,简单来说,有几个形参就得传几个实参

- 练习1:
    定义一个函数,可以用来求任意三个数的乘积

- 练习2:
    定义一个函数,可以根据不同的用户名显示不同的欢迎信息    

函数式编程

- 在Python中,函数是一等对象
- 一等对象一般都会具有如下特点:
    ① 对象是在运行时创建的
    ② 能赋值给变量或作为数据结构中的元素
    ③ 能作为参数传递
    ④ 能作为返回值返回
    
- 高阶函数
    - 高阶函数至少要符合以下两个特点中的一个
      ① 接收一个或多个函数作为参数
      ② 将函数作为返回值返回 

- 装饰器         

class 类名([父类]) :

公共的属性... 

# 对象的初始化方法
def __init__(self,...):
    ...

# 其他的方法    
def method_1(self,...):
    ...

def method_2(self,...):
    ...

...    

第六章 对象(Object)

什么是对象?

- 对象是内存中专门用来存储数据的一块区域。
- 对象中可以存放各种数据(比如:数字、布尔值、代码)
- 对象由三部分组成:
    1.对象的标识(id)
    2.对象的类型(type)
    3.对象的值(value)

面向对象(oop)

- Python是一门面向对象的编程语言
- 所谓的面向对象的语言,简单理解就是语言中的所有操作都是通过对象来进行的
- 面向过程的编程的语言
    - 面向过程指将我们的程序的逻辑分解为一个一个的步骤,
        通过对每个步骤的抽象,来完成程序
    - 例子:
        - 孩子上学
            1.妈妈起床
            2.妈妈上厕所
            3.妈妈洗漱
            4.妈妈做早饭
            5.妈妈叫孩子起床
            6.孩子上厕所
            7.孩子要洗漱
            8.孩子吃饭
            9.孩子背着书包上学校

    - 面向过程的编程思想将一个功能分解为一个一个小的步骤,
        我们通过完成一个一个的小的步骤来完成一个程序
    - 这种编程方式,符合我们人类的思维,编写起来相对比较简单
    - 但是这种方式编写代码的往往只适用于一个功能,
        如果要在实现别的功能,即使功能相差极小,也往往要重新编写代码,
        所以它可复用性比较低,并且难于维护 

- 面向对象的编程语言
    - 面向对象的编程语言,关注的是对象,而不关注过程 
    - 对于面向对象的语言来说,一切都是对象       
    - 例子:
        1.孩他妈起床叫孩子上学

    - 面向对象的编程思想,将所有的功能统一保存到对应的对象中
        比如,妈妈功能保存到妈妈的对象中,孩子的功能保存到孩子对象中
        要使用某个功能,直接找到对应的对象即可
    - 这种方式编写的代码,比较容易阅读,并且比较易于维护,容易复用。
    - 但是这种方式编写,不太符合常规的思维,编写起来稍微麻烦一点 

- 简单归纳一下,面向对象的思想
    1.找对象
    2.搞对象

类(class)

- 我们目前所学习的对象都是Python内置的对象
- 但是内置对象并不能满足所有的需求,所以我们在开发中经常需要自定义一些对象
- 类,简单理解它就相当于一个图纸。在程序中我们需要根据类来创建对象
- 类就是对象的图纸!
- 我们也称对象是类的实例(instance)
- 如果多个对象是通过一个类创建的,我们称这些对象是一类对象
- 像 int() float() bool() str() list() dict() .... 这些都是类
- a = int(10) # 创建一个int类的实例 等价于 a = 10
- 我们自定义的类都需要使用大写字母开头,使用大驼峰命名法(帕斯卡命名法)来对类命名

- 类也是一个对象!
- 类就是一个用来创建对象的对象!
- 类是type类型的对象,定义类实际上就是定义了一个type类型的对象

使用类创建对象的流程(参考图1)

1.创建一个变量
2.在内存中创建一个新对象
3.将对象的id赋值给变量

类的定义(参考图2)

- 类和对象都是对现实生活中的事物或程序中的内容的抽象
- 实际上所有的事物都由两部分构成:
    1.数据(属性)
    2.行为(方法)

- 在类的代码块中,我们可以定义变量和函数,
    变量会成为该类实例的公共属性,所有的该类实例都可以通过 对象.属性名 的形式访问 
    函数会成为该类实例的公共方法,所有该类实例都可以通过 对象.方法名() 的形式调用方法

- 注意:
    方法调用时,第一个参数由解析器自动传递,所以定义方法时,至少要定义一个形参! 

- 实例为什么能访问到类中的属性和方法
    类中定义的属性和方法都是公共的,任何该类实例都可以访问

    - 属性和方法查找的流程
        当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性,
            如果有,则直接返回当前的对象的属性值,
            如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值,
            如果类对象中依然没有,则报错!

    - 类对象和实例对象中都可以保存属性(方法)
        - 如果这个属性(方法)是所有的实例共享的,则应该将其保存到类对象中
        - 如果这个属性(方法)是某个实例独有,则应该保存到实例对象中     
        
    - 一般情况下,属性保存到实例对象中
        而方法需要保存到类对象中    

创建对象的流程

p1 = Person()的运行流程
    1.创建一个变量
    2.在内存中创建一个新对象
    3.__init__(self)方法执行
    4.将对象的id赋值给变量

类的基本结构

class 类名([父类]) :

    公共的属性... 

    # 对象的初始化方法
    def __init__(self,...):
        ...

    # 其他的方法    
    def method_1(self,...):
        ...

    def method_2(self,...):
        ...

    ...    

- 练习:
    尝试自定义一个表示狗的类(Dog)      
        属性:
            name
            age
            gender
            height
            ...
        方法:  
            jiao()
            yao()
            run()
            ...

第七章 异常和文件

异常

程序在运行过程当中,不可避免的会出现一些错误,比如:
    使用了没有赋值过的变量
    使用了不存在的索引
    除0
    ...
这些错误在程序中,我们称其为异常。
程序运行过程中,一旦出现异常将会导致程序立即终止,异常以后的代码全部都不会执行!    

处理异常

程序运行时出现异常,目的并不是让我们的程序直接终止!
Python是希望在出现异常时,我们可以编写代码来对异常进行处理!    

try语句
    try:
        代码块(可能出现错误的语句)
    except 异常类型 as 异常名:
        代码块(出现错误以后的处理方式)
    except 异常类型 as 异常名:
        代码块(出现错误以后的处理方式)
    except 异常类型 as 异常名:
        代码块(出现错误以后的处理方式)
    else:
        代码块(没出错时要执行的语句)    
    finally:
        代码块(该代码块总会执行)    

    try是必须的 else语句有没有都行
    except和finally至少有一个    

可以将可能出错的代码放入到try语句,这样如果代码没有错误,则会正常执行,
    如果出现错误,则会执行expect子句中的代码,这样我们就可以通过代码来处理异常
    避免因为一个异常导致整个程序的终止            

异常的传播(抛出异常)

当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播,
    如果函数中没有对异常进行处理,则异常会继续向函数调用处传播,
    如果函数调用处处理了异常,则不再传播,如果没有处理则继续向调用处传播
    直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并且显示异常信息

当程序运行过程中出现异常以后,所有的异常信息会被保存一个专门的异常对象中,
    而异常传播时,实际上就是异常对象抛给了调用处
    比如 : ZeroDivisionError类的对象专门用来表示除0的异常
            NameError类的对象专门用来处理变量错误的异常
            ....

在Python为我们提供了多个异常对象            

抛出异常

- 可以使用 raise 语句来抛出异常,
    raise语句后需要跟一个异常类 或 异常的实例

文件(File)

- 通过Python程序来对计算机中的各种文件进行增删改查的操作
- I/O(Input / Output)
- 操作文件的步骤:
    ① 打开文件
    ② 对文件进行各种操作(读、写),然后保存
    ③ 关闭文件

相关