python从基础到UnitTest框架-python基础语法
1.python环境配置
python解释器:将书写的代码转换为二进制;
pycharm:是python的IDE(集成开发环境)之一,用来写代码,运行/调试代码;
vscode,IDEA,记事本...
2.语法使用
(1)打印输出:print()
(2)输入数据:input()
(3)注释:单行(#;选中多行,按快捷键:ctrl + /),多行(3 对 双引号或者 3 对 单引号)
(4)cmd终端运行python代码:python 代码文件的名字
(5)变量:变量名 = 数据值 (命名规范:必须由字母 数字和下划线组成, 并且不能以数字开头 ,不使用关键字)
(6)数据类型:数字类型:整型(int),浮点型(float),布尔类型(bool);非数字类型:字符串(str),列表(list),元组(tuple),字典(dict);type(变量):可获取变量的类型
(7)格式化输出:%d:整型;%f:浮点型;%s:字符串(可任意类型)
# 小数默认显示 6 位, 如果想要指定显示小数点后几位, %.nf , n 需要换成具体的整数数字,即保留小数的位置 # %0nd n 需要换成具体的整数数字, 表示整数一共占几位 # 某次考试的及格率为 90%, 如果在 格式化中需要显示%, 在书写的使用 需要使用 两个 %% 才可以:print('某次考试的及格率为 %d%%' % num) # 在字符串中想要输出换行 \n (转义字符) 例子:print('我的名字是 %s, 年龄是 %d, 身高是 %f m' % (name, age, height)) # print('我的名字是 xx, 年龄是 xx, 身高是 xx m, 学号 xx, 本次考试的及格率为 xx%') print(f'我的名字是 {name}, 年龄是 {age}, 身高是 {height} m, 学号 {stu_num}, 本次考试的及格率为 {num}%') # 字符串.format() print('我的名字是 {}, 年龄是 {}, 身高是 {} m, 学号 {}, 本次考试的及格率为 {}%'.format(name,age,height,stu_num,num)) print('我的名字是 {}, 年龄是 {}, 身高是 {:.3f} m, 学号 {:06d}, 本次考试的及格率为{}%'.format(name,age,height,stu_num,num))
(8)算数运算符:优先级: 先算谁,再算谁 (不确定优先级,就使用 ()):() > ** > * / // % > + -
(9)比较运算符:比较运算符得到都是 bool 类型
(10)逻辑运算符:and(和,一假为假);or(或,一真为真);not(非)
(11)if
if 判断条件: 书写条件成立(真),执行的代码 书写条件成立(真),执行的代码 顶格书写,没有缩进的代码,和 if无关, 不管条件是否成立,都会执行 # 1. if 是一个关键字, 和后续的判断条件之间需要一个空格 # 2. 判断条件后边需要一个冒号,不要少了 # 3. 冒号之后,回车,代码需要缩进, 在 pycharm 中会自动进行缩进, 一般是 4 个空格 或者一个tab键 # 4. 所有在 if 代码下方的缩进中书写的代码,属于 if 语句的代码块, 判断条件为 True 的时候会执行 # 5. if 代码块中的代码,要么都执行,要么都不执行 # 6. if 代码块结束之后, 代码要顶格书写(不再有缩进), 表示是和 if 无关的代码
(12)if else
如果 条件成立 做什么事 否则(条件不成立) 做另一件事 if 判断条件: 书写条件成立(真),执行的代码 书写条件成立(真),执行的代码 else: 书写条件不成立(假), 执行的代码 书写条件不成立(假), 执行的代码 # 1. else 是关键字, 后边需要冒号 # 2. 冒号之后回车,同样需要缩进 # 3. 处于 else 代码下方缩进中的内容,属于 else 的代码块 # 4. if 和 else 的代码块, 只会执行其中的一个 # 5. else 需要结合 if 使用 # 6. if else 之间不能有其他顶格书写的内容(不提 elif)
(13)if elif else
if 判断条件1: 判断条件1成立,执行的代码 elif 判断条件2: # 只有判断条件1不成立,才会判断 判断条件2 判断条件2成立执行的代码 else: 以上条件都不成立,执行的代码 # 1. elif 也是关键字,后边和判断条件之间需要一个空格,判断条件之后需要冒号 # 2. 冒号之后回车需要缩进, 处在这个缩进中的的代码表示是 elif 的代码块 # 3. 在一个 if判断中,可以有很多个 elif # 4. 只有 if 的条件不成立,才会去判断 elif 的条件 # 5. 在一个if 中, 如果有多个 elif , 只要有一个条件成立,后续的所有都不再判断 # 6. if elif else 结构, 和 if 的缩进相同的只能是 elif 和 else,如果是其他的,就表示这个判断结构结束了 if 判断条件1: 执行的代码 if 判断条件2: 执行的代码 if 判断条件3: 执行的代码 # 多个 if 的结构, 每个 if 都会进行判断,之间没有关联系
(14)if 嵌套
if 嵌套, 是指在一个 if(elif else) 中嵌套另一个 if. 使用场景: 判断条件存在递进关系(只有第一个条件满足了,才会判断第二个条件) if 判断条件1: 判断条件1成立,执行的代码 if 判断条件2: 判断条件2成立,执行的代码 else: 判断条件2不成立,执行的代码 else: 判断条件1不成立,执行的代码
(15)while循环
程序开发中(写代码), 有三大流程(三大结构): 1, 顺序, 代码从上到下,全部执行 2, 分支, 判断语句,代码有选择性的执行 3, 循环, 重复执行某一部分的代码 循环的作用就是让 指定的代码 重复的执行 1. 设置循环的初始条件(计数器) 2. 书写循环的判断条件 while 判断条件: # 3. 需要重复执行的代码 # 4. 改变循环的初始条件(计数器) #死循环 死循环: 一般是由写代码的人不小心造成的 bug, 代码一直不停的运行下去 无限循环: 写代码的人故意让代码无限制的去执行,代码一直不停的运行下去 无限循环的使用场景: 在书写循环的时候,不确定循环要执行多少次 无限循环的使用一般会在循环中添加一个 if 判断, 当 if 条件成立,使用关键字 break 来终止循环 while True: 重复执行的代码 # 可以在 if 的上边 if 判断条件: break # 终止循环, 当代码执行遇到 break,这个循环就不再执行了 重复执行的代码 # 可以在 if 的下边
(16)for循环
for循环也可以让指定的代码重复执行 (循环) for循环可以遍历容器中的数据( 遍历: 从容器中把数据一个一个取出 容器: 可以简单理解为盒子, 盒子中可以存放很多的数据 (字符串 str, 列表 list, 元组 tuple, 字典 dict) ) for 循环 也可以称为 for 遍历 for 变量名 in 容器: 重复执行的代码 # 1. for 和 in 都是关键字 # 2. 容器中有多少个数据,循环会执行多少次(0 个数据,执行 0 次, ...) # 3. 每次循环,会将容器中数据取出一个保存到 in 关键字前边的变量中
(17)for 做指定次数的循环
for 变量 in range(n): 重复执行的代码 # 1, range() 是 Python 中的函数, 作用使用可以生成 [0, n) 之间的整数, 不包含 n 的 , 一个有 n 个数字, 所以这个循环循环 n 次 # 2, 想让 for 循环循环多少次,n 就写几 # 3, 变量的值 也是每次循环从 [0, n) 取出一个值, 第一次取得是 0 ,最后一次取得是 n-1 range()变形 for 变量 in range(a, b): 重复的代码 # range(a, b) 作用是生成 [a, b) 之间的整数数字, 不包含 b
(18)break 和 continue
break 和 continue 是 Python 中的两个关键字, 只能在循环中使用 break: 终止循环, 即代码执行遇到 break, 循环不再执行,立即结束 continue: 跳过本次循环. 即代码执行遇到 continue,本次循环剩下的代码不再执行, 继续下一次循环
(19)切片
切片: 可以获取字符串中多个字符(多个字符的下标是有规律的, 等差数列) 语法: 字符串[start:end:step] start 是开始位置的下标, end 是结束位置的下标(注意,不能取到这个位置的字符) step 步长,等差数列的差值, 所取的相邻字符下标之间的差值,默认是 1, 可以不写 例: [1:5:1] # 1 2 3 4 [1:5:2] # 1 3 [1:5:3] # 1 4 [1:5:4] # 1
(20)字符串
#字符串的替换方法 replace 字符串.replace(old_str, new_str, count) # 将字符串中 old_str 替换为 new_str - old_str: 被替换的内容 - new_str: 替换为的内容 - count: 替换的次数, 一般不写,默认是全部替换 - 返回: 替换之后的完整的字符串, 注意: 原来的字符串没有发生改变 #字符串的拆分 split 字符串.split(sep, maxsplit) # 将字符串按照 sep 进行分割(拆分) - sep, 字符串按照什么进行拆分, 默认是空白字符(空格, 换行\n, tab键\t) - max_split, 分割次数,一般不写, 全部分割 - 返回: 将一个字符串拆分为多个,存到列表中 - 注意: 如果 sep 不写, 想要指定分割次数 则需要按照如下方式使用 字符串.split(maxsplit=n) # n 是次数 #字符串的链接 join 字符串.join(列表) # 括号中的内容主要是列表,可以是其他容器 # 作用: 将字符串插入到列表中每相邻的两个数据之间, 组成一个新的字符串 - 列表中的数据使用使用 逗号隔开的 - 注意点: 列表中的数据必须都是字符串, 否则会报错
(23)列表
列表 list, 是使用最多的一种容器(数据类型) 列表中可以存储多个数据, 每个数据之间使用逗号隔开 列表中可以存放任意类型的数据 统计出现的次数,使用的是 count() 方法 列表.count(数据) # 返回 数据出现的次数 #尾部添加数据 列表.append(数据) # 将数据添加到列表的尾部 返回: 返回的 None(关键字,空), 一般就不再使用 变量 来保存返回的内容 想要查看添加后的列表,需要打印的是列表 #指定下标位置添加数据 列表.insert(下标, 数据) # 在指定的下标位置添加数据, 如果指定的下标位置本来有数据, 原数据会后移 返回: 返回的 None(关键字,空), 一般就不再使用 变量 来保存返回的内容 想要查看添加后的列表,需要打印的是列表 #列表合并 列表1.extend(列表2) # 将列表 2 中的所有数据逐个添加的列表1 的尾部 返回: 返回的 None(关键字,空), 一般就不再使用 变量 来保存返回的内容 想要查看添加后的列表,需要打印的是列表 #修改 列表[下标] = 数据 #删除 列表.pop(下标) # 删除指定下标位置对应的数据 1. 下标不写,默认删除最后一个数据(常用) 2. 书写存在的下标, 删除对应下标位置的数据 返回: 返回的删除的数据 列表.remove(数据值) # 根据数据值删除 返回: None 注意: 如果要删除的数据不存在, 会报错 列表.clear() #清空数据 #列表中 反转和倒置: 1. 列表[::-1] # 使用切片的方法,会得到一个新列表, 原列表不会发生改变 2. 列表.reverse() # 直接修改原列表, 返回 None #列表复制 使用 copy 方法 变量 = 列表.copy() #列表排序 列表.sort() # 按照升序排序, 从小到大 列表.sort(reverse=True) # 降序排序, 从大到小
(24)元组
元组: tuple, 元组的特点和列表非常相似 区别: 1. 元组中的数据内容不能改变, 列表中的可以改变的 2. 元组使用 (), 列表 使用 []
(25)字典
1. 字典 dict, 字典中的数据是由键(key)值(value)对组成的(键表示数据的名字, 值就是具体的数据) 2. 在字典中一组键值对是一个数据, 多个键值对之间使用 逗号隔开 变量 = {key: value, key:value, ...} 3. 一个字典中的键是唯一的,不能重复的, 值可以是任意数据 4. 字典中的键 一般都是 字符串,可以是数字, 不能是列表