Python基础-day02
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.py
13 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/python 4 # -*- 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.py 13 Hello 14 l 15 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 assignment 19 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 alex 8 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 ss 11 ß
- 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 [email protected]@@ 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 5 11 2 12 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‘> 6 9 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.com 10 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 4 11 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 True 19 False False True 20 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 False 10 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 True 10 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 False 13 True 14 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 False 11 False 12 ALEX 13 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 False 10 True
- 16.isspace | 是否全部是空格
1 name = ‘ ‘ 2 name2 = ‘ .‘ 3 v = name.isspace() 4 v2 = name2.isspace() 5 print(v) 6 print(v2) 7 8 --- 9 True 10 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-l 12 <class ‘str‘> ALEX 13 <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 alex 11 ALEX 12 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 standby 11 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 ale 9 lex
- 20.maketrans 和 translate | 对应关系 + 翻译
1 m = str.maketrans(‘hello‘,‘12345‘) # 对应关系 2 name = "---->[email protected]<-----" 3 v = name.translate(m) 4 print(v) 5 6 --- 7 ---->[email protected]<-----
- 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‘) <-- 元组,并且保留了自定义的分隔符: nd 9 <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######[email protected]@@.‘ 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######[email protected]@@.‘] 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 @[email protected] world.‘ 2 print(desc) 3 print(desc[0]) 4 print(desc[3:7]) 5 print(desc[0:8:2]) 6 7 --- 8 Hello @[email protected] world. 9 H 10 lo @ 11 [email protected]
- 求长度和 for循环遍历
1 desc = ‘Hello @[email protected] 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 1795490512 11 >>> id(num2) 12 1795490256 13 >>> 14 >>> num 15 9 16 >>> num2 17 1 18 >>>
- 基础功能
- 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 2 10 4 0b100 3 11 5 0b101 3 12 6 0b110 3 13 7 0b111 3 14 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‘ 大端序转换为十进制数 --> 254 7 b‘\\x00\\x00\\x00\\xff‘ 大端序转换为十进制数 --> 255 8 b‘\\x00\\x00\\x01\\x00‘ 大端序转换为十进制数 --> 256 9 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) * 10 18 end = p * 10 19 v1 = li[start:end] 20 for i v1: 21 print(i) 22 - 个人购物记录,文件 23 查看:娃娃 24 if "al" in "alex": 25 pass 26 """
以上是关于Python基础-day02的主要内容,如果未能解决你的问题,请参考以下文章