导图社区 python入门
自学资料——整编自“扇贝编程”,概述了Python编程的几个关键方面,包括基本概念、语法结构和一些常用的内置函数及特性。通过这张思维导图,可以系统地了解Python编程的基础知识,包括函数、模块、内置函数、程序结构、错误处理以及Python语言的一些重要特性。
编辑于2024-08-15 18:54:21python
function
def:组织好的,可重复使用的,用来实现特定功能的代码块
定义函数:def ...(): 函数体:缩进内容 调用函数
要点:def + name +(const)+ process + return
参数(a, b, c)
定义形参,调用实参
1.位置参数,2.关键字参数,3.默认参数
rule:2.参数名 = 值,无视位置;默认参数放最后
条件(分支)结构 【条件表达式也称布尔表达式】
判断条件:(==)(!=)(>)(<)(>=)(<=) 【辨析=和==:赋值/判断相等】
if ... else ... 语句,注意缩进
多路分支:elif,对不满足前一轮条件的进行判断。 【并列,按顺序进行,不必要】
成员运算符 in(not in),用于判断某个字符是否不存在于一个字符串中
三元表达式:a= x1 if conditiony else x2;简化代码。
嵌套条件
1.外层条件,2.内层条件;注意缩进
返回值:return语句
因:函数内部数据封闭
函数结束标志
格式:return a, b, c,返还:('x', 'y', 'z')元组
变量:全局变量,局部变量;全局作用域,局部作用域
转化:global+name
print() 函数
指令 print
内容:数字、算式、‘’“”
应用:显示结果、调试代码、提示信息
type() 函数
查看数据类型
返回 <class 'xxx'> ,str :字符串类型;int:整数类型;float :浮点数类型。 【类型转化:str(),int(),float()】
input() 函数
赋值:answer = input('')
<class 'str'>
len()函数;用于获取序列的元素个数
list()函数:转化为列表
tuple()函数:转化为元组
range() 函数:快速生成一个有规律的数字序列。
快速生成一个有规律的数字序列(~分片)。返回 range 对象,用 list() 函数转换
range(start, stop, step) start默认0 不包括stop step默认1
循环语句: 满足条件→重复执行
for循环(循环次数确定,不用考虑终止条件)
for ... in ... 语句,变量、支持遍历的数据、循环体
列表生成式:a = [ formula for x in b if c ] 表达式,for循环,条件判断
while循环(循环次数不确定,需循环条件)
格式:while 循环条件(布尔值): 循环体
死循环:无法靠自身控制终止的程序,循环条件出错;shall:保证循环条件能变成False。检验:打印i值。终止:点击停止/Ctrl+C
双重循环,A套B
break语句
常和条件判断一起使用,在满足某个条件时终止整个循环
continue 语句
常和 if 语句搭配使用,用于在特定条件下跳过当前循环体中的剩余语句,继续进行下一轮循环。
概念
转义字符
反斜杠(\):{ \'(\"):无需解读; \n:换行; \\:反斜线 }
缩进——从属关系
注释:#不执行——TBD : to be done
变量:a = '...'(字符串变量)
赋值-变量名 【(=)赋值 vs (==)等于】
rule:取最后一次赋值 name:1.英文字母、数字、下划线;2.不可数字开头;3.简单易懂(可读性)
关键字:return、def、and
rule:圆括号 (),方括号 [] 和花括号 {} 中的各个元素间都支持直接换行
. 表明了从属关系,表示某个模块里面的某个变量或函数。
模块
def:module,有规律存放代码、可以导入的文件, 如教学环境的main.py 作用:封装函数、变量等代码,提高代码利用率
内置模块:
time模块,时间相关函数 time.sleep(),停止秒应用:防止程序执行过快,比如爬取数据时降低爬取速率防止被封等。 time.time(),获取当前时间的Unix时间戳,格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒起 time.ctime(),输出周月日时分秒年
datetime模块:函数和类,均用于日期和时间的解析、格式化以及计算 datetime里有同名的datetime模块;from datetime import datetime datetime.now(),类似time.ctime(),无周 datetime.fromtimestamp(),转换Unix时间戳 timedelta(a, b, c...),日期计算,关键参数days=5为5天;weeks, hours, minutes, seconds, mili~, micro~
random模块,生成伪随机数 random.random() ,生成 0-1 之间的随机小数,包括 0不包括 1 random.randint(m, n) ,生成一个随机整数x,m≥x≥n random.uniform(m, n) 生成随机小数,规则同上 random.choice() ,从一个非空序列中随机返回一个元素,常用于抽奖
math模块,C标准定义的数学函数 math.ceil(),向上取整 math.floor(),向下取整 math.sqrt(),取平方 math.pi(),数学常数π math.e(),数学常数e https://docs.python.org/zh-cn/3/library/math.html
导入import
import example(as eg);import a, b, c
eg.pi
pandas:pd, numpy:np
部分模块:from a import b, c;b, c可直接使用
使用:模块名.变量名 和 模块名.函数名()
程序入口
def: 即直接运行的.py文件;通过入口文件使整个项目的代码串联运行 功能:指明模块中某一段代码在何时才会被运行
if __name__ == '__main__': 代码块 B 让 代码块 B 仅在 abc.py 作为程序入口时才能运行
__name__:特殊的内置变量,默认值:模块名 ~== '__main__' if abc.py为程序入口 else(导入): 'abc'
意义:判断模块是以导入的方式使用, 还是作为程序入口文件直接运行
报错—debug
SyntaxError-语法错误
print(文字)
定义函数时,括号和冒号写成中文字符
non-default argument follows default argument-非默认参数被放到默认参数后面
bad input,代码不符合格式,常多或少了必要的字母或者标点。
invalid character,Python 语法中不支持的字符(汉字和中文标点)
TypeError: cannot concatenate 'str' and 'int' objects-不能将字符串和整数相联结(相加)
IndentationError: 缩进错误
expected an indented block-忘记在函数体前统一加缩进
unindent does not match any outer indentation ,“unindent”:“减少或取消缩进”
NameError: name '???' is not defined(命名错误:??? 名称没有被定义)
AttributeError: 'NoneType' object has no attribute 'reverse'(属性错误:NoneType 对象没有 reverse 属性。)
sort() reverse() 方法只对原列表操作,不生成新列表,没有返回值/返回None
IndexError: list index out of range(索引错误:超出列表范围)
list indices must be integers or slices, not float(类型错误:列表分片必须用数字,而不是浮点数)
KeyError,字典的键错误(不存在)
中心主题
数据类型
数字
integer(int)整型
运算:(+)(-)(*)(/)(%)(//)(**)取余,除法取整,乘方
A += B 等价于 A = A + B(-=)
float 浮点数
运算误差:十进制→二进制→计算→十进制
(/)返回的都是浮点数
布尔类型
布尔值:True(条件为真),False(条件为假)
布尔变量:用 True 和 False 直接创建/条件表达式来定义
布尔类型转换:用 bool() 函数转换为布尔值,”有“即True;“无”即False(0,0.0,空字符串etc) 直接应用:if data: ,用于数据检查
布尔运算:比较运算(6),逻辑运算(3)与或非,and, or, not。rule:有假假,有真真,反真假
序列:有序元素的集合, 支持len()和索引
字符串:表示文本
引号
''、";''':无需考虑引号、换行(\n)
运算:加法乘法(拼接)
格式化输出:' % % %' % (a, b, c),占位符,运算符,元组 %d 整数,%f 浮点数,%s 字符串,%x 十六进制整数
索引,len(),分片,不可变性
语法
大小写: upper() lower() capitalize() title() swapcase()
分割:split(a, b),分隔符,默认空格符(空格/\n/\t);最大分割次数,默认-1 连接:'a'join(b),连接符;序列 移除:strip(a),字符串开头和结尾指定的字符(默认为空字符)或字符序列 当传入一个字符串时,会将传入字符串中每个字符依次移除
统计:count('a', 1, 4),字符串,开始/结束索引 定位:find(a),返回第一次出现索引值/-1 替换:repllace('a', 'b', 1),被替换字符串;替换~,次数默认∞
格式化输出:'{}{}{}'.format('a', 'b', 12),占位符,格式化方法,参数 可编号{1}{2}{2}{0};可命名{a}{b},b=?, a=?
元组(tuple)
特点:不可以“增删改”
a = (x, y, z);(x,);(x):int/float)
查询(index)、分片、列表运算符(+*)可用
修改:list(a) →b→tuple(b)
元素获取:用逗号 , 分隔开的多个变量,可以 按顺序 一次性获取 序列 中的元素
a, b, c = (x, y, z)
列表
特点:支持任意数据类型;元素有先后顺序;可变更
基本语法
a = [ x, y, z ];[x]
位置获取元素:索引:从0开始,列表[索引];反向索引:列表[-x],从-1开始
index() 方法:列表.index(元素内容),获取索引值
编辑:修改~列表[索引] = 新值 添加~List.append() 插入~list.insert(索引,新值) 删除~list.pop(索引),返回列表指定位置的元素,并删除这个元素;默认最后一个 del 列表[索引],删除列表中指定索引(正反)的元素 列表.remove(值),通过值来找到元素再删除 count() 方法:统计元素出现的次数 sort()方法;排序;字符串:首字母顺序;数值:从小到大 reverse() 方法:将列表顺序反转 copy() 方法:复制一个同样的列表 clear() 方法:清空列表
分片 功能,列表[起始索引:结束索引],来获取列表在某个范围内的元素;范围末尾的元素索引+1;list[:end];list[start:]
基本运算: 1.元素 in 列表,布尔表达式 2. list1 + list2, 先后顺序 3.列表 * n,乘法
zip(a,b)函数:将两个长度相同的列表合并起来,相同位置的元素一一组对,返回一个元组
enumerate(a, 1) 函数:“枚举、数数”,默认返回(索引,元素),元组
二维列表
两步索引,格式:列表[行数-1][列数-1]
列表生成式
产生序列:range()函数,生成数字序列
能转换成序列的数据
list(zip(a, b))
for循环遍历
字典dictionary
traits
组织具有对应关系的数据
{a, b, c},元素:键值对,key: value 键唯一,重复取后者;值任意;无顺序
取值:字典名[键] = 值;键必须在字典中,or报错。用in判断
语法
修改/添加:字典名[键] = 值; 删除:del ~
keys(),获取所有的键 values(),获取所有的值 items(),获取所有的键+值元组 (同:获取有序序列) get(a, b),知键求值,不存在时返回None;不存在时的默认返回值
嵌套:字典的值为字典; 访问:dic[a1][a2][a3]
类与对象面向编程
类
def:类,相似个体的集合,个体即实例
字符串类、整数类、浮点数类等(数据类型) 验证:type()
创建: class 类名: 属性(attribute),a = b 方法(method),def 方法名(self),具体执行过程
self:实例本身 创建类的方法时第一个参数为self 类外访问类的属性:实例名.属性,self.a 类内访问:self.属性名/方法名()
初始化方法:def __init__(self): traits: 1.每当进行类的实例化时会自动被执行 2.可以接收其他参数,进行自定义的属性初始值设置; 在实例化的时候要传入对应的值 神奇方法,特点:被双下划线所包裹 __str__()方法: def __str__(self): return m 直接打印实例的结果为其返回值 作用:描述一个类
pass 是空语句,表示跳过,什么都不做
父子类
继承:共享一些方法和属性,降低代码重复 class 子类名(父类名):,让子类拥有父类所有A和M 多层继承:b(a), c(b), d(c) 多重继承:class 类 A(类 B, 类 C, 类 D): {实例方法属性调用:第一个的 if 第一个有 elif 从左向右逐个查找 else 报错}
定制:1. 新增 2. 重写
调用: 1.类的实例化,实例名=类名(),a = A() print(A),<__main__.A object> 表明这是一个A类的实例对象(object) print(type(A)),<class '__main__.A'> 表明它属于A这个类。 使实例a有A类的属性和方法 2.实例名.属性/方法名
面向对象编程
面向对象与面向过程思维:
编程思维(Computational Thinking)
问题分解
eg:计算文章难度
1. 1.统计文章中的单词数 2.统计所有单词中生词的数 3.根据生词数计算难度分
模式识别
循环、判断和求和的组合运用。
抽象思维
数据类型保存、将代码封装成函数: 花名册——列表; 姓名和学号一一对应——字典; 姓名和学号加性别——列表和字典组合;
算法设计
想法→代码 1.split() 方法:文章拆分成单词;replace() 方法:去除标点;得到单词列表 2.单词和次数一一对应,用字典存储;定义空字典;循环遍历单词列表,如果字典有该单词,对应次数 +1,否则对应次数设为 1; lower() 方法统一大小写;次数计算 3.生词出现次数→难度分数:循环遍历字典计算
实战
绘图
turtle(海龟绘图) https://docs.python.org/zh-cn/3/library/turtle.html
画笔, 形状:默认小箭头,支持传入 turtle.shape('turtle')设成小海龟; 'arrow','circle','square','triangle', 'classic' 位置:默认状态下落在画板正中间,以此为原点形成一个坐标系,单位是像素。根据“上北下南左西右东”的惯例标注四个方向 移动画笔:turtle.goto(-50, 20) 画笔抬起:turtle.penup() 不画线;画笔落下:turtle.pendown() 朝向:默认朝东 变向:turtle.left(); turtle.right(90);参数是角度; turtle.setheading() 直接设置朝向,参数角度:东为0,逆时针增加 隐藏小海龟:turtle.hideturtle();加快绘图速度,成图无画笔图案 显示小海龟:turtle.showturtle()
线条, 移动:turtle.forward(3);turtle.backward(3),留下像素线(画笔默认落下) 速度:turtle.speed(0) 参数 0-10 的整数,1-10 数字越大速度越快,默认6;0 没有动画效果 颜色:默认黑色,可使用 turtle.color('red') 改成红色;'yellow';'pink';16 进制的 RGB 色值,如 #000000黑色,#FFFFFF白色,#FF0000红色; turtle.fillcolor() 填充颜色,turtle.pencolor() 画笔颜色。 上色:画之前 turtle.begin_fill() ,画之后 turtle.end_fill() 写字:turtle.write() ,参数为要写的内容 设置字的字体、大小等:turtle.write('By 黄帮主', font = ('SimHei', 12, 'bold'));font 参数是元组,1st字体,2nd字体大小,3rd字重。(黑体、12 像素、加粗)
#常用循环
电影票预定系统
指导思想:先找到系统的核心功能,作为编程入手点,满足最基本需求;再逐步迭代优化,让程序更智能更完整。
1.0 选座功能,面向对象编程方式 需求: 展示座位预订状态; 根据输入号预订。 抽象成类:SeatBooking,方法check_bookings() 展示,book_seat() 预订。 ①展示预订状态: 1.座位表抽象成二维列表。6行8列的二维列表~6排8列座位;用两个不同的字符('●','○')表示预订状态; 2.check_bookings() 方法:接收参数 seats(二维列表),for循环逐行打印;join() 方法把每一排的座位列表都拼接成字符串 ②预订指定座位 1.input() 获取,转换成行索引row和列索引column 2.book_seat() 方法接收seats为参数,判断座位号对应元素(seats[row][column] 的值)是否为 '○';是 '○' :座位可选,预订成功(改列表,打印座位号);否则预订失败。 ③优化输出效果:打印提示信息和座位表后暂停一小会;作用:让输出结果看起来更有交互感,方便用户阅读。 time 模块的 sleep() 函数 before:从电影信息汇总中提取座位表 1.字典结构存储;多个键值对保存电影的名称、座位表和宣传时用的字符画;字典整合到列表infos里 2.访问某座位表:infos[0]['seats']
2.0 自动检查输入,提醒重新输入; 如座位无法预订,就重新选座,直至成功。 ①获取行列索引, 1.列表生成式保存符合要求的用户输入到列表valid_row 2.定义方法 get_row(),保存输入行号为 input_row,如input_row不在valid_row里,提醒重新输入;返回符合要求的行索引;get_col() 方法 3.优化book_seat() 方法,直接调用 get_row() 方法和 get_col() 方法获取行列索引 ②重新选择座位, while True: 写“死循环”,让用户重复输入行列号,仅成功后用 break 语句跳出循环
3.0 电影选择系统,控制系统 ①电影选择系统 需求:展示可选项:序号表示选择电影,x 表示退出系统; 获取选择。 1.创建文件 film_selector.py,定义 FilmSelector 类:display_options() ,get_choice() 2.定义display_films(),接受参数films列表, 遍历&通过 'name' 键取出名称并打印 3.验证:创建列表valid_choice,保存符合要求的输入:列表生成式生成代表每部电影的序号;append()单独添加选项 'x';len()获取列表films长度,range() 确定循环次数 ②控制系统,初始化方法__init__()自动执行类 需求:储存电影信息; 控制整体流程,先选择,再预订。 1.main.py 里定义Controller类为控制系统,导入必要库,赋值属性 self.films。 2.流程:打印欢迎语; 调用电影选择系统;如不选'x',调用选座系统;打印结束语