首页 > 代码库 > Python基础-day02
Python基础-day02
写在前面
上课第二天,打卡:
大人不华,君子务实。
一、进制相关
- 进制基础
数据存储在磁盘上或者内存中,都是以0、1形式存在的;即是以 二进制 的形式存在;
为了存储和展示,人们陆续扩展了数据的表示形式:八进制 -> 十进制 -> 十六进制...
二进制:0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 10000 10001 ...
八进制:0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 ... 十进制:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 ...
- 文件读写相关函数方法
虽然硬盘上存储形式都是简单的0和1,但是随着计算机科学的快速普及和发展,兼容了越来越多的语言和文字;所以出现了很多编码形式;
然而每一种编码都有自己的对应关系且每个byte由8个bit组成:ASCII码规定每个字符由8个bit表示,不能表示汉字;utf-8规定每个汉字由24个bit表示;
更多参见:Python基础-day01
所以针对存储在硬盘上的数据,要想正确的识别并展示出来,就必须要知道其存储的编码格式,否则则会出现乱码;
#1 Python中文件读写的小例子:
1 #!/usr/bin/python 2 # -*- coding:utf-8 -*- 3 4 f1 = open(‘log‘,‘r‘,encoding=‘utf-8‘) 5 f2 = open(‘log‘,‘rb‘) 6 data1 = f1.read() 7 data2= f2.read() 8 print(data1) 9 print(data2)10 11 result:12 D:\soft\work\python35\python.exe D:/soft/work/Python_17/day02/s01.py13 adada英文——_.14 b‘adada\xe8\x8b\xb1\xe6\x96\x87\xe2\x80\x94\xe2\x80\x94_.‘15 16 Process finished with exit code 0
log文件内容:adada英文——_.
二、类和对象初探
- 类/class
类,具有某些属性和行为的抽象结构;
代码中,属性对应了一些变量,行为则对应了一些具体的方法;
- 对象/object
对象,是类的实例,即具有某些属性和行为的实物;
- 面向对象
- 封装
- 继承
- 多态
- 重载
...
> 例如:水果是一个类/class,香蕉则是一个对象/object;
- Python 中的类和对象
比如我们常用的字符串类型:
1 class str(object):{...}2 ---3 #!/usr/bin/python4 # -*- coding:utf-8 -*-5 6 string = "Hello"7 new_str = string.upper()8 print(new_str)
string 变量通过 ‘=‘ 赋值,成为了一个str类的对象实例,存储在内存中;因为str类具有 ‘upper()‘ 方法,所以string对象继承了该方法,可以执行相关操作;
三、基本数据类型常用方法介绍
- 字符串/str
- 类型: 不可变(immutable)
下面这个小例子,试图修改字符串,解释器报错;
1 #!/usr/bin/python 2 # -*- coding:utf-8 -*- 3 4 string = "Hello" 5 print(string) 6 print(string[2]) 7 string[2] = ‘+‘ 8 print(string) 9 print(string[2])10 11 ---12 D:\soft\work\python35\python.exe D:/soft/work/Python_17/day02/s03.py13 Hello14 l15 Traceback (most recent call last):16 File "D:/soft/work/Python_17/day02/s03.py", line 9, in <module>17 string[2] = ‘+‘18 TypeError: ‘str‘ object does not support item assignment19 20 Process finished with exit code 1
- 基础功能
- 1.capitalize | 首字母大写
1 name = ‘alex‘2 v = name.capitalize()3 print(name)4 print(v)5 6 ---7 alex8 Alex
- 2.casefold 和 lower | 所有大写变小写,casefold 功能强于 lower
1 name = ‘HeLLo!‘ 2 v = name.casefold() 3 v2 = name.lower() 4 print(name) 5 print(v) 6 print(v2) 7 8 --- 9 HeLLo!10 hello!11 hello!
1 # ß 是德语里的一个大写字符 2 3 name = ‘ß‘ 4 v = name.casefold() 5 v2 = name.lower() 6 print(v) 7 print(v2) 8 9 ---10 ss11 ß
- 3.center, ljust, rjust | 文本居中,居左,居右,并填充显示,arg1 -> 表示总长度;arg2 -> 表示填充字符;
1 name = ‘standby‘ 2 v = name.center(10,‘#‘) 3 v2 = name.ljust(10,‘@‘) 4 v3 = name.rjust(10,‘+‘) 5 print(v) 6 print(v2) 7 print(v3) 8 9 ---10 #standby##11 standby@@@12 +++standby
- 4.count | 子序列在字符串中出现的次数;arg1 -> 子序列; arg2 -> 匹配查找的起始位置; arg3 -> 匹配查找的结束位置;
1 desc = "This is www.iqiyi.com." 2 v = desc.count(‘i‘) 3 v2 = desc.count(‘is‘) 4 v3 = desc.count(‘is‘,1,5) 5 print(v) 6 print(v2) 7 print(v3) 8 9 ---10 511 212 1
- 5.encode | 把字符串转换成 bytes 类型表示; arg1 -> 指定编码;
1 name = ‘中国‘2 new_name1 = name.encode(‘utf-8‘)3 new_name2 = name.encode(‘gbk‘)4 print(new_name1, type(new_name1), len(new_name1))5 print(new_name2, type(new_name2), len(new_name2))6 7 ---8 b‘\xe4\xb8\xad\xe5\x9b\xbd‘ <class ‘bytes‘> 69 b‘\xd6\xd0\xb9\xfa‘ <class ‘bytes‘> 4
- 6.endswith 和 startswith | 是否以xxx结尾、开头; arg1 -> xxx;arg2 -> 匹配查找的起始位置; arg3 -> 匹配查找的结束位置;
1 hitwh = "Just stick to what you love and believe in."2 v = hitwh.startswith(‘Just‘)3 v2 = hitwh.startswith(‘s‘,5,11)4 v3 = hitwh.endswith(‘t‘,5,12)5 print(v,v2,v3)6 7 ---8 True True True
- 7.expandtabs | 找到制表符\t,进行替换;arg1 -> 指定替换后的长度(包含 ‘\t‘ 前面的子序列);
1 my = ‘haha\tPython_17\twww.baidu.com\nwww.standby.pub\txxxx\tlike‘ 2 print(my) 3 v = my.expandtabs(20) 4 print(v) 5 6 --- 7 haha Python_17 www.baidu.com 8 www.standby.pub xxxx like 9 haha Python_17 www.baidu.com10 www.standby.pub xxxx like
- 8.find 和 index | 查找子序列索引位置,不存在则返回 ‘-1‘;index查找,不存在的话就报错了;默认是从左向右查找,另外还有 rfind 和 rindex,即从右向左查找;
name = ‘alex‘v = name.find(‘e‘)v2 = name.find(‘o‘)print(v)print(v2)---2-1
1 name = ‘alex‘2 v = name.index(‘o‘)3 print(v)4 5 ---6 Traceback (most recent call last):7 File "D:/soft/work/Python_17/day02/s02.py", line 35, in <module>8 v = name.index(‘o‘)9 ValueError: substring not found
- 9.format 和 format_map | 格式化输出的几种形式
1 # Format output 1 2 my = "I am %s, age is %s, gender is %s." 3 print(my % (‘standby‘,22,‘male‘)) 4 # Format output 2 5 my = "I am {0}, age is {1}, gender is {2}." 6 print(my.format(‘standby‘,23,‘male‘)) 7 # Format output 3 8 my = "I am {name}, age is {age}, gender is {gender}." 9 print(my.format(name = ‘standby‘,age = 24,gender = ‘male‘))10 # Format output 411 my = "I am {name}, age is {age}, gender is {gender}."12 print(my.format_map({‘name‘:‘standby‘,‘age‘:25,‘gender‘:‘male‘}))13 14 ---15 I am standby, age is 22, gender is male.16 I am standby, age is 23, gender is male.17 I am standby, age is 24, gender is male.18 I am standby, age is 25, gender is male.
- 10.isdecimal, isdigit, isnumeric | 判断是否是数字;isdecimal < isdigit < isnumeric
1 num = ‘123‘ 2 num2 = ‘九十八‘ 3 num3 = ‘⑨‘ 4 v1 = num.isdecimal() 5 v2 = num.isdigit() 6 v3 = num.isnumeric() 7 print(v1,v2,v3) 8 v1 = num2.isdecimal() 9 v2 = num2.isdigit()10 v3 = num2.isnumeric()11 print(v1,v2,v3)12 v1 = num3.isdecimal()13 v2 = num3.isdigit()14 v3 = num3.isnumeric()15 print(v1,v2,v3)16 17 ---18 True True True19 False False True20 False True True
- 11.isalpha | 判断字符串是否只有字母组成
1 string = ‘str‘ 2 name = ‘alex123‘ 3 v = name.isalpha() 4 v2 = string.isalpha() 5 print(v) 6 print(v2) 7 8 --- 9 False10 True
- 12.isalnum | 判断字符串是否由字母和数字组成
1 name = ‘alex123‘ 2 string = ‘str赢.‘ 3 v = name.isalnum() 4 v2 = string.isalnum() 5 print(v) 6 print(v2) 7 8 --- 9 True10 False
- 13.isidentifier | 判断是否可以用作标识符、变量名
1 string1 = ‘1a‘ 2 string2 = ‘int‘ 3 string3 = ‘name‘ 4 v = string1.isidentifier() 5 v2 = string2.isidentifier() 6 v3 = string3.isidentifier() 7 print(v) 8 print(v2) 9 print(v3)10 11 ---12 False13 True14 True
- 14.islower 和 isupper | 判断字符串是否全都是大、小写
1 name = ‘aLeX‘ 2 v = name.islower() 3 v2 = name.isupper() 4 print(v) 5 print(v2) 6 print(name.upper()) 7 print(name.lower()) 8 9 ---10 False11 False12 ALEX13 alex
- 15.isprintable | 是否包含隐含的 ‘\t‘ ‘\n‘ ‘\a‘...
1 desc = ‘aaa121212---.‘ 2 name = ‘alex \tsss‘ 3 v = name.isprintable() 4 v2 = desc.isprintable() 5 print(v) 6 print(v2) 7 8 --- 9 False10 True
- 16.isspace | 是否全部是空格
1 name = ‘ ‘ 2 name2 = ‘ .‘ 3 v = name.isspace() 4 v2 = name2.isspace() 5 print(v) 6 print(v2) 7 8 --- 9 True10 False
- 17.join | 字符串/子序列拼接
1 str = ‘alexall‘ 2 list = [‘A‘,‘L‘,‘E‘,‘X‘] 3 v = ‘-‘.join(str) 4 v2 = ‘‘.join(list) 5 v3 = ‘<-->‘.join(list) 6 print(v) 7 print(type(v2),v2) 8 print(type(v3),v3) 9 10 ---11 a-l-e-x-a-l-l12 <class ‘str‘> ALEX13 <class ‘str‘> A<-->L<-->E<-->X
- 18.lower, upper, swapcase | 大小写转换:全部变小写、全部变大写、大小写全部对换
1 name = ‘AleX‘ 2 v = name.lower() 3 v2 = name.upper() 4 v3 = name.swapcase() 5 print(v) 6 print(v2) 7 print(v3) 8 9 ---10 alex11 ALEX12 aLEx
- 19.strip, rstrip, lstrip | 移除空白,‘\n‘,‘\t‘,也可以自定义要移除的字符
1 name2 = ‘ standby ‘ 2 v2 = name2.strip() 3 v3 = name2.lstrip() 4 v4 = name2.rstrip() 5 print(v2) 6 print(v3) 7 print(v4) 8 9 ---10 standby11 standby 12 standby
1 name = ‘alex‘2 v = name.strip("x")3 v2 = name.strip("a")4 print(v)5 print(v2)6 7 ---8 ale9 lex
- 20.maketrans 和 translate | 对应关系 + 翻译
1 m = str.maketrans(‘hello‘,‘12345‘) # 对应关系2 name = "---->hello@world<-----"3 v = name.translate(m)4 print(v)5 6 ---7 ---->12445@w5r4d<-----
- 21.partition,rpartition | 分割字符串,并保留自定义的分隔符;arg1 -> 分隔符;则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。
1 name = ‘standby‘2 v = name.partition(‘nd‘)3 print(type(v),v)4 v1 = name.split(‘nd‘)5 print(type(v1),v1)6 7 ---8 <class ‘tuple‘> (‘sta‘, ‘nd‘, ‘by‘) <-- 元组,并且保留了自定义的分隔符: nd9 <class ‘list‘> [‘sta‘, ‘by‘] <-- 列表,去掉了自定义的分隔符
1 name = ‘standby--nd++‘2 v = name.partition(‘nd‘)3 v2 = name.rpartition(‘nd‘)4 print(type(v),v)5 print(type(v2),v2)6 7 ---8 <class ‘tuple‘> (‘sta‘, ‘nd‘, ‘by--nd++‘)9 <class ‘tuple‘> (‘standby--‘, ‘nd‘, ‘++‘)
- 22.replace | 替换; arg1 -> 匹配的子序列; arg2 -> 指定替换后的子序列; arg3 -> 替换的个数
1 content = "巴基斯坦help中国help俄罗斯help中国" 2 print(content) 3 v = content.replace(‘help‘,‘Love‘) 4 print(v) 5 v = content.replace(‘help‘,‘Love‘,2) 6 print(v) 7 8 --- 9 巴基斯坦help中国help俄罗斯help中国10 巴基斯坦Love中国Love俄罗斯Love中国11 巴基斯坦Love中国Love俄罗斯help中国
- 23.split, rsplit | 通过指定分隔符 arg1 对字符串进行切片,如果参数 arg2 有指定值,则仅分隔 arg2 个子序列
1 name = ‘standby--nd++And######worldnd@@@.‘ 2 v = name.split(‘nd‘) 3 v2 = name.rsplit(‘nd‘) 4 v3 = name.split(‘nd‘,2) 5 v4 = name.rsplit(‘nd‘,2) 6 print(type(v),v) 7 print(type(v2),v2) 8 print(type(v3),v3) 9 print(type(v4),v4)10 11 ---12 <class ‘list‘> [‘sta‘, ‘by--‘, ‘++A‘, ‘######world‘, ‘@@@.‘]13 <class ‘list‘> [‘sta‘, ‘by--‘, ‘++A‘, ‘######world‘, ‘@@@.‘]14 <class ‘list‘> [‘sta‘, ‘by--‘, ‘++And######worldnd@@@.‘]15 <class ‘list‘> [‘standby--nd++A‘, ‘######world‘, ‘@@@.‘]
- 24. zfill | 填充0; arg1 -> 指定总长度,包括已有字符串长度;
1 name = "alex"2 v = name.zfill(10)3 print(v)4 5 ---6 000000alex
- 扩展补充
- 切片
1 desc = ‘Hello @_@ world.‘ 2 print(desc) 3 print(desc[0]) 4 print(desc[3:7]) 5 print(desc[0:8:2]) 6 7 --- 8 Hello @_@ world. 9 H10 lo @11 Hlo@
- 求长度和 for循环遍历
1 desc = ‘Hello @_@ world.‘2 print(len(desc))3 for i in desc:4 print(i)5 for i in range(0, len(desc)):6 print(desc[i])
- 整数/int
- 类型 不可变(immutable)
1 >>> num=1 2 >>> id(num) <-- 查看num的内存地址 3 1795490256 4 >>> num2=1 <-- 给num2赋予同样的值:1 5 >>> id(num2) <-- num2 和 num 引用的是同一个内存地址,可见 Python3 在内存中为每一个值只保存一份; 6 1795490256 7 >>> 8 >>> num=9 <-- 给num重新赋值:9 9 >>> id(num) <-- num 的内存地址已经更改了,所以int值是不可变类型的!10 179549051211 >>> id(num2)12 179549025613 >>>14 >>> num15 916 >>> num217 118 >>>
- 基础功能
- 1.bit_length | 查看某整数用二进制表示时的最小位数; 可以用 ‘bin()‘ 函数获得整数的二进制表示形式;
1 print("十进制".ljust(5),"二进制".ljust(5), "二进制表示的最小位数") 2 for i in range(1,9): 3 print(str(i).ljust(10), bin(i).ljust(10), i.bit_length()) 4 5 --- 6 十进制 二进制 二进制表示的最小位数 7 1 0b1 1 8 2 0b10 2 9 3 0b11 210 4 0b100 311 5 0b101 312 6 0b110 313 7 0b111 314 8 0b1000 4
- 2.to_bytes | 获取指定整数的字节按照大小端序进行表示
1 num_list = [254,255,256,257] 2 for age in num_list: 3 print("%s 大端序 --> %s" % (age, age.to_bytes(4,‘big‘))) 4 print("%s 小端序 --> %s" % (age, age.to_bytes(4,‘little‘))) 5 6 --- 7 254 大端序 --> b‘\x00\x00\x00\xfe‘ 8 254 小端序 --> b‘\xfe\x00\x00\x00‘ 9 255 大端序 --> b‘\x00\x00\x00\xff‘10 255 小端序 --> b‘\xff\x00\x00\x00‘11 256 大端序 --> b‘\x00\x00\x01\x00‘12 256 小端序 --> b‘\x00\x01\x00\x00‘13 257 大端序 --> b‘\x00\x00\x01\x01‘14 257 小端序 --> b‘\x01\x01\x00\x00‘
- 3.from_bytes | 把指定大小端序的bytes对象转换成十进制整数表示
1 num_byte_list = [b‘\x00\x00\x00\xfe‘, b‘\x00\x00\x00\xff‘, b‘\x00\x00\x01\x00‘, b‘\x00\x00\x01\x01‘]2 for by in num_byte_list:3 print("%s 大端序转换为十进制数 --> %d" % (by, int.from_bytes(by, ‘big‘)))4 5 ---6 b‘\x00\x00\x00\xfe‘ 大端序转换为十进制数 --> 2547 b‘\x00\x00\x00\xff‘ 大端序转换为十进制数 --> 2558 b‘\x00\x00\x01\x00‘ 大端序转换为十进制数 --> 2569 b‘\x00\x00\x01\x01‘ 大端序转换为十进制数 --> 257
- 布尔值/bool
- 类型 不可变(immutable)
- 基础功能
- 整数里只有0是 False,其他都是 True
- 字符串里只有 "" 是 False,其他均是 True
- 如果列表为空,即[] 视为 False,其他均是 True
- 扩展补充
- 经常会把 ‘while True‘ 这样用作最外层的循环使用;
- 列表/list
- 类型
-基础功能
- 扩展补充
- 元组/tuple
- 类型
- 基础功能
- 扩展补充
- 字典/dict
- 类型
- 基础功能
- 扩展补充
- 集合
- 类型
- 基础功能
- 扩展补充
四、关于循环的补充
- while
a
- for
aaa
- range 和 xrange
aaa
- enumerate
五、练习题
a
六、day02课后作业
1 """ 2 # 1. 练习题两个试卷:readme 3 # 2. 购物系统 4 - 个人账户,文件: user,pwd,3,余额 5 - 商品,文件 6 - 查看商品分页显示: 7 li = [ 8 {...} 9 {...}10 {...}11 {...}12 {...}13 {...}14 {...}15 ]16 p = int(input(‘请输入页码:‘))17 start = (p -1) * 1018 end = p * 1019 v1 = li[start:end]20 for i v1:21 print(i)22 - 个人购物记录,文件23 查看:娃娃24 if "al" in "alex":25 pass26 """
Python基础-day02