目录
计算机基础
计算机硬件
计算机硬件的五大组成部分
控制器:指挥系统
运算器:数学运算+逻辑运算
存储器:存取数据 例如:内存 硬盘 磁带
输入设备:键盘、鼠标、摄像头
输出设备:显示器 、打印机
注意:CPU=控制器+运算器
与运行程序有关的三大核心硬件
cpu
内存 存取速度快,断电后数据全部丢失
硬盘 断电后数据保留,存取速度远远慢于内存
操作系统
操作系统本质就是一个软件,功能是专门用来控制硬件的
操作系统位于计算机硬件与软件之间,用于协调、管理、控制计算机硬件资源与软件资源
两大功能:
将复杂的硬件操作封装成简单的功能提供给用户/应用程序使用
将多个任务对硬件的竞争变得有序
计算机系统分为三部分:应用软件、操作系统、计算机硬件
编程语言
机器语言:直接用二进制编程,直接控制硬件,需要掌握硬件的操作细节
优点:执行效率高
缺点:开发效率低
汇编语言:用英文标签取代二进制指令去编写程序,直接控制硬件,需要掌握硬件的操作细节
优点:开发效率比机器语言高
缺点:仍然没有改变直接操作硬件的本质,执行效率高,但不如机器语言高
高级语言:直接用人类的语言去编写程序,不再需要掌握硬件的操作细节
编译型:一次性将所有程序编译成二进制文件。
缺点:开发效率低,不能跨平台。
优点:运行速度快。
如:C,C++等等。
解释型:当程序执行时,一行一行的解释。
优点:开发效率高,可以跨平台。
缺点:运行速度慢。
如:python ,php,等等。
执行效率由高到低:机器-》汇编-》编译型-》解释型
开发效率由高到低:解释型-》编译型-》汇编-》机器
运行python程序的两种方式:
方式一:交互式:
优点:输入一行代码立刻返回结果
缺点:无法永久保存代码
方式二(命令行):python3 D: est.txt
优点:以文件的方式将代码永久保存了下来,以后还可以用
注意:运行python程序是不考虑文件后缀名的,但约定俗成,应该将python程序的后缀名命名为.py
运行python程序的三个步骤(******)
1、先启动python解释器
2、将python程序当中普通的文本文件读入内存(此时没有语法的概念)
3、python解释器解释执行刚刚读入内存的代码,开始识别python的语法
python2 与 python3 区别
宏观上:
python2 源码不标准,混乱,重复代码太多,
python3 统一 标准,去除重复代码。
python2默认编码方式是ascii码,解决方式:在文件的首行:#-*- encoding:utf-8 -*-
python3 默认编码方式utf-8
与用户交互
程序等待用户输入一些数据,然后程序执行完毕后为用户反馈信息
在python3中,input会将用户输入的任何内容都存成字符串类型
在python2中:raw_input会将用户输入的任何内容都存成字符串类型
在python2中:input要求用户必须输入一个明确的数据类型,输入什么类型就存成什么类型
流程控制之if判断
多分枝
强调:if的多分枝=但凡有一个条件成立,就不会再往下判断其他条件了
if 条件1: code1 code2 code3 .... elif 条件2: code1 code2 code3 .... elif 条件3: code1 code2 code3 .... ........ else: code1 code2 code3 ....
流程控制之while循环
while + break: break代表结束本层循环
# while + break: break代表结束本层循环 # user_from_db='egon' # pwd_from_db='123' # # while True: # inp_user=input('please input your username: ') # inp_pwd=input('please input your password: ') # if inp_user == user_from_db and inp_pwd == pwd_from_db: # print('login successfull') # break # else: # print('user or password err')
while+continue:continue代表结束本次循环(本次循环continue之后的代码不在运行),直接进入下一次循环
强调:continue一定不要作为循环体的最后一步代码
while + else
else的代码会在while循环没有break打断的情况下最后运行
user_from_db='yb' pwd_from_db='123' count=0 tag=True while tag: if count == 3: print('输错次数过多') break inp_user=input('please input your username: ') inp_pwd=input('please input your password: ') if inp_user == user_from_db and inp_pwd == pwd_from_db: print('login successfull') while tag: cmd=input('>>>: ') # cmd='quit' if cmd == 'quit': tag=False break print('%s run......' %cmd) else: print('user or password err') count+=1 #count=3 # 输错3次
流程控制之for循环
names=['yb','zs','yxd','lb'] i=0 while i < len(names): #4 < 4 print(names[i]) i+=1
# for循环:可以不依赖索引而取指 names=['yb','zs','yxd','lb'] for item in names: print(item) dic={'x':1,'y':2,'z':3} for k in dic: #k='x' print(k,dic[k]) """ x 1 y 2 z 3 """
for vs while
for可以不依赖于索引取指,是一种通用的循环取指方式
for的循环次数是由被循环对象包含值的个数决定的,而while的循环次数是由条件决定的
''' 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 ... 9*1=9.................9*9=81 ''' for i in range(1,10): #i=3 for j in range(1,i+1): print('%s*%s=%s ' %(i,j,i*j),end='') #i=2 j=2 print()
''' max_level=5 * current_level=1 空格数=4 星号=1 *** current_level=2 空格数=3 星号=3 ***** current_level=3 空格数=2 星号=5 ******* current_level=4 空格数=1 星号=7 ********* current_level=5 空格数=0 星号=9 ''' max_level=10 for current_level in range(1,max_level+1): # 先不换行打印打印空格 for x in range(max_level-current_level): print(' ',end='') # 再不换行打印* for y in range(2*current_level - 1): print('*',end='') print()
字符------编码(字符编码表)------->二进制 ASCII:只能表示英文字符,用1Bytes对应一个英文字符 内存:ASCII 硬盘:ASCII GBK:可以表示中文和英文字符,用1Bytes对应一个英文字符,2Bytes对应一个中文字符 内存:GBK 硬盘:GBK Shift-JIS: 内存:Shift-JIS 硬盘:Shift-JIS Euc-kr: 内存:Euc-kr 硬盘:Euc-kr unicode: 可以对应万国字符,统一用2Bytes对应一个字符 内存:unicode 两大特点: 1 可以兼容万国字符 2 与万国字符编码都有一种数字与数字的对应关系 GBK数字-----解码decode----->unicode数字 Shift-JIS数字-----解码decode----->unicode数字 GBK数字<-----编码encode-----unicode数字 UTF-8数字<-----编码encode-----unicode数字 utf-8: 3Bytes对应一个中文字符 1Bytes对应一个英文字符 保证不乱码的关键: 1 字符当初以什么编码的,就应该以什么编码取解码 强调:此时计算机只使用unicode与字符的对应关系 python test.py 在python2中: 1 (执行python程序的第二个阶段)解释器在将test.py当普通的文本文件读入内存时默认使用的编码是ASCII 2 有两种字符串类型: str:x="上" # 文件头指定的编码格式的二进制 unicode:x=u"上" # 存成unicode格式的二进制 ps:pyhon2中unicode就是python3的str类型 在python3中: 1 (执行python程序的第二个阶段)解释器在将test.py当普通的文本文件读入内存时默认使用的编码是UTF-8 2 (执行python程序的第三个阶段,开始识别语法),会字符类型的值开辟一个内存空间存入unicode格式的二进制 即python3中的str类型是unicode编码的二进制 3 字符串类型 1 str: x="上" # 存成unicode格式的二进制 4 字节串(等同于二进制) 字节串=str.encode('utf-8') 文件头: 在文件首行写上:coding:utf-8 就是在告诉python解释器,不要用其默认的编码,用文件头指定的编码
1.输入输出统称为Input/Output,或者简写为IO 2.在字符串中,r" ",r""表示字符串内部默认不转义,那么打印出来的结果中就会显示 之类的转义字符 如果字符串内既包含‘又包含“,且两者都是要被打印出来的,那么此时在符号的左侧加上来标识 3.布尔值的与或非 and运算,只有所有都为True,and结果才是True or运算,其中一个为True,or运算结果就是True not运算是非运算,它是一个单目运算符,把True改为False或者把False改为True 4.全部大写的变量表示常量 5.字符编码 8比特(bit)=1字节 一个字节表示的最大的整数就是255 Unicode 用两个字节表示一个字符(偏僻字符需要4个字节) UTF-8 常用英文字母1个字节 汉字3个字节 生僻字符4-6个字节 ps:python提供了 ord()函数获取字符的整数表示 例如ord('A')打印出来就是65 chr()函数把编码转换为对应的字符 chr(66)打印出来就是 B 占位符 %d 整数 %f 浮点数 %s 字符串 %x 十六进制整数 print('%2d-%02d' % (3, 1)) #%2d指的是两位整数,%02d是两位整数,不足用0在前面补齐 print('%.2f' % 3.1415926) #%.2f指的是保留两位小数 format()方法 #'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125) #'Hello, 小明, 成绩提升了 17.1%' 6.列表list insert() 把元素插入指定的位置 #classmates.insert(1, 'Jack') pop() 删除list末尾的元素 #classmates.pop() 删除指定位置的元素,用pip(i) #classmates.pop(1) 7.元组touple python在显示只有一个元素的touple,也会加一个逗号,以免误解成数学计算意义上的括号 当一个元组中某元素为列表,可以对列表进行索引改值操作,例如: t = ('a', 'b', ['A', 'B']) 8.if判断 if x: print('True') 只要x是非零数值,非空字符串,非空list,就判断为True,否则为False 9.再议input birth = input('birth: ') if birth < 2000: print('00前') else: print('00后') #当输入1982的时候,报错 原因:input返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数 即 s = input('birth: ') birth = int(s) 10.字典dict 全称dictionary,在其他语言中,也称map,使用键值对存储 注意:在dict的get()的方法中,如果不存在,返回None,返回None的时候Python交互环境不显示结果 删除一个key,用pop(key),对应的value也会从dict中删除 dict的key是不可变对象 在python中,字符串,整数等都是不可变的,因此可以作为key,而list是可变的,就不能作为key dict和list的比较 dict: 1.查找和插入的速度极快,不会随着key的增加而变慢 2.需要占用大量的内存,内存浪费多 list: 1.查找和插入的时间随着时间的增加而增加 2.占用空间小,浪费内存很少 哈希算法:通过key计算位置的算法 11.集合set 去重性:可以重复添加add(key)相同元素,但是不会有效果 删除元素可以用remove(key)方法 sort():对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。 12.函数 可以把函数赋给一个变量,相当于给这个函数起了一个别名 isinstance(object,type)是Python中的一个内置函数,用来判断一个函数是否是一个已知的类型,类似 type()。 raise的用法(显示引发异常): 1.当程序出错时,python会自动触发异常,也可以用过raise显示引发异常 2.一旦执行了raise语句,raise之后的语句不在执行 3.如果加入了try,except,那么except里的语句会被执行 可变参数:就是传入的参数个数是可变的 定义可变参数,在参数前面加一个* #nums = [1, 2, 3],*nums表示把nums这个list的所有元素作为可变参数传进去。 关键字参数 def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw) #extra = {'city': 'Beijing', 'job': 'Engineer'}, #**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数 命名关键字参数 def person(name, age, *, city, job): #和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。 def person(name, age, *args, city, job): #如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了 *args 是可变参数,args接收的是一个tuple **kwargs 是关键字参数,kwargs接收的是一个dict