什么是Python
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
为什么学习Python
编写自动化脚本:UI界面、API接口 单元测试:组织自动化测试脚本业务
如何掌握Python
上手就写,明确大纲,举一反三,照搬语法格式 使用Python编译器、pycharm编写代码 创建工程
基本操作
运行第一个代码
注释为#(和Java一致)
python的变量介绍
常量:常数,反应事物相对静止状态的量。 变量:变数,反应事物运动变化状态的量。 变量名字要求:必须是字母或者下划线或者数字组成 数字不可以开头 整数int 浮点型float 字符串型str 布尔型bool 元组型tuple 列表型list 字典型dict python没用字符(char类型)
运算符号
a =1
if a ==1(是否相等):
pass
print("成立")(if下面的代码必须带上tab键)
if a<=1:
pass
if a>=1:
pass
if a!=1:
pass
+ - * /
混合输出.format(第一个{}内容,第二个…)({}为占位符,{}里面可以加内容助记)
%
**
I/O交互
类型转换
语言结构
顺序结构
代码执行的基本顺序就是从上往下逐步执行
选择分支结构
满足条件的代码执行,不满足的不执行(分支之间是互斥的,不可能同时执行)
if 条件1:
(tab) 满足条件的代码片段
elif 条件2:
(tab) 满足条件的代码片段
elif 条件n:
(tab) 满足条件的代码片段
else:
(tab) 不满足条件的代码片段
举例:
- 分别输入整数1,2,3,输出1,2,3否则显示错
- 满分100分,95分以上s,80-94分a,60-79分b,60分一下c
python允许60<= score <=79这种写法 程序的三大代码结构之间可以互相嵌套的 - lol报名
循坏结构
基本操作
while 条件:
满足条件
i=i+1(i+=1) while和if的区别: while的条件可以是bool值、true false 可以是数字 0(false)其他数字代表真
- 打印1-10
- for循坏
for循坏格式:
for 循环变量 in rang():
循环体
(i=a,i=b,i=ccc三次) (i=z,i=h…) rang指定范围 rang(n)指0~n-1 rang(x,y)x~y-1 while一般在不确定循坏次数,for适合确定循坏次数的场景
循坏打断语句
continue和break 共同点:都有打断循坏的效果 不同点:break立即停止所有循坏,continue停止本次循坏进入下一次循坏 打印数字5~1,跳过数字4 j=5,while通过,进入else,打印,然后j-1变成4,进入while,通过,进入if,break循坏结束。 j=5,通过while,进入else,打印,j-1,然后while通过,进入if,break跳过此次循坏进入下一次循坏(不执行下面的所有内容,直接再次进入while),j依然是4,变成死循坏
正确写法 偷懒 输入三条边,判断是什么三角形 判断是否是素数
print效果
print默认有换行效果,end='/n'换行,不想换行为end =' '
- 打印一条横线线
print(“-”*36)
函数
定义
满足具体功能的固定代码块 函数的定义(设计函数,写出代码) 函数的调用(使用函数)
用途
实现功能的复用(反复使用,重复使用) 提升代码的维护性(功能需求变化了,只需改一次) 函数是单元测试最小的单位
使用
def 函数名(形式参数) (tab)函数具体功能的固定代码块 (tab)return函数结果
- 无参函数
- 定义
2. 调用 3. 输出结果 - 有参函数
此时使用return就可以有结果了 ##函数的四种形态
- 有参有反函数
def lcfsum(a,b):
lcfresult = a+b
print(lcfresult)
return lcfresult
- 有参无反
def lcfsum(a,b):
lcfresult = a+b
print(lcfresult)
- 无参有反
def lcfaaa():
a=int(input("请输入数字a"))
b=int(input("请输入数字b"))
lcf = a+b
return lcf
当局部变量和全局变量同时出现,如果能查到局部变量用局部,查不到用全局变量 强制声明全局变量:global
- 无参无反
返回值的实际应用场景:函数需要存放结果,给别的地方使用
python函数的另外三种参数
默认值参数=
默认参数的设定位置必须在所有位置参数之后,可变参数或关键字参数之前 在参数设计时,对形参给出一个值就是默认参数 可以只设计一个默认参数,也可以设计多个默认参数,多个参数之间,隔开 在函数调用时,不用去对应默认参数的位置和个数,即:可以不给默认参数的实参,如果需要改变默认值,则需要改变实参 注意:默认参数的形参赋值必须从后往前推 变量不能同时作为global变量和函数之间传递的变量也即函数括号内不能出现global变量
可变参数*
定义函数时,如果需要声明可变参数,需要参数名前加* 可变参数只可以声明一个 函数体内使用可变参数,把星号去掉 调用函数时,可以传入无限个值作为可变参数,多个值之间以,隔开 函数体内,可变参数无论接收多少值,都以元组形式展现,即:永远只有一个元组数据 定义函数时,即使设计了可变参数,调用时是可以不使用的
关键字参数**
先默认,再可变,再字典
函数、模块和包的关系
函数:功能的集合 模块:函数的集合,在python语言中,一个py文件就是一个模块 包:python包是模块的集合,属于包下的模块里函数是可以被别的模块调用的,包文件下面都是.py文件(即:模块),包文件下面是不可以直接写函数,写代码的 调用跨模块的函数
from 包名.模块名 import 函数名
自我发现:调用时先执行整个模块
if name _name_=="_main_":
作用是:当文件被调用时候,不会执行该分支的代码
当文件直接执行时候,会执行该分支的代码
直接执行 调用 alt+enter代码提示键,自动生成导包代码 阶层 包与目录的区别:包之间可以互相识别(最新版目录可以互相识别)
面向对象
面向过程:将被开发的系统,进行功能拆解(函数思想)
- 分解需求为子功能(子步骤),这是不写代码的工作
- 将分解后的每一个功能子步骤分别写成函数,这是写代码工作
- 调试函数,拼装函数,最终实现程序
新入学同学信息管理系统 产品经理拆分系统需求 进度启动 启动界面 增加学生 获取学生信心 让用户选择功能 问题1:想要系统一直运行-------死循环 问题2:如何存储多个学生名字------列表 问题3:界面停不下来-----input 问题4:用户输入选择不同功能----if 问题5:退出系统为退出循环
from time import sleep
def launch_app():
print("你好新同学,正在为你启动")
sleep(1)
print("启动速度:50%")
sleep(1)
print("启动速度:70%")
sleep(1)
print("启动速度:90%")
sleep(1)
print("启动速度:100%")
print("系统启动完毕")
def home_page():
print("新学生管理系统v1.0")
print("1添加学生")
print("2显示学生信息")
print("3退出系统")
def add_student():
aa= input("请输入学生姓名")
student_list.append(aa)
def get_stu_info():
print(student_list)
def user_choc():
aaa=int(input("输入编号"))
return aaa
if __name__=="__main__":
student_list=[]
launch_app()
while 1:
home_page()
choice=user_choc()
if choice==1:
add_student()
elif choice==2:
get_stu_info()
elif choice==3:
print("再见!bye")
break
else:
print("输入错误")
continue
小结:
- 系统需求功能(定义函数)
- 系统实现逻辑(调用函数)
- 系统数据处理(列表或者元组修改或者读取数据)
总结:注释–注释变成空函数----一一实现函数,按照使用逻辑实现函数,调用函数
面向对象
- 对客观事物进行抽象(创造人类):class类名字 定义对象的模板
- 类定义对象的属性(名字,年龄,炒菜:变量,那么所有的人类都会人类都有名字,年龄,都会炒菜) 定义方法(炒菜方法也即函数)
- 抽象的系统进行实例化变成对象(人类—张三为对象):对象名=类名()
- 对象调用方法(张三调用炒菜方法):对象名.方法
类是对象的模板
class 类名:
def __init__(self,形参列表):
self.属性名1
def 可选方法名1(self,形参列表):需要调用才能被执行
方法体1
def 可选方法名2(self,形参列表):需要调用才能被执行
方法体2
对象构造格式:类名(实参和__init__方法不一致才可以) 调用方法格式:对象名.方法名(实参) ? ? ? ? 对象名.属性
class person:
def __init__(self,lcfname,lcfage):
self.name=lcfname
self.age=lcfage
def cook(self,food):
print(self.name,"在炒",food)
def work(self,job):
print(self.age,"岁",self.name,'在干',job)
p1=person("张三",18)
p2=person("李四",20)
p1.cook("牛肉")
p2.work("机械")
面向对象支持的语法特征—封装
需求:属性不能给外面随便改,随便用 解决:将属性变成私有属性。属性前面两个下划线(属性不能看,也不能改) 需求:只看不改
def getage(self):
return self.__age
print(p1.getage())
需求:只改不看
def setage(self,newage):
self.__age=newage
p2.setage(15)
需求:能看能改 get和set一起使用
继承
class 子类(父类) 增加代码的复用性 例如创建一个白人,一个黑人 白人和黑人就继承了人类的特点,例如有名字,年龄,炒菜,吃饭
要求白人是会语言的,并且输出的炒菜方法和父类不同 super的用法
多态
如哈士奇既是狗类,又是动物类,但不是猫类 判断美国人是否是人类,是否是白人,是否是黑人
print(isinstance(dd1,person))
print(isinstance(dd1,whitehumon))
print(isinstance(dd1,blackhumon))
|