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)

 

posted on 2020-12-25 00:20  Mindy-snail  阅读(87)  评论(0编辑  收藏  举报