硬件
-
输入设备
-
输出设备
-
CPU
存储设备
-
内存
-
外存
完成一个功能,各个组成部分协同工作的结果。输入设备—存储设备(内存)–CPU–(运算器)—
存储设备(内存)–输出设备、外存
-
软件
生活中的程序:完成一个任务而进行一系列有序的动作集
计算机中的程序:让计算机完成一个功能而编写的有序指令集
编程语言:
机器语言:010100001111
速度快,可读性不好,维护性,扩展性
汇编语言:助记符 add a,b
可读性有改善,比较贴近硬件,速度相对快
程序冗长。对计算机的硬件组成要求高。
高级语言:贴近人类语言
可读性,维护性,扩展性都非常好。
速度相对慢。
CC#JavaPython
解释型语言:源代码–解释器–边解释边执行 Python ,Javascript—【即时编译】
编译型语言:源代码–编译器–可执行文件 C,Java —【文献翻译】
很受欢迎,简单,应用领域广(办公自动化,web,数据采集,数据分析,人工智能,科学计
算),
三大方向的基础课。
Python发展历程:
Python之父:Guido 吉多
推荐使用3.x版本
简单,优雅
跨平台,跨语言
强大的库
免费开源
解释型
应用广
交互型
支持面向对象:C#,Java,Python,Javascript
面向过程:C
:
安装Python解释器
IDE:PyCharm
我有20元钱,花了12元,问还剩多少钱?
变量的本质:就是内存中的一块存储空间
变量的作用:存储数据
变量简单的理解为程序中其值可以发生可变的量
变量三要素:
变量名:存储空间的名字,快速地找到其中的数据
数据类型:存储数据的类型,分配空间
变量值:存储数据
数据类型:
基本数据类型
数值型
整型:int
浮点型:小数 float
布尔型
bool—boolean
真True 假False
字符串型
str:0~多个字符组成的串 ,放在单引号或双引号或者三引号之间
选择数据类型:是否有运算需求,有的话选数值类型,没就是字符型
举例:余额:1000,000,000—float 身份证号,电话号码,密码–str
复合数据类型/引用数据类型(后面讲到)
数据类型之间的转换
str() 把其它类型的数据转换成str
float() 把其它类型的数据转换成float 非数值串不能转换成float
bool() 把其它类型的数据转换成bool
总结:字符串拼接的时候,需要把其它类型转换成字符串,使用str()
数值计算的时候,需要把其它类型转换成数值,使用int()或float()
逻辑判断的时候,需要把其它类型转换成布尔,使用bool() —使用较少,后面会直接使用变量
来判断 变量名:
命名规范:
1、可以使用字母、数字 和下划线(_),不能以数字开头
2、不能使用关键字或保留字(创建python语言时,已占用了某些单词,已具有特殊的含义)
3、区分大小写 name Name
4、见名知意 name brand age price i
5、多个单词用_分隔 stu_name phone_price book_author
bookAuthor
输入输出
格式化输出
1、使用个数可变的位置参数
2、使用+连接符,+的左右均为str类型
3、%占位符:’’%()
4、{0}占位符:’’.format()
5、f’{变量名}’
输入
变量 = input(‘提示语:’)
从右往左进行
支持链式赋值
解包赋值,左右两边个数要一致
复合赋值运算符:赋值+算术 += -= *= /= //= %=
表示两个变量之间的大小关系的
< >= <= == !=
主要是连接多个条件(布尔表达式–关系表达式、布尔变量)
and 逻辑与:同真则真,遇假则假
or 有真则真,同假则假
not 取反
按位与 &
按位或 |
异或 ^
左移
右移
小括号>算术运算>位运算>关系运算>逻辑运算>赋值运算
先运算 ,再比较 ,再链接,最后赋值
建议大家,把优先高的放在小括号中,这样的代码可读性好
算法就是解决问题的步骤。
算法不唯一,但是有优劣。评价维度:时间复杂度,空间复杂度。
表示算法的方式有很多,最主要的一种就是流程图。
符号:圆角矩形 —程序的开始/结束
平行四边形–输入或输出
直角矩形–处理步骤(运算,赋值)
菱形—判断(布尔表达式)
流程线
计算机专家发现,不管多么简单或多么复杂的算法都可以由顺序结构,选择结构,循环结构组合而
成。
从左往右,从上往下依次执行
写出来的代码都会执行
场景:需要做出选择/做出判断,才知道如何执行
1、单分支结构
语法:
1)条件:结果只要是布尔值就行,所以也叫布尔表达式。可以是变量,关系表达式,逻辑表达式
bool(变量)–0,0.0,空字符串、空字典,空集合,空列表等返回false,其它都返回true
2)代码块:可以是赋值,运算,流程结构等
3)python靠缩进表达代码的层次关系,缩进一般使用tab键
执行顺序: 先判断条件,如果条件为true,则执行代码块。否则不执行代码块
案例:
2、双分支结构
语法:
执行顺序:先判断条件,条件为true,则执行代码块1,否则执行代码块2
案例:
简化写法:条件表达式
执行顺序:条件为true,表达式的结果就是表达式1,否则整个表达式的结果就是表达式2
3、多分支结构
3.1 多重if结构
语法:
执行顺序:先判断条件1,如果条件1为true,则执行代码块1
否则判断条件2,如果条件2为true,则执行代码块2
否则判断条件3,如果条件3为true,则执行代码块3
场景:一个维度连续区间的多路分支
案例:
注:python中关系表达式允许连写0<score < 60
练习
3.2 嵌套if结构
语法:
执行顺序:
场景:多个维度的多路分支
案例:
3.3 switch在python没有
场景:有重复做的事情(可以是一样的事情,也可以是有规律的事情)
循环的特点:
循环操作:重复在做的事情
循环条件:循环继续的条件,循环结束的条件
如果循环永不结束,就叫死循环。初学程序的时候,要避免死循环。
编码时,循环条件会借助循环变量来表达。
如,计数器count=0(循环变量的初始化) count+=1(循环变量的更新) count<=10(循环条
件)
5.3.1 while循环
语法:
循环变量的初始化
while 循环条件:
循环操作
循环变量的更新
特点:先判断,再执行
如果循环条件一开始就不成立,循环操作可能一次都不执行
适合循环次数不固定的情况
案例
while适合循环次数不固定的情况
5.3.2 for in循环
语法
特点:循环次数固定,优先for;常用来遍历容器对象
可迭代对象:字符串、range对象
range()函数 可以生成整数序列
range(stop) 生成[0,stop)之间的整数序列,步长是1
range()函数只存储这start,stop,step个变量,节省内存
5.3.3 循环中的break、continue、else
break:中断指令,也使用在循环中,结束当前所在层的循环
continue:中断指令,也使用在循环中,结束本轮循环
else:和while/for-in搭配使用,不碰到break退出时才会执行到的代码
5.3.4 双重循环:
一个循环嵌套在另一个循环中
外层循环执行一轮,内层循环执行一遍 —>双重循环要执行的次数
打印图形练习
5.3.4 循环作业
1、求两个数最大公约数
参考链接:https://www.cnblogs.com/schips/p/10658253.html
2、整数反转
3、1~10之间的整数相加,得到累加值大于20的当前数 1+2+3+4…加到几和超过20
变量-单一数据
容器-存储多个数据,提供了一些操作数据的方法
特点:
元素的数据类型是不受限制的,可变长,有索引,有序,可重复
参考动态数组
创建:
获取元素:
添加
修改
删除
其它
综合案例
特点:
1 不可变的序列 特点:不可增删改,修改后,地址会发生改变
2 参考定长数组,
3 有索引
4 有序
5 元素不限制类型
创建
获取元素
不能做的事情
特点:
1 不重复,无序
2 参考数学上的集合:不重复,无序
3 底层实现:哈希表
4 集合存储的对象都是不可变对象
5 没有索引
6 集合是没有value的字典
获取元素
增删改
其它操作
集合在数学方面的操作
特点:
1、字典中的所有元素都是一个键值对,key不允许重复,value可以重复
2、无序
3、key必须是不可变对象
4、字典也可以根据需要动态地伸缩
5、字典会浪费较大的内存,是一种使用空间换时间的数据结构
创建:
获取元素
增删改
列表:有序,可重复,可变长,有索引,任意类型数据 []
元组:有序,可重复,不可变,有索引,任意类型数据 ()
集合:无序,不重复,可变长,无索引,不可变数据, {}
字典:无序,key不重复,value可重复,可变长,无索引,有键,键值对(key不可变数据){}
什么是函数?函数就是完成特定功能的一段代码
为什么需要函数?复用代码、隐藏实现细节、提高可维护性、提高可读性
创建函数
函数调用:本质上就是在执行函数体
1)可选项,
2)需要给调用者返回数据,使用return+数据
3)可返回多个数据,以元组返回—python独有的
4)如果不需要返回数据,可以return 语句。
5)函数体中可以根据条件判断,通过return提前结束函数
当完成特定功能,需要调用者提供数据的时候,可以给函数定义参数
函数定义的时候,参数叫形式参数,简称形参列表:
函数调用的时候,参数叫实际参数,简称实参列表, 实参个数需和形参个数一致
参数传递
参数的类型
位置实参:实参按照顺序依次传递给形参
关键字实参:按照形参名传递,与顺序无关
可以与位置参数混用,但位置实参在前,关键字实参在后
默认值形参
可变个数的形参
递归是一种算法思想,就是函数自己调用自己
把一个大的复杂的问题,化简成一个跟他相似但规模更小的问题
递归的好处:想起来简单,编码也简单
递归的缺点:内存占用大,效率低
递归的编码:
1、递归公式-- f(n)=f(n-1)+n
2、临界条件 f(1)=1
斐波那契数列、兔子数列
从第三项开始,每一项都是前面两项数字的和,如 1,1,2,3,5,8,13…
汉诺塔
参考链接:
https://zhuanlan.zhihu.com/p/80960485
https://zhuanlan.zhihu.com/p/65485925
https://zhuanlan.zhihu.com/p/257851876
try…except…else…finally
10.1 面向过程与面向对象
面向过程:算法,1,2,3–围观上操作细节
面向对象:宏观上把控
面对过程和面向对象不是相互对立的,而是相辅相成的。
支持面向过程的语言:C、C++
支持面向对象的编程语言:C++,c#,Java,Python,Javascript
10.2 面向对象入门
面向对象:
模拟现实世界
对象:
万事万物皆对象。
对象就是一个真实的存在。
例如:张三
静态的特征:姓名,年龄,性别,身份证号,电话号码
现实世界,我们会自然而然地对事物进行归类。
具有相同静态特征和动态特征的对象,统称为类
类是抽象的,对象是具体的。
类是集合,对象是个体。
类和对象不是整体和局部的关系。牛-牛头
类可当作一种数据类型。由类创建出来的对象,叫实例。
面向对象编程的思路:
1、抽象出类
2、抽象出跟业务相关的静态特征(属性):name,age,phone
抽象出跟业务相关的动态特征(方法):gotoClass() ,run()
3、创建对象–实例化对象
对象.属性
对象名.方法()
封装的目的:保护数据的安全性
封装的含义:
1)广义:类把属性和方法封装在了一起,方法把过程进行了封装
2)狭义:属性私有化,在方法内部操作属性,在类外部调用方法
我们一般强调的是狭义的封装
封装的实现:
1)属性的私有化(加__),
2)添加get、set方法
3)在方法中添加逻辑判断
注:在Python中没有专门的修饰符用于属性的私有,如果该属性不希望在类对象外部被访问,前面
使用两个__。
11.1 模块
模块:1个py文件就是一个模块
包含的内容:类,函数,变量和语句
好处:避免类、函数、变量的重名
提高代码的可维护性
提高代码的可重用性
模块分类:1、系统内置模块 2、第三方模块 3、自定义模块
创建模块:新建.py文件
导入模块 :import
1)import 模块名 [as 别名]
使用时,模块名.类 模块名.函数 模块名.变量
2)from 模块 import 类/函数/变量
代码中直接使用类、函数、变量
类似目录 、管理一些功能的相似的模块
包和目录的区别:包中包含init.py文件
好处:避免模块的重名
导入其它包中的模块,需要:import 包.模块名
学习内置模块的方法:
1)dir(模块名) 查看模块中的成员
2)help(模块名/方法名/类名) 查看对象的帮助文档
3)通过pycharm中的提示功能
4)点击查看源码注释
math:提供标准算术运算函数的标准库
time 时间相关的模块
os模块
os.path模块
文件内容的操作需要通过流来实现
流是有方向的。从内存->外存,叫输出Output,称写操作;从外存到内存,叫输入Input,称读操
作。
按每次读取的数据单元,也可将流分为字符流和字节流。一般文本文件建议以字符方式读写,二进
制文件采用字节方式读写。
文件IO操作步骤:
1、创建流对象
2、读或者写
3、关闭流
乱码问题:编码格式
以上就是本篇文章【在函数体中,修改可变对象中的元素,会影响到实参】的全部内容了,欢迎阅览 ! 文章地址:http://www.razcy.com/news/4419.html 资讯 企业新闻 行情 企业黄页 同类资讯 首页 网站地图 返回首页 月落星辰移动站 http://m.razcy.com/ , 查看更多