day 1
计算机的基础知识
1 五部分
控制器 运算器 储存器 输入输出设备
cpu [控制器(?) 运算器(?)]
储存器 [寄存器(分布在cpu上 速度最快,容量最小)
内存(较快),硬盘(慢)]
rom 只读存储器
ram 可读写存储器
平台
硬件加操作系统
跨平台
跨平台性能的好坏是衡量一个软件好的重要标准
操作系统
是协调,管理,操作 计算机硬件和软件资源的程序,讲硬件的命令指令封装成接口公用户和软件应用使用>
cpu X86型号 64 位数 cpu一次读取指令的最大位数
内存是主内存 :我们所有的程序和运行程序过程中产生的值都放在内存中
内核态用户态 :当计算机调用硬件指令时,切换为内核态
IO延迟 = 平均寻道 + 平均延迟
开机过程
首先启动bios(存储在主板的rom中,)
BIOS 调用 coms 存储过程量和参数
选择启动项
读取启动项第一个扇区
启动操作系统
day 2
机器语言
汇编语言
高级语言: 编译型 c
解释型语言 python
编译型 运行快 开发慢 跨平台差
解释型 运行慢 开发快 跨平台强
python的运行
Python解释器启动(从硬盘 读入内存)
.py文件读入内存
将.py文件用python解释器按照python语法运行
环境变量
指在操作系统中用来指定操作系统运行环境的一系列参数
作用当运行程序时如果在本目录中找不到会从环境变量中找
day 3:
变量
变化的量
记录事物的状态 程序的运行本质上就是 程序的运行
name = 'Alex'
变量的三部分:
变量名 指向等号右方的地址
赋值 将变量值和变量名绑定
变量值 内存地址中存储的内容
变量的三种特性
id() id号 与内存地址一一相对应,但不等于内存地址
type() 变量的种类
value 值
变量的命名规则和风格
1数字字母下划线组成且数字不在开头
2不能是关键字
3要言之有意
ps: 不能太长,不能用中文
1 尽量用小写字母下划线组成
2 或者驼峰体(不建议)
常量:约定俗成 纯大写变量名为常量(不赞成更改)
is id() , == value
is 比较的是id号
== 比较的是值
id相等值一定相等,反之则不一定.
小整数池
python解释器为了
变量类型
数字(10 10.1)
(为什么表示数字类型的状态)
整数 int n = 10
浮点数 float m = 10
整数类型可以和字符串类型直接相加
type(n) type(m)
字符串 ('Alex')
str (为了表示可描述性状态的变量)
a = '秋天的落叶'
其他:
可相加 可以跟数字相乘(不常用)
字符串的嵌套
列表([])
list (存储多个状态且可以通过索引读取出来)
l = ['name','age','hobby']
其他:列表嵌套 列表的循环引用(采取 标记清除发)
字典({key:value,...})(key一般是字符串''value随便)
dict (类似列表 容器类型,不过不是通过索引取值而是通过key取值)
dic = {'name':'Alex','hobby':['安静','心跳的声音']}
其他 嵌套
bool(True,False)
day4 (第四天的不小心删掉了用笔记代替)
作业
# 1 print('{0:-^36}'.format('in to Egon')) a = '''Name : {} Age : {} Sex : {} Job : {} ''' print(a.format('Egon',22,'male','teachor')) print('{0:-^36}'.format('end')) ''''不熟练待会练习''' # 2 users = {'enon':'永远18岁','lee':'睡你妹起床学习'} user_name = input('输入用户名>>>') if user_name.lower() in users.keys(): password = input('输入密码') if password == users[user_name.lower()]: print('登录成功') else: print('密码错误,请重试') else: print('用户名不存在') # 3 egon_age = 18 temp_age = int(input('猜一下egon的年龄')) if temp_age > egon_age: print('我那么老么,想清楚在说话 啊!') elif temp_age < egon_age: print('哈哈,我看起来这么年轻啊,小嘴抹了蜜') else: print('聪明,帅气如我永远18') # 4 print(10000//30) print(10000%30) # 5 egon = 18 egon += 3 print(egon) # 6 x = y = z = 10 # 7 dsb = 'egon' superman = 'alex' dsb , superman = superman, dsb # 8 name_1 , naem_2,name_3,name_4,name_5,name_6 = ['alex_sb','wusir_sb','oldboy_sb','egon_nb','lxx_nb','tank_nb'] print(name_1 , naem_2,name_3,name_4,name_5,name_6)
垃圾回收机制
# 垃圾回收机制 # 是python自带的一种自动回收无用内存空间的机制 # 节省内存空间提高运行效率 # 1 引用计数 当变量值被变量名直接连接或者间接连接时,则变量计数加一,当变量计数为零时,则解释器回收内存 # 引用计数分为:直接引用和间接引用 # 直接引用 : x = 10 # 间接引用 : l = [1 ,2,x] ''' ps: l1 = [1 , 2 , x] 与 l2 = [1,2,10] 一样 x = 10 x 中存储的是x的10的内存地址 l1,l2中存取的是列表 [1,2,10]内存地址 x = 10 l = [x] x = 123 print(l) == print([10]) 当列表中存取变量时只存取变量相对应的内存地址而跟变量无关,变量变列表中的值不变. ''' # 但是引用计数存在漏洞 为了修补引用计数的漏洞 产生了 # 2 标记清楚算法 # 容器数据类型的循环引用造成漏洞 例如 l1 = ['alex','lee',l2} l2 = ['alex','lee',l1} 当解除l1 l2 与其对应变量值的绑定关系后 # 其变量值相互关联引用计数算法无法不能回收,我们也无法调用,浪费内存空间.所以有了标记清除法 # 栈区 : 存放变量名称 # 堆区 : 存放变量值 # 开始时扫描 从栈区每个变量名出发往后标记.堆区中没有标记的值就是无法被调取的.清除. # 分代回收(降低引用计数的扫描频率,提高回收效率) # 给变量设置权重值 # 降低.引用计数扫描中一直存在连接的变量扫描频率. input('')
用户交换 与格式化输出(补遗)
# print() # input('') # python 3 中 input()输出的都是字符串类型 # name = input('请输入你的名字') # print(name) # print(name,type(name)) # age = input('请输入你的年龄') # print(age,type(age)) # print(int(age)) # # print(int('abc')) # print(int(5022.1644)) # int 转化数字只能转化纯数字类型的字符串 # # python 2 中 raw_input 跟python3 中的input相同 # 但是python2 中的 # input(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型 # 字符串类型格式化 # 较老 # name = input('请输入你的名字') # author = input('请输入这首歌的作者') # print('与鲜活的枝丫%s,你想法你我就'%(name)) # print('中一万多莲花%s,我怎么能波澜不进,去附和%s' % (name,author)) # print('是不是会担心会变成一只野兽%(name)s为心跳%(author)s的节奏'% {'author' : author,'name' : name}) #forma (建议使用) # print('想要练就就是武功,无论{}和{}'.format('春夏','秋冬')) # print('作词{1}最想看到是你的{0}'.format('微笑','胆小')) # print('世界突然变得好{name},只剩{author}的声音'.format(name='安静',author = '心跳')) # 了解 """ 2.4 填充与格式化 # 先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度] # *<10:左对齐,总共10个字符,不够的用*号填充 print('{0:*<10}'.format('开始执行')) # 开始执行****** # *>10:右对齐,总共10个字符,不够的用*号填充 print('{0:*>10}'.format('开始执行')) # ******开始执行 # *^10:居中显示,总共10个字符,不够的用*号填充 print('{0:*^10}'.format('开始执行')) # ***开始执行*** 2.5 精度与进制 print('{salary:.3f}'.format(salary=1232132.12351)) #精确到小数点后3位,四舍五入,结果为:1232132.124 print('{0:b}'.format(123)) # 转成二进制,结果为:1111011 print('{0:o}'.format(9)) # 转成八进制,结果为:11 print('{0:x}'.format(15)) # 转成十六进制,结果为:f print('{0:,}'.format(99812939393931)) # 千分位格式化,结果为:99,812,939,393,931 """ print('{0:*<10}'.format('开始执行')) # f(不建议使用) x = input(">>>") y = input('>>>') print(f'只怕你把{x}当习惯{y}')
运算符
# 运算符 # 算数运算符 # +,-,*,/,//,**,% # 比较运算符 # >,>=,<,<=,==,!= # 赋值运算符 # = 变量的赋值运算 ''' 增量赋值 例如 a += 1 b -= 1 c *= c d **= 2 e %= 2 f //= 2 g /= 2 ''' # 链式赋值 x = 10 y = x z = y '+++++++++++++++++++++++++' x = y = z = 10 print(id(x),id(y),id(z)) # 交叉赋值 x = 10 y = 20 temp = x x = y y = temp print(x,y) '++++++++++++++++++++' x = 10 y = 20 x,y = y,x print(x,y) # 解压赋值(*****) # 重点 salaries = [111,222,333,444,555,666,777] mon_0 = salaries[0] mon_1 = salaries[1] mon_2 = salaries[2] mon_3 = salaries[3] mon_4 = salaries[4] mon_5 = salaries[5] mon_6 = salaries[6] print(mon_0,mon_1,mon_2,mon_3,mon_4,mon_5,mon_6) '++++++++++++++++++++++++++++++++++++++++++++++++++++' mon_6,mon_5,mon_4,mon_3,mon_2,mon_1,mon_0 = salaries print(mon_0,mon_1,mon_2,mon_3,mon_4,mon_5,mon_6) '++++++++++++++++++++++++++++++++++++++++++++++++' # 只取开头 mon_0,mon_1,*_= salaries print(mon_0,mon_1) # 只取结尾 *_,mon_5,mon_6 =salaries print(mon_5,mon_6) '''众所周知 *代表所有的意思 *讲没有对应关系的值存为列表然后赋值给紧跟其后的变量名 '''