冯诺依曼体系

图片.png
CPU:运算器和控制器
运算器:完成各种算数运算,逻辑运算,数据传输等各种数据加工处理
控制器:控制程序的运行
存储器:用于记忆程序和数据(内存)
输入设备:将数据或程序输入到计算机中(键盘,鼠标)
输出设备:将数据或程序处理结果展示给用户(显示器,打印机)
CPU中还有寄存器和多级缓存Cache
程序
程序
算法+数据结构=程序
数据一切程序的核心
数据结构是数据在计算机中的类型和组织方式
算法是处理数据的方式,算法有优劣之分
写程序的难点
理不清数据
搞不清处理方法
无法把数据设计转换成数据结构,无法把处理方法转换成算法
无法用设计范式来进行程序设计
世间程序皆有bug,但不会debug
python基础语法
注释 --- # 标注的文本
#########################################################################
数字
整数,不区分long和int
进制0xa(16进制),0o10(8进制),0b10(2进制)
bool,2个值True,False
浮点数
1.2, 3.1415, -0.12, 1.46e9等价于1.46*10^9
负数
1+2j
#########################################################################
字符串
使用' "单双引号引用的字符的序列
''' """ 单双三引号,可以跨行,可以在其中自由的使用单双引号
在字符串前面加上r或者R前缀,表示该字符串不做特殊的处理
#########################################################################
转义序列
\\ \t \r \n \' \"
前缀r,把里面的所有字符当普通字符对待
#########################################################################
缩进
未使用C等语言的花括号,而是采用缩进的方式表示层次关系
约定使用4个空格缩进
#########################################################################
续行
在行尾使用\
如果使用各种花括号,认为括号内是一个整体,内部跨行不用\
#########################################################################
标识符
1.一个名字,用来指代一个值
2.只能字母,下划线和数字
3.只能以字母或下划线开头
4.不能时python的关键字,例如def,class就不能作为标识符
5.python是大小写敏感的
约定
不允许使用中文
不允许使用歧义单词,例如class_
在python中不要随便使用下划线开头的表示符
#########################################################################
常量
一旦赋值就不能改变值的标识符
python中无法定义常量
#########################################################################
字面常量
一个单独的量,例如 12,"abc",'2341356514.03e-9'
#########################################################################
变量
赋值后,可以改变值的标识符

图片.png
python的语言类型
python是动态语言,强类型语言
静态编译语言
实现声明变量类型,类型不能再改变
编译时检查
动态编译语言
不用事先声明类型,随时可以赋值为其他类型
编程时不知道是什么类型,很难推断
强类型语言
不同类型之间操作,必须先强制类型转换为同一类型.print(a+'1')
弱类型语言
不同类型间可以操作,自动隐式转换,JavaScripts中console.log(1+'a')

图片.png
强类型语言

图片.png
弱类型语言

图片.png
运算符Operator
算术运算符
+ - * / % **
自然除/结果是浮点数,整除//. 注:2.x中,/和//都是整除
位运算符
& | ~ ^ << >>
& 位与
| 位或
~ 取反
^ 异或
<< 向左的位移
>> 向右的位移
常用方式:乘除2的倍数,32//4相当于32>>2
12 0xc 0o14 0b1100
~12等于多少?

图片.png
源码,反码,补码,负数表示法
源码
5 => 0b101, 1 =>0b1, -1=>-0b1, bin(-1)
#########################################################################
反码
正数将源码按位取反;负数符号位不变其余按位取反
#########################################################################
补码
正数的补码是其本身;负数符号不变其余按位取反后+1
#########################################################################
负数表示法
数字电路的CPU中的运算器实现了加法器,但是没有减法器,减法是转换成加法
负数在计算机中使用补码存储,-1的补码为1111 1111
5-1 => 5+(-1)直觉上是0b101-0b1,其实计算机中是0吧01+0b11111111,溢出位舍弃
~12为什么是-13?
10^9等于?10^-9等于?为什么
运算符
比较运算符
== != > < >= <=
返回一个bool值
1<'1' 1==1
#########################################################################
逻辑运算符
与或非 and or not
短路运算符
and 如果第一个表达式为False,后面就没有必要计算了,这个逻辑表达式一定是False
or 如果第一个表达式Ture,后面没有必要计算了,这个逻辑表达式一定是Ture
#########################################################################
赋值运算符
a = min(3,5)
+= -= *= /= %= 等
x = y = z = 10
#########################################################################
成员运算符
in, not in
#########################################################################
身份运算符
is, is not
运算符优先级(由高到低)
| 运算符 | 描述 |
|---|---|
| 'expr' | 字符串转换 |
| {key:expr,...} | 字典 |
| [expr1,expr2...] | 列表 |
| (expr1,expr2,...) | 元组 |
| function (expr,...) | 函数调用 |
| x[index:index] | 切片 |
| x[index] | 下标索引取值 |
| x.attribute | 属性引用 |
| ~x | 按位取反 |
| +x, -x | 正, 负 |
| x**y | 冥 |
| x*y, x/y, x%y | 乘, 除, 取模 |
| x+y, x-y | 加, 减 |
| x<<y, x>>y | 移位 |
| x&y | 按位与 |
| x^y | 按位异或 |
| x|y | 按位或 |
| <,<=,>,>=,!=,== | 比较 |
| x is y, x is not y | 等同测试 |
| x in y, x not in y | 成员判断 |
| not x | 逻辑否 |
| x and y | 逻辑与 |
| x or y | 逻辑或 |
| lambda arg, ... :expr | Lambda匿名函数 |
算数运算符 > 位运算符 > 身份运算符 > 成员运算符 > 逻辑运算符
记不住,用括号
长表达式,多用括号,易读,易懂
表达式Expression
由数字,符号,括号,变量等的组成
算数表达式
逻辑表达式
赋值表达式
python中,赋值即定义,如果一个变量已经定义,赋值相当于重新定义
内存管理
变量无需事先声明,也不需要指定类型
动态语言的特性
编程中一般无需关心变量的存亡,也不用关心内存的管理
python使用引用计数记录所有变量的引用数
当变量应用数变为0,它就可以被垃圾回收GC
技术增加:赋值给其他变量就会被增量引用计数,例如:x=3;y=x
计数减少
函数运行结束时,局部变量就会被自动销毁,对象引用计数减少
变量被赋值给其他对象.例如:x=3;y=x;x=4
有关性能的时候,就需要考虑变量的引用问题,但是该释放内存,还是尽量不释放内存,看需求
程序控制
顺序
按照先后顺序一条条执行
例如:先洗手,再吃饭,再洗碗
分支
根据不同的情况判断,条件满足执行某条件下的语句
例如:先洗手,如果饭没有做好,玩游戏,如果饭做好了,就吃饭,如果饭都没有做,叫外卖
循环
条件满足就反复执行,不满足就执行或不再执行
例如:先洗手,看饭好了没有,没有好,一会来看一次是否好了,一会儿来看一次,直到饭好了,才可以吃饭,这里循环的条件是饭没有好,饭没有好,就循环的来看饭好了没有
单分支结构
if语句
fi condition:
代码块
condition必须是一个bool类型,这个地方有一个隐式转换bool(condition)
示例:
if 1<2:
print('1 less than 2')
代码块
类似于if语句的冒号后面的就是一个语句块
在if,for,def,class等

图片.png
真值表
| 对象/常量 | 值 |
|---|---|
| "" | 假 |
| "string" | 真 |
| 0 | 假 |
| >=1 | 真 |
| <=-1 | 真 |
| ()空元组 | 假 |
| []空列表 | 假 |
| {}空字典 | 假 |
| None | 假 |
False等价布尔值,相当于bool(value)
空集合
空字符串
空字典
空列表
空元组
None对象
0
多分支结构
if condition1:
代码块1
elif condition2:
代码块2
elif condition3:
代码块3
......
else:
代码块
#示例:
a=-5
if a<0:
print('negative')
elif a==0:
print('zero')
else:
print('positive')
分支嵌套
score=0
if score<0:
print('wrong')
else:
if score==0:
print('egg')
elif score<=100:
print('right')
else:
print('too big')
嵌套结构,可以是分支,循环的嵌套
可以互相嵌套多层
#练习
给定一个不超过的5位数,判断其有几位数
num=input('>>>')
num=int(num)
if num>=1000:
if num>=10000:
print(5)
else:
print(4)
else:
if num>=100:
print(3)
elif num>=10:
print(2)
else:
print(1)