Day5--Python训练营
主要内容字符串,字典。
一、字符串
1)字符串定义
1. Python 中字符串被定义为引号之间的字符集合。
2. Python 支持使用成对的 单引号 或 双引号。
如果字符串中需要出现单引号或双引号,可以使用转义符号 \ 对字符串中的符号进行转义。
转义字符 描述
\\ 反斜杠符号
\' 单引号
\" 双引号
\n 换行
2)字符串的切片与拼接
1. 类似于元组具有不可修改性
2. 从 0 开始 (和 C 一样)
3. 切片通常写成 start:end 这种形式,包括「 start 索引」对应的元素,不包括「 end 索引」对应的元素。
4. 索引值可正可负,正索引从 0 开始,从左往右;负索引从 -1 开始,从右往左。使用负数索引时,会从最后一个元素
开始计数。最后一个元素的位置编号是 -1。
3)字符串的常用内置方法
1. capitalize() 将字符串的第一个字符转换为大写。
2. lower() 转换字符串中所有大写字符为小写。
3. upper() 转换字符串中的小写字母为大写。
4. swapcase() 将字符串中大写转换为小写,小写转换为大写。
5.count(str, beg= 0,end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定
范围内 str 出现的次数。
6. endswith(suffix, beg=0, end=len(string)) 检查字符串是否以指定子字符串 suffix 结束,如果是,返回True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。
7. startswith(substr, beg=0,end=len(string)) 检查字符串是否以指定子字符串 substr 开头,如果是,返回True,否则返回 False。如果 beg 和 end 指定值,则在指定范围内检查。
8. find(str, beg=0, end=len(string)) 检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含,返回开始的索引值,否则返回 -1。
9. rfind(str, beg=0,end=len(string)) 类似于 find() 函数,不过是从右边开始查找。
10.isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False。
11. ljust(width[, fillchar]) 返回一个原字符串左对齐,并使用 fillchar (默认空格)填充至长度 width 的新字符串。
12. rjust(width[, fillchar]) 返回一个原字符串右对齐,并使用 fillchar (默认空格)填充至长度 width 的新字符串。
13. lstrip([chars]) 截掉字符串左边的空格或指定字符。
14. rstrip([chars]) 删除字符串末尾的空格或指定字符。
15. strip([chars]) 在字符串上执行 lstrip() 和 rstrip() 。
16. partition(sub) 找到子字符串 sub,把字符串分为一个三元组 (pre_sub,sub,fol_sub) ,如果字符串中不包含sub则返回 (' 原字符串','','') 。
17. rpartition(sub) 类似于 partition() 方法,不过是从右边开始查找。
18. replace(old, new [, max]) 把 将字符串中的 old 替换成 new ,如果 max 指定,则替换不超过 max 次。
19.split(str="", num) 不带参数默认是以空格为分隔符切片字符串,如果 num 参数有设置,则仅分隔 num 个子字符串,返回切片后的子字符串拼接的列表。
20.splitlines([keepends]) 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为False,不包含换行符,如果为 True,则保留换行符。
21. maketrans(intab, outtab) 创建字符映射的转换表,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
22. translate(table, deletechars="") 根据参数 table 给出的表,转换字符串的字符,要过滤掉的字符放到 deletechars 参数中。
4)字符串格式化:
1.字符串格式化符号
符号 描述
%c 格式化字符及其ASCII码
%s 格式化字符串,用str()方法处理对象
%r 格式化字符串,用rper()方法处理对象
%d 格式化整数
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g 根据值的大小决定使用%f或%e
%G 作用同%g,根据值的大小决定使用%f或%
2. 格式化辅助字符指令
符号 功能
m.n m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)
[-] 用作左对齐
[+] 在正数前面显示加号( + )
#在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)
0 显示的数字前面填充’0’而不是默认的空格
练习题:
1、字符串函数回顾
a. 怎么批量替换字符串中的元素? 使用 replace(old, new [, max]) 函数。
b. 怎么把字符串按照空格进行拆分?使用split(str="", num)函数
c. 怎么去除字符串首位的空格?使用lstrip([chars])函数
2、实现isdigit函数
题目要求
实现函数isdigit, 判断字符串里是否只包含数字0~9
1 def isdigit(string): 2 """ 3 判断字符串只包含数字 4 :param string: 5 :return: 6 """ 7 # your code here 8 n=0 9 for i in string: 10 if '0'<=i and i<='9': 11 n=n+1 12 continue 13 else: 14 break 15 if n==len(string): 16 print('只包含数字') 17 else: 18 print('不只包含数字') 19 20 if __name__ == '__main__': 21 print(isdigit('897')) 22 print(isdigit('897gk5')) 23 24 只包含数字 25 None 26 不只包含数字 27 None
二、字典
1)可变类型与不可变类型
1. 序列是以连续的整数为索引,与此不同的是,字典以"关键字"为索引,关键字可以是任意不可变类型,通常用字符串或数值。
2. 字典是 Python 唯一的一个 映射类型,字符串、元组、列表属于序列类型。
那么如何快速判断一个数据类型 X 是不是可变类型的呢?两种方法:
1. 麻烦方法:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id ,如果不一样,则 X 不可变,如果一样,则X 可变。
2. 便捷方法:用 hash(X) ,只要不报错,证明 X 可被哈希,即不可变,反过来不可被哈希,即可变。
数值、字符和元组 都能被哈希,因此它们是不可变类型,列表、集合、字典不能被哈希,因此它是可变类型。
2)字典的定义
字典 是无序的 键:值( key:value )对集合,键必须是互不相同的(在同一个字典之内)。
1. dict 内部存放的顺序和 key 放入的顺序是没有关系的。
2. dict 查找和插入的速度极快,不会随着 key 的增加而增加,但是需要占用大量的内存。
字典 定义语法为 {元素1, 元素2, ..., 元素n}
1. 其中每一个元素是一个「键值对」 -- 键:值 ( key:value )
2. 关键点是「大括号 {}」 ,「逗号 ,」和「冒号 :」
3. 大括号 -- 把所有元素绑在一起
4. 逗号 -- 将每个键值对分开
5. 冒号 -- 将键和值分开
3)创建和访问字典
通过字符串或数值作为 key 来创建字典。注意:如果我们取的键在字典中不存在,会直接报错 KeyError 。
通过构造函数 dict 来创建字典。
4)字典的内置方法
1. dict.fromkeys(seq[, value]) 用于创建一个新字典,以序列 seq 中元素做字典的键, value 为字典所有键对
应的初始值。
2.dict.keys() 返回一个可迭代对象,可以使用 list() 来转换为列表,列表为字典中的所有键。
3.dict.items() 以列表返回可遍历的 (键, 值) 元组数组。
4.dict.get(key, default=None) 返回指定键的值,如果值不在字典中返回默认值。
5.dict.setdefault(key, default=None) 和 get() 方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
6.key in dict in 操作符用于判断键是否存在于字典中,如果键在字典 dict 里返回 true ,否则返回 false 。而 not in 操作符刚好相反,如果键在字典 dict 里返回 false ,否则返回 true 。
7. dict.pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。 key 值必须给出。若 key不存在,则返回 default 值。
8. del dict[key] 删除字典给定键 key 所对应的值。
9.dict.popitem() 随机返回并删除字典中的一对键和值,如果字典已经为空,却调用了此方法,就报出KeyError异常。
10,dict.popitem() 随机返回并删除字典中的一对键和值,如果字典已经为空,却调用了此方法,就报出KeyError异常。
11.dict.copy() 返回一个字典的浅复制。
12.dict.update(dict2) 把字典参数 dict2 的 key:value 对 更新到字典 dict 里。
练习题:
1、字典基本操作
字典内容如下:
dic = {
'python': 95,
'java': 99,
'c': 100
}
- 字典的长度是多少
- 请修改’java’ 这个key对应的value值为98
- 删除 c 这个key
- 增加一个key-value对,key值为 php, value是90
- 获取所有的key值,存储在列表里
- 获取所有的value值,存储在列表里
- 判断 javascript 是否在字典中
- 获得字典里所有value 的和
- 获取字典里最大的value
- 获取字典里最小的value 字典
- dic1 = {‘php’: 97}, 将dic1的数据更新到dic中
1 dic = {'python': 95,'java': 99,'c': 100} 2 3 ##字典的长度是多少 4 print('字典的长度为:%d'%len(dic)) 5 6 7 #请修改'java' 这个key对应的value值为98 8 dic['java']=98 9 print(dic) 10 11 12 #删除 c 这个key 13 print(dic.pop('c'),dic) 14 15 #增加一个key-value对,key值为 php, value是90 16 dic['php']=90 17 print(dic) 18 19 #获取所有的key值,存储在列表里 20 a=list(dic.keys()) 21 print(a,type(a)) 22 23 # 获取所有的value值,存储在列表里 24 b=list(dic.values()) 25 print(b,type(b)) 26 27 # 判断 javascript 是否在字典中 28 print(dic.get('javascript ', "不存在")) 29 30 # - 获得字典里所有value 的和 31 b=list(dic.values()) 32 # - 获得字典里所有value 的和 33 b=list(dic.values()) 34 print(b) 35 result=0 36 for i in b: 37 result=i+result 38 print(result) 39 40 # - 获取字典里最大的value 41 b=list(dic.values()) 42 b.sort() 43 print(b[len(b)-1]) 44 45 # 获取字典里最小的value 46 b=list(dic.values()) 47 b.sort() 48 print(b[0]) 49 50 # dic1 = {'php': 97}, 将dic1的数据更新到dic中 51 dic1 = {'php': 97} 52 dic.update(dic1) 53 print(dic) 54 55 字典的长度为:3 56 {'python': 95, 'java': 98, 'c': 100} 57 100 {'python': 95, 'java': 98} 58 {'python': 95, 'java': 98, 'php': 90} 59 ['python', 'java', 'php'] <class 'list'> 60 [95, 98, 90] <class 'list'> 61 不存在 62 [95, 98, 90] 63 283 64 98 65 90 66 {'python': 95, 'java': 98, 'php': 97
2、有一个字典,保存的是学生各个编程语言的成绩,各门课程的考试成绩存储方式并不相同,有的用字典,有的用列表,但是分数都是字符串类型,请实现函数transfer_score(score_dict),将分数修改成int类型。
1 data = { 2 'python': {'上学期': '90', '下学期': '95'}, 3 'c++': ['95', '96', '97'], 4 'java': [{'月考':'90', '期中考试': '94', '期末考试': '98'}] 5 } 6 def transfer_score(data): 7 data['python']['上学期']=int(data['python']['上学期']) 8 data['python']['下学期']=int(data['python']['下学期']) 9 data['c++'][0]=int(data['c++'][0]) 10 data['c++'][1]=int(data['c++'][1]) 11 data['c++'][2]=int(data['c++'][2]) 12 data['java'][0]['月考']=int(data['java'][0]['月考']) 13 data['java'][0]['期中考试']=int(data['java'][0]['期中考试']) 14 data['java'][0]['期末考试']=int(data['java'][0]['期末考试']) 15 print(data) 16 transfer_score(data)