day1
1、python历史。
宏观上:python2 与 python3 区别:
python2 源码不标准,混乱,重复代码太多,
python3 统一 标准,去除重复代码。
2、python的环境。
编译型:一次性将所有程序编译成二进制文件。
缺点:开发效率低,不能跨平台。
优点:运行速度快。
:C,C++等等。
解释型:当程序执行时,一行一行的解释。
优点:开发效率高,可以跨平台。
缺点:运行速度慢。
:python ,php,等等。
3、break:跳出循环 continue:到循环首
day2
1、编码
1bit 8bit = 1bytes
1byte 1024byte = 1KB
1KB 1024kb = 1MB
1MB 1024MB = 1GB
1GB 1024GB = 1TB
最初是由美国人发明的ascii码,为密码本,后来发明了万国码“unicode”,可是代表汉子要占用4个字节,太大了;
所以发明了utf-8、utf-16、utf-32,一个字符24为,3字节
utf-8:最少用一个字节,8位表示一个英文;
欧洲16位,两个字节
亚洲24位,3个字节
中国人发明了gbk,一个中文16位去表示,2个字节
GBK:基于ascii研发的,只能支持中文和英文,不能喝utf-8直接转换
2、逻辑运算:And、or、not
- 优先级:( )>not>and>or
- int ——> bool 非零的转换成bool为True 0转换为bool是False
- bool ——> int True=1 False=0
- print(x or y) x 为 True时(非零为True),返回x 否则返回y
- print(x and y) x 为 True时 返回y 凑则返回x
- print(1 or 2 and 3 or 1 > 2 and 5 ) 找找类似这样的规律 “我感觉看到or就行”
day3
1、int
- *.bit_length() //求数字转换为二进制最小长度
2、转换
1 # bool True False 2 # int ——> str 3 i = 1 4 s = str(i) 5 # str ——> int //只有数字可以转换 6 s = '123' 7 i = int(s) 8 # int ——> bool //非零就是True,0位False 9 i = 3 10 b = bool(i) 11 # bool ——> int // True = 1, False = 0 12 ''' ps: 13 while True: 14 pass 15 while 1: # 效率高 16 pass 17 ''' 18 19 # str ——> bool //字符串位空 = False,非空为True
3、str
1 # 索引和切片 2 s = "ABCDESDASDEG" 3 4 s1 = s[0] # 取出第一个字母(A) 5 s2 = s[2] # 取出第三个字母(B) 6 s3 = s[-1] # 取出倒数第一位(G) 7 s4 = s[-2] # 取出倒数第二位(E) 8 # 切片:顾首不顾尾 9 10 s5 = s[0:3] # 取出ABC 11 s6 = s[0:-1] # 取出第一个到倒数第二个(ABCDESDASDE) 12 s7 = s[0:] # 取出全部 13 s8 = s[:] # 取出全部 14 # 跳着取[首:尾:步长] 15 16 s9 = s[0:5:2] # 第0个索引盗第5个索引,跳两个取(ACE) 17 18 # 倒着取 19 20 s10 = s[3::-1] # 取 DCBA 21 s11 = s[-1::-1] # 逆序取全部 22 s12 = s[::-1] # 逆序取全部 23 24 # 字符串操作 25 s = 'alex.egon.wusir' 26 s1 = s.title() # 以字符和数字隔开的,其后的字母大写 返回(Alex Egon Wusir) 27 28 s = 'alexWUsir' 29 # 更改大小写 30 s1 = s.capitalize() # 首字母大写,其它大写的也变成小写 31 s1 = s.upper() # 全部变成大写 32 s1 = s.lower() # 全部小写 33 s1 = s.swapcase() # 大小写翻转 34 # 居中和制表符 35 s1 = s.center(20, "#") # 设置一个20的长度,让字符串居中,默认用空格填充两边,可以使用其他符号,如"#"号 36 s1 = s.expandtabs() # 如果字符串中有“\t”则,在前边的封8进行补位 37 # 字符串的判断 38 s1 = s.startswith("al") # 如果是以什么开头,是返回True 39 s1 = s.startswith("e", 2) # 从第二个字符到最后是不是以”e“开头,是返回True 40 # 字符串的查找 41 s1 = s.find("W") # 查找字符串中是否有某个元素,有的话返回索引;没有返回-1 42 s1 = s.find("U", ) # 从第二个开始进行查找,如果找到返回索引,找不到返回-1 43 s1 = s.index("U") # 寻找元素,找到返回索引,找不到报错 44 # 删除空格 45 s1 = s.strip() # 去除前后的空格 46 s1 = s.strip("@#$") # 删除字符串中的前后@#$,不论顺序 47 s1 = s.rstrip() # 删除右侧 48 s1 = s.lstrip() # 删除左侧 49 # 统计个数 50 s1 = s.count("a") # 计数字符串中有几个a 51 # 分割 str ——> list 52 s1 = s.split() # 以空格分割为列表 53 # 公共方法,字典、列表、元组都可以用的 54 len(s) # 测量总共有几个元素 55 # 格式化输入 56 s1 = "我叫{},今年{},爱好{},再说一次我叫{}".format('太白', 20, 'women', '太白') 57 s1 = "我叫{0},今年{1},爱好{2},再说一次我叫{0}".format('太白', 20, 'women') 58 59 # 替换 60 s = '我的敬爱傻傻的啥大事傻傻卡号' 61 s1 = s.replace("傻傻", '聪明') # 替换全部 62 s1 = s.replace("傻傻", '聪明', 1) # 替换全部第一个 63 64 # is系列 65 s = "asdla131" 66 s1 = s.isalnum() # 是不是由字母或者数字组成 67 s1 = s.isalpha() # 是不是由字母组成 68 s1 = s.isdigit() # 是不是由数字组成
day4
1、list
1 li = ["alex", [1, 2, 3], "wusir", "egon", "女神"] 2 # l1 = li[0] 3 # l2 = li[1] 4 5 # 增 6 # 1、增加:list.append //默认增加到最后 7 # li.append("日天") 8 # li.append(2) 9 # 持续添加,想退出按q or Q 10 # while 1: 11 # name = input(">>>") 12 # if name.lower().strip() == "q": 13 # break 14 # else: 15 # li.append(name.strip()) 16 # 2、添加list.extent //增加都最后 17 # li.extend("123") 18 # li.extend([1, 2, 3]) 19 # 3、插入:list.insert //按照索引插入 20 # li.insert(4, "大灰") 21 22 # 删 23 # 1、li.pop //按照索引去删除,返回值为删除的元素,为空默认删除最后一个 24 # print(li.pop()) 25 # 2、li.remove //按照元素删除,元素必须存在,否则报错 26 # li.remove("egon") 27 # 3、li.clear //删除所有元素 28 # li.clear() 29 # del //删除列表,也可以切片删除 30 # del li 31 # del li[0:2] 32 33 # 改 34 # 1、直接改索引的值 35 # li[0] = 'hello' 36 # 2、切片改,选择切片范围,可以随便改,可大于范围,可小于范围 37 # li[0:1] = "牛牛牛" 38 # li[0:2] = [1, "asd", '你好', [1, 2]] 39 40 # 查 41 # 1、循环 42 # for i in li: 43 # print(i) 44 # 2、切片 45 # print(li[0:3]) 46 47 # 公共方法 48 # print(len(li)) 49 # print(li.count('egon')) 50 # print(li.index("wusir")) 51 52 53 li = [1, 64, 95, 55, 123] 54 55 # li.sort() # 正向排序 56 # li.sort(reverse=True) # 倒序排序 57 # li.reverse() # 反转 58 print(li)
2、list嵌套
1 li = ['taibao', '武藤兰', '苑昊', ['alex', 'egon', 89], 23] 2 # print(li[1][1]) # 找到'藤' 3 li[0] = li[0].capitalize() # ‘taibai’的首字母大写 4 li[2] = li[2].replace("昊", '日天')
3、元祖
1 # tu = (1, 2, 3, ['mrxuan', 'qwer', 'zxcvb'], 'egon') 2 # tu[3][3] = tu[3][3].upper() 3 # tu[3].append("Q") 4 # print(tu)
4、字符串和列表的转换以及join的方法运用
1 # 列表 --> str join 2 s = "-".join(["ni", 'hao', 'ya']) 3 print(s) 4 # 字符串转换为列表 5 li = '我 你 他 哈 her new'.split() 6 print(li)
5、range的用法
1 # range 2 3 for i in range(0, 10): 4 print(i) 5 for i in range(10, 0, -2): 6 print(i)
day5
1 # dict 2 """ 3 数据类型划分:可变数据类型,不可变数据类型 4 不可变数据类型:元组,bool,int,str 可哈希 5 可变数据类型:list,dict,set 不可哈希 6 dict key:必须是不可变数据类型 可哈希 7 dict value:任意数据类型 8 9 dict 优点: 10 二分查找 11 存储大量的关系数据 12 特点: 13 无序的 14 """ 15 16 # dic = { 17 # 'name': ['大猛', '小孟'], 18 # 'py9': [{'num': 71, 'avg_age': 18}], 19 # True: 1, 20 # (1, 2, 3): 'wuyiyi', 21 # 2: '二哥' 22 # } 23 24 # dic1 = {'age': 18, 'name': 'jin', 'sex': 'male'} 25 26 # 增 27 # 1、 索引修改 28 # dic1['high'] = 185 # 没有键值对,添加 29 # dic1['age'] = 16 # 如果有建,则值覆盖 30 # 2、setdefault 键值对有的话,不做任何改变,没有则添加 31 # dic1.setdefault('weight', 130) 32 33 # 删 34 # 1、pop 返回key的value 35 # print(dic1.pop('name')) 36 # 如果没有则会报错; 可以在逗号后边添加一个参数,则不会报错 37 # dic1.pop('aa') 38 # dic1.pop('aa', None) # None可以自定义写其他的,设置的参数将会成为pop的返回值 39 # dic1.popitem() # 随机删除一个键值,返回一个删除键值元组 40 # del dic1['name'] # 删除 41 # del dic1 # 删除字典 42 43 # 改 44 # dic1 = {'age': 18, 'name': 'jin', 'sex': 'male'} 45 # dic = {'age': 18, 'name': 'alex', 'sex': 'male'} 46 # dic1.update(dic) # 将dic的字典更新到dic1,有的话覆盖,没有则增加 47 48 # 查 49 # print(dic1.keys()) # 所有的key 50 # print(dic1.values()) # 所有的value 51 # print(dic1.items()) # 所有字典的键值 52 # for i in dic1: 53 # print(i) 54 # for i in dic1.keys(): 55 # print(i) 56 # for i in dic1.values(): 57 # print(i) 58 # for k, v in dic1.items(): 59 # print(k, v) 60 # print(dic1['name']) 61 # print(dic1['name1']) # 报错 62 # print(dic1.get('name1')) # 不报错 63 # print(dic1.get('name1', '没有这个键')) # 果果没有key则会返回后边的str 64 # dic1.clear() # 清空字典 65 66 # print(dic1)
小知识汇总
# = 赋值 == 比较 is 比较内存地址 id(内容):输出内存地址
# 数字, 字符串 定于小数据池,节省内存空间
# 数字的范围:-5 -- 256之间的数字 会开辟一个内存空间
# 字符串:
- 不含有特殊字符
- s * 20 还是同一个地址,s * 21 以后都是两个,s为一个字符
编码:
ASCII
A:00000010 8位 一个字节
unicode
A:00000000 00000001 00000010 00000100 32 位 四个字节
中:00000000 00000001 00000010 00000100 32 位 四个字节
utf-8
A: 0010 0000 8位 1个字节
中: 00000001 00000010 00000100 24 位 三个字节
gbk
A: 00000110 8位 一个字节
中: 00000010 00000110 16位 两个字节
1、个个编码之间的二进制,是不能互相识别的,会产生乱码。
2、文件的储存、传输,不能使unicode(只能是ytf-8 utf-16 gbk gbk2313 ASCII)等
python3:
str 在内存中是用unicode编码。
bytes类型:
对于英文:
str : 表现形式:s = "alex"
编码方式:010101010 unicode
bytes: 变现形式:s = b"alex" b代表bytes类型
编码方式:000101010 utf-8 gbk.....
对于中文:
str : 表现形式:s = "中国"
编码方式:010101010 unicode
1 s = 'alex'
2 s1 = b'alex'
3 print(s,type(s))
4 print(s1,type(s1))
bytes: 变现形式:s = b"x\e91\e91\e91\e01\e21\e31\e32" b代表bytes类型
编码方式:000101010 utf-8 gbk.....
1 s = '中国'
2 s1 = b'中国'
3 print(s,type(s))
4 print(s1,type(s1))
1 s1 = "alex"
2 # encode 编码, str ——> bytes
3 s2 = s1.encode('utf-8')
4 s2 = s1.encode('gbk')
5 s10 = "中国"
6 s11 = s10.encode('utf-8')
7 s11 = s10.encode('gbk')