Python基础学习

    技术2022-07-13  73


    typora-copy-images-to: Python 数据分析.assets

    文章目录

    typora-copy-images-to: Python 数据分析.assets Python 数据分析第一章 Python基础知识1.1 Python基础知识1.1.1 固定语法(1)、声明和注释(2)、缩进与多行语句(3)、标识符、保留字与赋值 1.1. 2 运算符(1)算术运算符(2)赋值运算符(3)比较运算符(4)逻辑运算符(5)身份运算符(6)成员运算符(7)运算符优先级 1.1. 3 数据类型(1)基础数据类型① number型② str型 (2)复合数据类型① 列表(list)② 元组(tuple)③ 字典(dict)④ 集合(set) 1.1. 4 Python I/O(1)input()与print()(2)文件I/O 1.2 控制语句1.2.1 条件语句1.2.2 循环语句1.2.3 break、continue、pass(1)break 语句(2)continue语句(3)pass 1.2.4 列表推导式 1.3 函数与对象1.3.1 函数(1)内置函数① 与数据对象相关的函数② 数学计算函数③ 与str相关的函数④ 与序列对象相关的函数⑤ I/O功能函数⑥ 用于查询与判断的函数⑦ 其它内置函数 (2) 函数定义1)def语句2)参数3)作用域 (3)匿名函数 1.3.2 对象(1)面向对象简介(2)属性与方法① 类属性与实例属性② 访问限制③ 方法④ 特殊属性和方法 (3)装饰器(4)继承和多态 1.3.3 常用库安装(1)第三方库安装(2)第三方库导入(3)第三方库创建 1.4 Python环境搭建与使用

    Python 数据分析

    第一章 Python基础知识

    1.1 Python基础知识

    1.1.1 固定语法

    (1)、声明和注释
    声明:当源文件中用到非ASCII字符时,必须在头文件进行字符编码声明 #-*-coding:utf-8 -*- 注释:

    单行注释:#

    多行注释:三个单引号或三个双引号

    ''' 这是一个三单引号注释 ''' print("测试三单引号注释") """ 这是一个三双引号注释 """ print("测试三双引号注释")

    说明:引号类型要一致

    (2)、缩进与多行语句

    缩进:四个空格或一个制表符创建(Tab)

    多行语句:使用反斜杠实现换行(\)

    total_price=apple_price+orange_price+\ banana_price

    在[],(),{}内换行不需要反斜线

    一行可以实现多个语句,这时用分号(;)隔离

    apple_price = 1; banana_price = 1.5; pear_price = 0.5
    (3)、标识符、保留字与赋值

    标识符:变量、函数、类、模块及其他对象的名字,可以包含字母数字下划线,但不能以数字开头,大小写敏感

    保留字:保留字即关键字,是编程语言中已经定义过的字符。不允许将保留字用作一般标识符。

    import keyword print("python中所有的保留字:",keyword.kwlist) python中所有的保留字: ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

    赋值:

    等号赋值

    num_int=1 string='python' num_float=9.9

    序列赋值:将多个变量排列成变量序列 ,变量之间用逗号相连,使用等号作为赋值符号,后接值序列 ,值之间以逗号相连。

    num_int,string,list1=123,'str',[4,6]

    链接赋值:将多个变量用等号相连,在末个变量后用等号连接一个赋值。适用于给多个变量赋同一值的情况,又称多目标赋值。

    str1 = str2 = str3 = 'STR' print('str1, str2, str3分别为:', str1, str2, str3) print('str1, str2, str3的内存地址分别为:', id(str1), id(str2), id(str3)) str1, str2, str3分别为: STR STR STR str1, str2, str3的内存地址分别为: 2142623356608 2142623356608 2142623356608

    增量赋值

    x = 100 x += 10 print('x += 10等价于x=x+10,其值为:', x)

    1.1. 2 运算符

    (1)算术运算符

    +:加

    -:减 *:乘 /:除 %:取模 **:幂 //:

    num_int = 4 num_float = 4.0 print('整数与浮点数的和为:', num_int + num_float) print('整数与浮点数的差为:', num_int - num_float) print('整数与浮点数的积为:', num_int * num_float) print('浮点数与整数的商为:', num_float / num_int) print('浮点数对整数取模结果为:', num_float % num_int) print('浮点数的整数次幂为:', num_float ** num_int) 整数与浮点数的和为: 8.0 整数与浮点数的差为: 0.0 整数与浮点数的积为: 16.0 浮点数与整数的商为: 1.0 浮点数对整数取模结果为: 0.0 浮点数的整数次幂为: 256.0
    (2)赋值运算符

    = += -= *= /= %= **= //=

    (3)比较运算符

    == < = <= !=

    (4)逻辑运算符

    and (&) or ( | ) not

    num_bool1 = False num_bool2 = True print('num_bool1 and num_bool2返回值为:', num_bool1 and num_bool2) print('num_bool1 or num_bool2返回值为:', num_bool1 or num_bool2) print('not num_bool2的返回值为:', not (num_bool2)) num_bool1 and num_bool2返回值为: False num_bool1 or num_bool2返回值为: True not num_bool2的返回值为: False
    (5)身份运算符

    is is not

    num_int1 = 15 num_int3 = 15 print('num_int1与num_int3储存单位是否相同:', num_int1 is num_int3) num_int2 = 15.0 print('num_int1与num_int2储存单位是否相同:', num_int1 is num_int2) # 如果储存单位相同就返回True,否则返回False print('num_int1与num_int3储存单位是否不同:', num_int1 is not num_int3) print('num_int1与num_int2储存单位是否不同:', num_int1 is not num_int2) num_int1与num_int3储存单位是否相同: True num_int1与num_int2储存单位是否相同: False num_int1与num_int3储存单位是否不同: False num_int1与num_int2储存单位是否不同: True
    (6)成员运算符

    in not in

    num_int1 = 15 list2 = [1, 'apple', 15] print('num_int1是否在list2中:', num_int1 in list2) array = ('orange', 6, 15) print('num_int1是否不在array中:', num_int1 not in array) ------------------------------------------- num_int1是否在list2中: True num_int1是否不在array中: False
    (7)运算符优先级
    ** ~,+,- *,/,%,// +,- >>,<< & ^,| <=,<,>,>= <>,==,!= =,%=,/=,//=,-=,+=,*=,**= is,is not in,not in and ,or ,not print('num_float + num_int1 / num_int3 =', num_float + num_int1 / num_int3) # 先执行加减法运算,再执行比较运算 print('num_int1 - num_int2 > num_int1 - num_int3:', num_int1 - num_int2 > num_int1 - num_int3) # 先执行加减法运算,再做身份判断 print('num_int1 - num_int3 + num_int1 is num_int1:', num_int1 - num_int3 + num_int1 is num_int1) # 先执行指数运算,再执行减法运算,最后做身份判断 print('num_float ** 2 - 1 is not num_int2:', num_float ** 2 - 1 is not num_int2) num_float + num_int1 / num_int3 = 5.0 num_int1 - num_int2 > num_int1 - num_int3: False num_int1 - num_int3 + num_int1 is num_int1: True num_float ** 2 - 1 is not num_int2: True

    1.1. 3 数据类型

    (1)基础数据类型
    ① number型

    number又称数字,是专门用于存储数值的数据类型,具有不可改变性。

    数据的不可改变性意味着:每改变一个数据的类型,计算机就分配内存空间以创建新的对象。

    要改变不可改变的数据类型,只能通过创造新变量的间接方式。

    number既是复合型数据中的基本元素,也是数学计算的基本元素

    Python支持4种不同的数字数据类型,包括:

    int 十进制整数,通过函数bin,oct,hex进行二进制、八进制、十六进制整数的创建或转换float 浮点数complex 复数bool 布尔值,只有True(1)和False(0)两种取值,可以直接用于数学运算 num_int = 2 num_float = 4.5 num_bool = True num_complex = 3j print('数据类型分别为:\n', type(num_int), type(num_float), type(num_bool), type(num_complex)) 数据类型分别为: <class 'int'> <class 'float'> <class 'bool'> <class 'complex'>> # 例1-20 number 类型装换与混合运算 # number类型转换, 将float转换为int(直接去掉小数部分) print('int(4.5)的结果为:', int(4.5)) # 将int转换为float(直接增加小数部分) print('float(4)的结果为:', float(4)) # 将int和float转换为complex(直接增加虚部) print('complex(4)和complex(4.5)的结果分别为:', complex(4), complex(4.5)) # 不同number类型混合运算, int + float = float print('整数和浮点数和的类型为:', type(124 + 4.0)) # int + complex = complex print('整数和复数和的类型为:', type(124 + 5.3j)) # float + complex = complex print('浮点数和复数和的类型为:', type(4.0 + 5.3j)) 结果: int(4.5)的结果为: 4 float(4)的结果为: 4.0 complex(4)complex(4.5)的结果分别为: (4+0j) (4.5+0j) 整数和浮点数和的类型为: <class 'float'> 整数和复数和的类型为: <class 'complex'> 浮点数和复数和的类型为: <class 'complex'>
    ② str型
    str又称为字符串,是用于存储Unicode字符序列、用于表示文本的数据类型。str可以由任何字符构成,包括字母、数值、符号或标点符号以及它们的任意组合。str也是不可变的,无法直接修改其中的某一位字符。字符串以单引号或双引号括起,多行字符串以三引号括起,保证两端的引号类型相同str支持索引,一般有两种方式: 索引单个数值: 变量[下标]切片: 变量[头下标:尾下标]索引的具体规则如下:1)下标为正数时,最小为0,表示第1位;最大为长度减1,表示最后1位2)下标为负数时,最大为-1,表示最后1位;最小为长度相反数,表示第1位3)当进行切片时,索引从头下标位置开始,到尾下标前一位字符终止4)在一个索引式中,头下标与尾下标可能异号,但必须保证头下标字符位置在尾下标字符之前 在这里插入代码片 - 5)头下标留空,表示索引从第1个字符开始;尾下标留空,表示索引到最后一个字符结束除一般格式外,str还支持按步长索引: 变量[头下标:尾下标:步长]变量[::-1]得到什么? # 例1-21 str 索引 string = "ilovePython" # 下标为正数,从第2个字符开始索引,到第5个字符 print('ilovePython[1:5] =', string[1:5]) # 下标为负数,从倒数第10个字符开始索引,到倒数第6个字符 print('ilovePython[-10:-6] =', string[-10:-6]) print('ilovePython[:5] =', string[:5]) # 尾下标留空,从第2个字符开始索引,到最后一个字符截止 print('ilovePython[1:] =', string[1:]) # 按步索引,从第2个元素开始索引,到第11个元素,步距为3 print('ilovePython[1:10:3] =', string[1:10:3]) ===================================================== ilovePython[1:5] = love ilovePython[-10:-6] = love ilovePython[:5] = ilove ilovePython[1:] = lovePython ilovePython[1:10:3] = let

    Str的有关函数

    1)查询函数

    string.find() string.rfind() string.index() string.rindex() string.isdecimal() string.isdigit() string.isnumeric() string.isspace()string.isalnum() string.isalpha() string.islower() string.isupper() string.startswith() string.endswith() string.istitle() string.count() # 例1-22 str 查询方法 string = 'string' print('string中n的位置和总数分别为:',string.index('n'),string.count('n')) print('string中是否只包含字母:', string.isalpha()) print('string中是否只包含数字:', string.isdigit()) print('string是否已P开头:', string.startswith('P')) print('string是否是标题化的:', string.istitle()) =================================================== string中n的位置和总数分别为: 4 1 string中是否只包含字母: True string中是否只包含数字: False string是否已P开头: False string是否是标题化的: False

    2)改写函数

    string.strip() string.lstrip() string.rstrip() string.ljust() 左对齐填充 string.rjust() 右对齐填充 string.zfill() string.center() string.expandtabs()

    string.upper() 大写化 string.lower() 小写化 string.swapcase() 大小写置换 string.captilize() string.title() string.replace() 替换

    string = 'string' print('string左对齐填充至20个字符结果为:', string.ljust(20)) print('string右对齐填充至20个字符结果为:', string.rjust(20)) print('string大写化结果为:', string.upper()) print('string大小写置换结果为:', string.swapcase()) print('string中h替换为H结果为:', string.replace('h','H')) ========================================================= string左对齐填充至20个字符结果为: string string右对齐填充至20个字符结果为: string string大写化结果为: STRING string大小写置换结果为: STRING string中h替换为H结果为: string

    3)其它函数

    string.encode() string.decode() string.partition() string.rpartition() string.splitlines() string.join() string.split() string.format()

    string = 'string' # 以指定格式编码 string = string.encode('UTF-16', 'strict') print ("string编码为:", string) # 以指定格式解码 string = string.decode('UTF-16', 'strict') print ("string解码为:", string) # 以指定分隔符分割str print(string.partition(".")) string1 = ('I','love','Python') sep = '-' # 以sep为分隔将string1合并为新的字符串 print('以sep分隔合并string1为:', sep.join(string1)) ===================================================== string编码为: b'\xff\xfes\x00t\x00r\x00i\x00n\x00g\x00' string解码为: string ('string', '', '') 以sep分隔合并string1为: I-love-Python

    4)转义字符

    说明:可以使用+或*号分别实现字符串的连接和重复操作

    # 例1-25 str 转义与常用操作 string = 'string' print ('\note\mybook') # str中包含\n,识别为换行符并转义 print ('\title\mybook') # str中包含\t,识别为制表符并转义 print (r'\note\mybook ') # 使用r制止转义 print (string + "TEST") # 输出连接的str print (string * 2) # 输出str两次 ote\mybook itle\mybook \note\mybook stringTEST stringstring
    (2)复合数据类型

    复合数据类型是指以某种方式组合数据元素形成的数据元素集合。Python中常用的复合数据类型有列表、元组、字典和集合。

    ① 列表(list)

    列表属于序列类数据,是包含0或多个对象引用的有序序列。 列表元素可以是任意数据类型。

    1)创建 [ ]list()函数 2)索引、连接及重复 与str对应操作类似3)有关函数 list.index()list.insert()list.extend()list.remove()list.sort()list.count()list.append()list.pop()list.reverse() # 例1-26 创建 list # 使用方括号创建一个非空list list1 = ['runoob', 786, 2.23, 'john'] print('方括号建立的列表为:', list1) #建立元组 tuple1 = (123, 'xyz', 'zara', 'abc') list2 = list(tuple1) print('元组转换成列表结果为:', list2) # list函数将str拆开,作为新list中的元素 list3 = list('china') print('字符串转换成列表结果为:', list3) 结果: ['runoob', 786, 2.23, 'join'] [123, 'xyz', 'zara', 'abc'] ['c', 'h', 'i', 'n', 'a']
    ② 元组(tuple)

    元组与列表同属于序列类数据,是包含0个或多个对象引用的有序序列 。与列表不同在是,元组是不可更改的数据类型。

    1)创建

    用(),或将现有的数据转换为元组

    2)索引、连接与重复

    与str和list类似,不同的是,元组不能增删元素,只能用del删除整个元组。

    3)函数

    tuple.count()tuple.index() # 例1-29 创建tuple # 使用圆括号创建tuple tup1 = ('Google', 'Runoob') print('查看tup1类型:', type(tup1), '\n','查看tup1:', tup1) # 不加括号创建tuple tup2 = "a", "b", "c", "d" print('查看tup2:', tup2, '\n','查看tup2类型:', type(tup2)) # 将[‘x',’y',’z']转换成tuple ==================================== 查看tup1类型: <class 'tuple'> 查看tup1: ('Google', 'Runoob') 查看tup2: ('a', 'b', 'c', 'd') 查看tup2类型: <class 'tuple'> tup3 = tuple(['x','y','z']) ==================================== print('查看tup3:', tup3, '\n','查看tup3类型:', type(tup3)) # 单个数字元素加逗号,变量是tuple tup4 = (50,) # 单个数字元素无逗号,变量是int tup5 = (50) print('tup4和tup5的类型分别为:', type(tup4), type(tup5)) ===================================== 查看tup3: ('x', 'y', 'z') 查看tup3类型: <class 'tuple'> tup4和tup5的类型分别为: <class 'tuple'> <class 'int'> ====================================== print('tup2中第3元素为:', tup2[2]) print('tup2中第1个到倒数第二个元素为:', tup2[:-1]) print('连接两个元组结果为:', tup1 + tup2) print('元组重复输出结果为:', tup3 * 2) tup2中第3元素为: c tup2中第1个到倒数第二个元素为: ('a', 'b', 'c') 连接两个元组结果为: ('Google', 'Runoob', 'a', 'b', 'c', 'd') 元组重复输出结果为: ('x', 'y', 'z', 'x', 'y', 'z') =========================================== print('tup2中元素a出现的次数:', tup2.count('a')) print('tup2中元素a首次出现的位置:', tup2.index('a')) tup2中元素a出现的次数: 1 tup2中元素a首次出现的位置: 0
    ③ 字典(dict)

    字典属于映射类数据,通过键而不是位置来索引。键是不可变对象的引用,值是可以指向任意类型对象的对象引用。具有可变性。同一个键不允许出现两次。

    1)创建

    用**{ }或dict()**函数

    2)索引

    与str和list不同,字典是通过键索引值。

    3)常用方法

    dict.items() #返回dict的所有键值对 dict.values() #返回dict的所有值

    dict.setdefault() #以键查值,如果键不存在,将添加键 dict.copy() #将一个dict的内容拷贝给另一个dict dict.popitem() # 随机返回并删除dict中的一个键和值 dict.keys() #返回dict的所有键 dict.get() #以将查值,返回指定键的值 dict.update() #将dict的键值对更新到另一个dict 中 dict.pop() #删除指定键的值 dict.clear() #清空dict

    # 例1-32 创建 dict # 使用花括号创建空dict,更新键值对 dict1 = {} dict1['one'] = "This is 1" dict1['two'] = "This is 2" print('查看字典:', dict1) # 使用dict函数创建dict,指定键值对 dict2 = dict(name='小明', height=187) print('查看字典:', dict2) ============================ 查看字典: {'one': 'This is 1', 'two': 'This is 2'} 查看字典: {'name': '小明', 'height': 187} ===================================== print('通过键索引字典元素:', dict1['one']) dict1['one'] = 'this is 1' print('以键改字典元素值:', dict1) dict1[3] = 'This is 3' print('更新后的字典为:', dict1) del dict1[3] print('删除键3后的字典为:', dict1) ====================================== 通过键索引字典元素: This is 1 以键改字典元素值: {'one': 'this is 1', 'two': 'This is 2'} 更新后的字典为: {'one': 'this is 1', 'two': 'This is 2', 3: 'This is 3'} 删除键3后的字典为: {'one': 'this is 1', 'two': 'This is 2'} =========================================== print('输出dict1中所有键值对:', dict1.items(), '\n', '输出dict1中所有的键:', dict1.keys(), '\n', '输出dict1中所有的值:', dict1.values()) ================================================ dict_items([('one', 'this is 1'), ('two', 'This is 2')]) dict_keys(['one', 'two']) dict_values(['this is 1', 'This is 2']) =============================================
    ④ 集合(set)

    set是引用 0个或多个对象的无序组合,所引用的对象都是不可变的,所有内置的固定数据类型都是不可变的。

    1)创建

    用{ }或set()函数

    2)索引

    set没有索引的概念,无法进行查询和修改元素的操作,但支持增删和清空、拷贝。

    3)常用方法

    set.add() #将元素添加到set中,如已存在则不做操作 set.update() #通过更新添加元素

    set.pop() #随机set中的删除 set.remove() #删除指定元素 set.discard() #删除指定元素 set.clear() #清除set中的所有元素 set.copy() #返回set的浅拷贝

    4)集合运算方法

    □ 子集 < 或 issubset() □ 并集 | 或 isunion() □ 交集 & 或 intersection() □ 差集 - 或 difference() □ 对称差集 ^ 或 symmetric_difference()

    # 例1-35 创建 set # 使用非空的{}创建set set1 = {1, 2, 3} print('set1的类型为:', type(set1)) # 创建一个空的set只能使用set函数 set2 = set() print('查看set2:', set2, '\n', 'set2的类型为:', type(set2)) # 将list、tuple转换为set set3 = set([1,2,3]) set4 = set((1,2,3)) print('查看set3和set4:', set3, set4, '\n', 'set3和set4的类型分别为:', type(set3), type(set4)) ==================================== set1的类型为: <class 'set'> 查看set2: set() set2的类型为: <class 'set'> 查看set3和set4: {1, 2, 3} {1, 2, 3} set3和set4的类型分别为: <class 'set'> <class 'set'> ===================================== # 例1-36 set 常用方法 set1.add('a') print('add方法向set1中添加元素结果为:', set1) set1.pop() print('pop方法删除set1中任意一个元素结果为:', set1) set2.clear() print('清除set2中内容结果为:', set2) ===================================== add方法向set1中添加元素结果为: {1, 2, 3, 'a'} pop方法删除set1中任意一个元素结果为: {2, 3, 'a'} 清除set2中内容结果为: set() ======================================= # 例1-37 set 集合运算 print('set4是否为set1的子集:', set4 < set1) print('set4和set1的并集为:', set4 | set1) print('set4和set1的交集为:', set4 & set1) print('set4和set1的差集为:', set4 - set1) ======================================= set4是否为set1的子集: False set4和set1的并集为: {1, 2, 3, 'a'} set4和set1的交集为: {2, 3} set4和set1的差集为: {1}

    1.1. 4 Python I/O

    ​ 相比其它语言,Python中的I/O操作更加简单方便,通过简单的指令就可以实现基本的输入输出。

    (1)input()与print()

    input()用于交互式的信息输入,可以在括号加入提示信息,所有接收的数据都默认为str类型。

    print()实现多样化的输出,使用“%字母”可以实现格式化输出。

    常用的格式化字符有: □ %s,%c □ %b,%d,%i,%o,%x □ %e,%E,%f,%F,%g

    实现格式化输出还可以用format(),功能更为强大。 format()收集位置参数和关键字参数的任意集合,使用它们的值替换str中的占位符。该函数用{}作为特殊字符代替%,也支持格式符。

    format()常用的格式符有:

    ‘c’, ’b’, ’o’, ’d’, ’x’, ’e’, ’g’, ’n’, ’%’

    # 例1-38 输入不同数据类型 # 输入一个数字,由Python默认类型 number1 = input('请输入一个数字:') # 输入一个str,由Python默认类型 str1 = input('请输入一个字符串:') # 输入一个数字,并将其转换为int类型 number2 = int(input('请输入一个数字:')) # 查看以上输入的输出结果类型 print('number1、str1和number2的类型分别为:\n', type(number1), type(str1), type(number2)) ============================================ 请输入一个数字:4 请输入一个字符串:string 请输入一个数字:5 number1、str1和number2的类型分别为: <class 'str'> <class 'str'> <class 'int'> ========================================== # 例1-39 print 函数应用 # print函数接受多个str print('我', '爱', '中华') # print函数在打印前计算结果 print('100+200 =', 100 + 200) ========================================== 我 爱 中华 100+200 = 300 ========================================= # 例1-40 “ % + 格式符” 格式化输出 # 用%s、%d分别格式化字符串'Zara'和整数20 print("我的名字叫做%s,已经%d岁了!"%('Zara',20)) # 用%d格式化16,用%o将十进制整数16用八进制数表示 print("%d 的八进制是 %o"%(16,16)) # 用%.3f将整数转化为保留小数点后3位的float print("23 转化为保留3位小数的浮点数%.3f"%(23)) =========================================== 我的名字叫做Zara,已经20岁了! 16 的八进制是 20 23 转化为保留3位小数的浮点数23.000
    (2)文件I/O

    常用的文件操作函数有:

    open(filename,mode) read() write() close()

    # 例1-41 read 函数读取 test.txt 文件 # 以只读模式打开test.txt文件 data = open('D:/PythonTest.txt', 'r') # 读取文件中的内容,存到content变量中 content = data.read() # 打印出content变量中包含的文本内容 print('该文本中的内容是:', content) ================================ 该文本中的内容是: Hello China! ================================ #例1-42 write 函数写入文件 # 打开一个文件 web = open('D:/PythonTest.txt', 'w') # 转换内容,写入文件 value = ('http://www.tipdm.org', 14) str_value = str(value) web.write(str_value) web.close() # 打开文本,读取出写入的内容 web = open('D:/PythonTest.txt', 'r') content = web.read() print('该文本中的内容是:', content) ================================ 该文本中的内容是: ('http://www.tipdm.org', 14)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nWL2Zh1J-1593658813748)(Python 数据分析.assets/image-20200530160635865.png)]

    1.2 控制语句

    1.2.1 条件语句

    (1)if-else语句

    if 条件表达式: 操作语句1 else: 操作语句2

    name=input('请输入用户名:') password=input('请输入密码:') if name=='Lisa' and password == "123": print("登陆成功,欢迎%s"%(name)) else: print("输入错误,请重新输入") ===================================== 请输入用户名:Lisa 请输入密码:123 登陆成功,欢迎Lisa

    (2)if-elif-else语句

    ​ if 条件表达式: ​ 操作语句1 ​ elif 条件表达式2: ​ 操作语句2 ​ else: ​ 操作语句3

    # 例1-44 使用if-elif-else语句实现年龄段的判断 age = input('请输入您的年龄:') age = int(age) if age < 18: print('未成年人!') elif age >= 18 and age <= 25: print('青年人!') elif age > 25 and age <= 60: print('中年人!') else: print('老年人!') =================================== 请输入您的年龄:21 青年人!

    (3)if 语句嵌套

    #例1-45 嵌套if-elif-else语句 age = input('请输入你的年龄:') age = int(age) if age == 35: nation = input('请输入你的国籍:') if nation == '英国': print('你是Tom! ') elif (nation == '法国'): print('你是Frank! ') else: print('你是Bob! ') elif age == 21: print('你是Jane,来自南非! ') elif age == 51: print('你是Washington,来自澳大利亚! ') else: print('请输入正确年龄值! ')

    (4)单行if 语句

    # 例1-46 if-else语句的单行形式 num1, num2 = 11, 90 print('num1加num2为百分数') if 1000 > num1 + num2 >100 else print('num1加num2不为百分数') ============================== num1加num2为百分数

    1.2.2 循环语句

    (1)for 语句

    for 变量 in 序列: 操作语句

    # 例1-47 for语句遍历提取str # 单纯遍历的for语句 names = ['Michael', 'Bob', 'Tracy'] # 遍历输出names中的元素 for name in names: print(name) =================== Michael Bob Tracy

    (2)while语句

    ​ while 条件表达式:

    ​ 操作语句1 ​ 操作语句2

    (3)循环嵌套

    例1:

    #例1-48 for语句遍历查询dict dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4} # 遍历键值对 print('\nkey_value:', end = '') for key, value in dic.items(): print(key, value, sep = ':', end = ' ') # 遍历键 print('\nkeys:', end = '') for key in dic.keys(): print(key, end = ' ') # 遍历值 print('\nvalues:', end = '') for value in dic.values(): print(value, end = ' ') ================================== key_value:a:1 b:2 c:3 d:4 keys:a b c d values:1 2 3 4

    例2:

    # 例1-49 嵌套for语句 students = ['小明', '小红'] subjects = ['语文', '数学'] sum1 = [] avg = [] for i in students: print ('开始录入%s的考试成绩!'%i) sum = 0 for j in subjects: print('请输入%s成绩:'%j) score = int(input()) sum += score average = sum / 2 avg.append(average) sum1.append(sum) print(students, '的总分依次是', sum1, ',', '平均分依次是', avg) print('完成成绩录入!') =========================== 开始录入小明的考试成绩! 请输入语文成绩: 99 请输入数学成绩: 90 开始录入小红的考试成绩! 请输入语文成绩: 89 请输入数学成绩: 100 ['小明', '小红'] 的总分依次是 [189, 189] , 平均分依次是 [94.5, 94.5] 完成成绩录入!

    例3:

    # 例1-50 while语句 sum = 0 n = 99 while n > 0: sum += n n -= 2 print(sum) ========== 2500

    例4:

    # 例1-51 嵌套while语句 j = 1 while j <= 2: sum = 0 i = 1 name = input('请输入学生姓名:') while i <= 2: print ('请输入第%d门的考试成绩: '%i) sum += int(input()) i += 1 avg = sum / (i-1) print(name, '的平均成绩是%d'%avg) j += 1 print('学生成绩输入完成!') ========================= 请输入学生姓名:李云 请输入第1门的考试成绩: 100 请输入第2门的考试成绩: 98 李云 的平均成绩是99 请输入学生姓名:赵德辉 请输入第1门的考试成绩: 99 请输入第2门的考试成绩: 89 赵德辉 的平均成绩是94 学生成绩输入完成!

    1.2.3 break、continue、pass

    (1)break 语句

    ​ 结束本层循环

    (2)continue语句

    ​ 结束本次循环

    (3)pass

    ​ 空语句,占位

    例1:

    # 例1-52 break语句的使用 # break语句用于for循环 string = "Python" for i in string: # 遍历至string中的字符n时,不再执行else代码块 if i == 'n': break else: print("letter:{}". format(i)) ================= letter:P letter:y letter:t letter:h letter:o # break语句用于while循环 counts = 0 while True: print(counts) counts += 1 # 满足counts等于3时跳出循环,不再进入循环体 if counts == 3: break ================ 0 1 2 # 例1-53 # 第一层循环,遍历次数为2 for i in range(2): print("-----%d-----" %i) # 第二层循环,遍历次数为5 for j in range(5): # 当j等于2或4时,不执行循环体 if j == 2 or j == 4: continue print(j) ============================ -----0----- 0 1 3 -----1----- 0 1 3 # 例1-54 for e in "Python": # e 为y时,不做任何操作,不会被输出 if e == "y": pass else: print(e) ======================= P t h o n

    1.2.4 列表推导式

    列表推导式可以从一个数据序列构建另一个新的数据序列的结构体,能够非常简洁地构造新的变量。

    列表推导式的基本语法格式如下:

    ​ [ 操作语句 for 变量 in 序列 if 条件表达式 ]

    # 例1-55 vec = [-4, -2, 0, 2, 4] # 用vec中元素的倍数,创建一个数组 print([x * 2 for x in vec]) # 创建一个包含2元tuple的list print([(x, x ** 2) for x in range(6)]) ========================================= [-8, -4, 0, 4, 8] [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]

    1.3 函数与对象

    `函数`、`类`是为了提高编程的效率而定义的一种代码部件。

    函数是将 一些语句集合在一起,使其能够反复在程序中运行。

    对象则可以视作数据及由一系列可存取、操作这些数据的方法所组成的集合,反映了“万物皆对象”的理念。

    1.3.1 函数

    (1)内置函数

    ​ 内置函数是安装完Python后无需调用任何库就可直接使用的函数,这些函数提供了编程所需的最基础的功能。

    ① 与数据对象相关的函数

    int(),bin(),oct(),hex(),float(),complex(),bool(),str(),list(),tuple(),dict(),setf(),frozenset(),bytes(),bytearray(),chr(),ord(),ascii(),hash(),object()

    ② 数学计算函数

    max(),min(),sum(),abs(),pow(),round(),divmon()

    ③ 与str相关的函数

    format(),compile(),eval(),exec(),repr()

    ④ 与序列对象相关的函数

    iter(),range(),slice(),zip(),map(),enumerate(),sorted(),filter(),next()

    ⑤ I/O功能函数

    input(),print(),open(),close(),read(),write()

    ⑥ 用于查询与判断的函数

    type(),id(),isinstance(),len(),memoryview(),all(),any(),issubclass(),callable()

    ⑦ 其它内置函数

    hasattr(),delattr(),getattr(),setattr(),dir(),vars(),locals(),global(),porperty(),classmethod(),staticmethod(),classmethod(),super(),import(),help()

    例1 :bytes函数、bytearray函数、chr函数、ord函数

    # 例1-56 list1 = [1, 2, 3, 4] # bytes函数、bytearray函数 print('list1的不可变字节数组为:', bytes(list1), '\n', 'list1的可变字节数组为:', bytearray(list1)) # chr函数、ord函数 print('整数40的unicode字符为:', chr(40), '\n', 'unicode字符(对应的整数为:', ord('(')) ======================================= list1的不可变字节数组为: b'\x01\x02\x03\x04' list1的可变字节数组为: bytearray(b'\x01\x02\x03\x04') 整数40unicode字符为: ( unicode字符(对应的整数为: 40

    例2:

    # bin函数 print('整数40的二进制形式为:', bin(40)) # ascii函数 print('字符串tipdm的ascii码为:', ascii('tipdm')) # hash函数 print('字符串tipdm的hash值为:', hash('tipdm')) ================================================= 整数40的二进制形式为: 0b101000 字符串tipdm的ascii码为: 'tipdm' 字符串tipdm的hash值为: 5183467291451926577

    例3:

    max函数、min函数

    sum函数:总和;

    sum(iterable[, start])

    参数:

    iterable – 可迭代对象,如:列表、元组、集合。start – 指定相加的参数,如果没有设置这个值,默认为0。

    abs函数:绝对值

    pow函数:次方运算

    round函数:四舍五入

    divmod函数:除法,得到商和余数

    # 例 1-57 # max函数、min函数 print('序列中的最大数为:', max(list1), '\n', '序列中的最小数为:', min(list1)) # sum函数 print('序列元素加和为:', sum([41, 22, 36, 43, 95])) # abs函数 print('-10和100的绝对值分别为:', abs(-10), abs(100)) # pow函数 print('3的6次方为:', pow(3, 6)) 36次方为: 729 # round函数 print('3.5四舍五入结果为:', round(3.5)) 3.5四舍五入结果为: 4 # divmod函数 print('7除以3的商和余数分别为:', divmod(7, 3)) 7除以3的商和余数分别为: (2, 1)

    例4:

    map函数:

    map() 会根据提供的函数对指定序列做映射。

    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

    map(function, iterable, ...)

    参数:

    function – 函数iterable – 一个或多个序列

    zip函数:用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

    zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。

    #例 1-58 # map函数 # 对一个list中的各个float分别四舍五入 print('浮点数的四舍五入结果为:', list(map(round, [1.1, 2.2, 3.3, 4.4, 5.5]))) # zip函数 list3 = [1, 2, 3] list4 = [4, 5, 6] zipped = zip(list3, list4) # zip函数直接返回的是数据对象 print('返回对象为:', zipped, '\n', '返回为list:', list(zipped)) ================================================ 浮点数的四舍五入结果为: [1, 2, 3, 4, 6] 返回对象为: <zip object at 0x0000023273D8E188> 返回为list[(1, 4), (2, 5), (3, 6)]
    (2) 函数定义
    1)def语句

    def用于自定义函数,语法格式如下:

    def function(par1,par2,…): suite return expression

    说明:function是函数名,par1、par2为参数,带入执行语句suite中,expression是一段可执行代码,程序最终返回结果。

    # 例1-59 def exponent(a, b): x = a ** b return x print('自定义幂运算的返回值为:', exponent(3, 6)) 自定义幂运算的返回值为: 729
    2)参数
    在Python中,函数在参数主要有3大类:位置参数和关键字参数、任意数量的位置参数;任意数量的关键字参数。第1类又称为定长参数、不可变参数 ,第2、3类又称为不定长参数、可变参数。① 位置和关键字参数② 不定数量的位置参数 参数在定义时需要加一个“*”号前缀 ③不定数量的关键字参数 参数在定义时需要加两个“**”号前缀
    3)作用域
    # 例 1-60 # 无参数,无返回值 def hello(): print('Hello!') hello() print('***以上为hello()的输出,以下为print(hello())的输出***') print(hello()) # 无参数,有返回值 def func(): return("Python") func() ======================================== Hello! ***以上为hello()的输出,以下为print(hello())的输出*** Hello! None 'Python' # 多参数,无返回值 def func1(a, b): print("a + b = %d"%(a + b)) func1(3, 4) # 多参数,有返回值 def func2(a, b): return (a + b) print('a、b加和为:', func2(4, 3)) ============================ a + b = 7 a、b加和为: 7 # 多个返回值 def maxtomin(a, b): #返回a,b从大到小的排列 if a > b: return a, b else: return b, a print('a、b排序为:', maxtomin(2, 4)) ================================= a、b排序为: (4, 2) # 例 1-61 # 使用位置参数 def func3(b, a, c): return (a ** 2, b ** 2, c ** 2) result = func3(1, 2, 3) print('1、2、3经函数func3运算的结果为:', result) =============================== 123经函数func3运算的结果为: (4, 1, 9) # 使用关键字参数 def func4(a, b, c): return (a ** 2, b ** 2, c ** 2) result1 = func4(b=2, a=1, c=3) print('1、2、3经函数func4运算的结果为:', result1) ========================== 123经函数func4运算的结果为: (1, 4, 9) ======================================= # 混合使用位置参数和关键字参数,位置参数必须在关键字参数的前面 def func5(a, b, c): return (a ** 2, b ** 2, c ** 2) result2 = func5(1, c=3, b=2) print('1、2、3经函数func5运算的结果为:', result2) ================================== 123经函数func5运算的结果为: (1, 4, 9) # 例1-62 def func6(a, b = 2): print(a, b) func6(1) def func7(string, *numbers): print(string, numbers) func7('numbers:', 1, 2, 3) def func8(a, *numbers, **kwargs): print (a, numbers, kwargs) func8(4, 2, 3, 4, b = 2, c = 3) =========================== 1 2 numbers: (1, 2, 3) 4 (2, 3, 4) {'b': 2, 'c': 3}
    (3)匿名函数

    用lambda语句创建匿名函数,语法格式如下:

    f=lambda par1,…,parn:exp

    适合只需要得到结果的操作

    # 例1-66 sum1 = lambda arg1, arg2: arg1 + arg2 print("相加值为:", sum1(10, 20)) # 使用lambda语句 print(list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))) f1 = lambda x: '传入的参数为1' if x == 1 else '传入的参数不为1' f1(10) ========================= 相加值为: 30 [1, 4, 9, 16, 25, 36, 49, 64, 81] '传入的参数不为1'

    1.3.2 对象

    (1)面向对象简介

    在Python中定义类用class语句,如下: class ClassName: 属性 方法 创建类的一个实例用ClassName()形式

    编程:

    输入一个包含若干自然数的列表,输出这些数的平均值,结果保留3位小数。

    输入一个包含若干自然数的列表,输出一个新列表,新列表中每个元素为原列表中每个自然数的位数。

    输入一个字符串,输出其中每个唯一字符最后一次出现的下标。

    输入一个字符串,检查该字符串是否为回文,输出yes / no,要求用切片实现。

    接收两个正整数参数n和a(要求a为小于10的自然数),计算形如a+aa+aaa+…+aaa…aaa的表达式前n项的值。

    例1:

    data = eval(input('请输入自然数列表:')) avg = sum(data)/len(data) avg = round(avg,3) print('平均数保留三位小数为',avg) ======================== 请输入自然数列表:1,2,3,4,5,5 平均数保留三位小数为 3.333

    例2:

    #3. 输入一个字符串,输出其中每个唯一字符最后一次出现的下标。 text=input('请输入一个字符串:') positions=[(ch,index) for index,ch in enumerate(text) if (index==text.rindex(ch)) and (text.count(ch)==1)] print(positions) ========================= 请输入一个字符串:HelloWorld! [('H', 0), ('e', 1), ('W', 5), ('r', 7), ('d', 9), ('!', 10)]

    例3:

    #3. 输入一个字符串,输出其中每个唯一字符最后一次出现的下标。 text=input('请输入一个字符串:') positions=[(ch,index) for index,ch in enumerate(text) if (index==text.rindex(ch)) and (text.count(ch)==1)] print(positions)

    例4:

    #4. 输入一个字符串,检查该字符串是否为回文,输出yes / no,要求用切片实现。 text=input('请输入一个字符串:') if text==text[::-1]: print('yes') else: print('no') ==================== 请输入一个字符串:helleh yes

    例5:

    #5. 接收两个正整数参数n和a(要求a为小于10的自然数),计算形如a+aa+aaa+…+aaa...aaa的表达式前n项的值。 def compute(n,a): return(sum(map(lambda i:int(str(a)*i),range(1,n+1)))) print(compute(3,5)) 615
    (2)属性与方法
    ① 类属性与实例属性

    可以定义方法:_init_(),传入对象属性初值

    ② 访问限制

    属性前有一个下划线的为私有属性,但外部可调用 属性前有两个下划线的为私有属性,外部不可调用 可在类中定义方法修改私有属性的值

    ③ 方法

    类中的函数也用def定义,通常称为方法。与一般函数不同的是:方法中第1个参数为self,通常不能省略,该参数指向实例本身,调用方法时不需要传递参数。

    ④ 特殊属性和方法

    用dir()可以查看一个对象的所有属性和方法,返回的内容包含在一个list中。

    (3)装饰器

    装饰器本质上是一个Python函数或类,可以在其它函数或类不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数或类对象。

    (4)继承和多态

    面向对象编程的一个重要特性是继承 ,在类中体现为:新建一个类时可以从现有的类进行继承 ,此时新建的类称为子类,被继承的类称为父类、基类或超类。 ① 继承 ② 多重继承 ③ super函数 ④ 多态

    1.3.3 常用库安装

    (1)第三方库安装

    ① pip ② easy_istall ③ 源文件 ④ 安装包

    (2)第三方库导入

    ① import导入 ② 别名导入 ③ from…import… ④ 内建函数_import()_

    (3)第三方库创建

    1.4 Python环境搭建与使用

    Anaconda安装和使用Jupyter notebook使用
    Processed: 0.017, SQL: 9