python编程 基础入门学习笔记二
本节内容:
1.字符串
2.列表
3.元组
4.字典
5.练习
1.字符串
字符串的方法:
>>> name="my name is Rose and I am 20 years old" >>> print(name.capitalize()) My name is rose and i am 20 years old
name.capitalize() 首字母大写
>>> print(name.count("a")) 4
name.count("a") 计算字符串中包含字母a的个数
>>> print(name.center(50,"-")) ------my name is Rose and I am 20 years old------- >>> print(name.center(20,"-")) my name is Rose and I am 20 years old
name.center(50,"-") name内存中的字符串长度(37),剩余13个字符用填充"-",将name内存中的字符串放在中间,两边均匀填满"-"
name.center(37,"-") name内存中的字符串长度(37),所以只存储name内存中的字符串
请自己比较print(name.ljust(50,'*'))和print(name.rjust(50,'*'))
>>> print(name.endswith("ex")) False
name.endswith("ex") 判断字符串是否以"ex"结尾,是返回True,否则返回False
>>> name="my \tname is Rose and I am 20 years old" >>> print(name.expandtabs(tabsize=30)) my name is Rose and I am 20 years old
name.expandtabs(tabsize=30) 在有tab键的地方用30个tab键替换,如果tabsize未赋值,则默认为8个tab
>>> print(name.find("Rose"))#字符串和列表一样可以切片 12
name.find("name")找到"Rose"字符串在name中的位置,返回的值12是"Rose"的起始位置
>>> name="my \tname is {name} and I am {year} old" >>> print(name.format(name='Jack',year=23)) my name is Jack and I am 23 old
name.format(name='Jack',year=23) 为{}里的字符串赋值
>>> print(name.format_map({'name':'Jone','year':12})) my name is Jone and I am 12 old
name.format_map({'name':'Jone','year':12}) 以字典映射的方式{}里的字符串赋值
>>> print(name.isalnum()) False >>> print('abc123'.isalnum()) True
name.isalnum()、'abc123'.isalnum() 字符串中是否包含数字,包含则返回True,不包含则返回False
>>> print('aA'.isalpha()) True >>> print('aA1'.isalpha()) False
判断字符串是否为全为字母,是则返回True,否则返回False
>>> print('a 1A'.isidentifier())#判断是不是一个合法的标识符 False
判断给出的字符串是否是合适的标识符,合法返回True,不合法则返回False
>>> print('aa'.islower()) True >>> print('aA'.isupper()) False
判断大小写,比较容易理解,不赘述了,请自己练习print('aa'.upper())、print('aA'.lower)
>>> print('33.33'.isnumeric()) False >>> print('33'.isnumeric()) True >>> print('33a'.isnumeric()) False
判断是不是整数数字,是返回True,否则返回False
>>> print(' '.isspace()) True
判断空格键,是返回True,否则返回False
>>> print('My Name Is '.istitle()) True >>> print('My Name is '.istitle()) False
判断是否为标题,主要是看那个单词的首字母是否大写
>>> print('+'.join(['1','2','3'])) 1+2+3
用'+'连接各个字符串
>>> print('\nhello\n'.lstrip()) hello >>> print('\nhello\n'.rstrip()) hello >>> print('\nhello\n'.strip()) hello
lstirp()去除左换行,rstrip()去除右换行,strip()去除左右换行
>>> p=str.maketrans("abcdef",'123456') >>> print("Jack".translate(p)) J13k
用于加密或替换字符
2.列表
>>> names=["Rose","Jack","Jone","Peter","David"] >>> print(names) ['Rose', 'Jack', 'Jone', 'Peter', 'David'] >>> print(names[::2]) ['Rose', 'Jone', 'David']
names就是一个列表,存了5个字符串
>>> import copy >>> names=["Rose",["Jack","Jill"],"Jone","Peter","David"] >>> names2=copy.deepcopy(names)#深拷贝,占独立的内存空间 >>> print(names) ['Rose', ['Jack', 'Jill'], 'Jone', 'Peter', 'David'] >>> print(names2) ['Rose', ['Jack', 'Jill'], 'Jone', 'Peter', 'David'] >>> names3=names.copy()#浅拷贝,只拷贝第一层,第二层以上只拷贝了内存地址 >>> print(names3) ['Rose', ['Jack', 'Jill'], 'Jone', 'Peter', 'David'] >>> names[2]="乔恩" >>> names[1][0]="杰克" >>> print(names) ['Rose', ['杰克', 'Jill'], '乔恩', 'Peter', 'David'] >>> print(names2) ['Rose', ['Jack', 'Jill'], 'Jone', 'Peter', 'David'] >>> print(names3) ['Rose', ['杰克', 'Jill'], 'Jone', 'Peter', 'David']
深拷贝和浅拷贝,深拷贝:占独立的内存空间;#浅拷贝:只拷贝第一层,第二层以上只拷贝了内存地址
所以深拷贝过来的name2中的第二层names2[1][0]仍然保持着"Jack",第一层names2[2]仍然保持着"Jone";而浅拷贝过来的names3中的names3[1][0]随着重新赋值变为"杰克",只有第一层names3[2]仍然保持着"Jone"
>>> names.append('Lily') >>> print(names) ['Rose', ['杰克', 'Jill'], '乔恩', 'Peter', 'David', 'Lily']
append()方法,用来向已有列表添加新的元素
>>> names.insert(1,'Judy') >>> print(names) ['Rose', 'Judy', ['杰克', 'Jill'], '乔恩', 'Peter', 'David', 'Lily']
names.insert(1,'Judy') 在位置1处插入新的元素"judy",原来的1位置元素会向后移动,原来1位置后面的元素都会相应向后移动
>>> del names[1] >>> print(names) ['Rose', ['杰克', 'Jill'], '乔恩', 'Peter', 'David', 'Lily'] >>> names.pop(5) 'Lily' >>> print(names) ['Rose', ['杰克', 'Jill'], '乔恩', 'Peter', 'David']
删除列表元素有两种常用方法,del names[N]和names.pop(N) , 其中N为列表元素的位置
>>> names.remove('David') >>> print(names) ['Rose', ['杰克', 'Jill'], '乔恩', 'Peter']
删除列表元素的另外一种方法,names.remove('David') , 其中括号内需要指定字符串
>>> names.index('Peter') 3
index查找列表元素对应的索引
>>> names ['Rose', ['杰克', 'Jill'], '乔恩', 'Peter', 'Rose'] >>> print(names.count("Rose")) 2
count方法统计指定列表元素的数目
>>> nums=[3,2,4,5,1] >>> nums.sort() >>> nums [1, 2, 3, 4, 5]
sort方法是用来对列表进行排序,当有嵌套列表时不可以直接使用sort方法
>>> names.extend(nums) >>> names ['Rose', ['杰克', 'Jill'], '乔恩', 'Peter', 'Rose', 1, 2, 3, 4, 5]
extend方法将列表nums向列表names中扩展
>>> names ['Rose', ['杰克', 'Jill'], '乔恩', 'Peter', 'Rose', 1, 2, 3, 4, 5] >>> print(names[1:3])#切片 [['杰克', 'Jill'], '乔恩'] >>> print(names[3]) #从左边数0...... Peter >>> print(names[-7])#从右边数-1...... Peter >>> >>> print(names[-3:-1]) [3, 4] >>> print(names[-2:])#默认从左向右数到-1 [4, 5] >>> print(names[:6])#默认由0从左向右数到6 ['Rose', ['杰克', 'Jill'], '乔恩', 'Peter', 'Rose', 1]
列表切片的几种方法,在今后会经常用到,请熟练掌握
>>> names.clear() >>> names []
clear方法是清空列表,但是names列表仍然存在,只是内容为空
3.元组
>>> names=('Rose','Jack') >>> print(names.count('Rose')) 1 >>> print('Rose') Rose
元组,只能查不能改,它只有2个方法:count和index(这两个方法同列表中的count和index)
4.字典
最简单的字典示例:
>>> info={ 'stu1101':"Rose", 'stu1102':"Jack", 'stu1103':"Peter"} >>> print(info) {'stu1102': 'Jack', 'stu1103': 'Peter', 'stu1101': 'Rose'}
上述info就称为字典,'stu1101','stu1102','stu1103'称为字典的key,'Rose','Jack','Peter'称为字典的value
>>> print(info["stu1101"]) Rose >>> info["stu1101"]="露丝" >>> print(info) {'stu1102': 'Jack', 'stu1103': 'Peter', 'stu1101': '露丝'}
查:info['stu1101'] ,通过字典key获取对应存储的value值,
改:info['stu1101']="露丝" ,重写key对应存储的value值
>>> info["stu1104"]="tata" >>> print(info) {'stu1102': 'Jack', 'stu1103': 'Peter', 'stu1104': 'tata', 'stu1101': '露丝'}
增:info['stu1104']="tata",添加新的键(key)及并赋值(value)为"tata"
>>> del info["stu1104"] >>> print(info) {'stu1102': 'Jack', 'stu1103': 'Peter', 'stu1101': '露丝'}
删:del info['stu1104'],删除键(key)'stu1104'
>>> info.pop("stu1103") 'Peter' >>> print(info) {'stu1102': 'Jack', 'stu1101': '露丝'}
pop是另外一种删除的方法,还有一种随机删除方法:info.popitem() #随机删除
>>> print(info) {'stu1102': 'Jack', 'stu1101': '露丝'} >>> print(info.get("stu1104")) None >>> print(info.get("stu1101")) 露丝
安全获取键对应的value值,所谓安全就是即使该键不存在也不会报错,而是返回None;而info['stu1104'],由于键的不存在会报错
>>> print("stu1104" in info) False
判断键在字典中是否存在,存在返回True,不存在则返回False。注意,在py2.x中的语法是 info.has_key("stu1104")
>>> info {'stu1102': 'Jack', 'stu1101': '露丝'} >>> b={ 'stu1101':'Lily', 'teacher':'Jone'} >>> info.update(b) >>> info {'stu1102': 'Jack', 'teacher': 'Jone', 'stu1101': 'Lily'}
update方法:有则更新,无则添加
>>> c=dict.fromkeys([6,7,8],[1,{'name':'Jack'},444])
>>> print(c)
{8: [1, {'name': 'Jack'}, 444], 6: [1, {'name': 'Jack'}, 444], 7: [1, {'name': 'Jack'}, 444]}
初始化一个新的字典:6,7,8为字典的key,对应的value均是[1,{'name':'Jack'},444]
>>> c[7][1]['name']='Jack Chen' >>> c {8: [1, {'name': 'Jack Chen'}, 444], 6: [1, {'name': 'Jack Chen'}, 444], 7: [1, {'name': 'Jack Chen'}, 444]}
三个共享一个内存地址,所以修改一个三个值都改变
>>> info.items() dict_items([('stu1102', 'Jack'), ('teacher', 'Jone'), ('stu1101', 'Lily')])
将字典转为列表
>>> for k,v in info.items(): print(k,v) stu1102 Jack teacher Jone stu1101 Lily
先把字典转列表,然后再取出key和value的值,当数据量变大后,效率比较低,很慢,因为占用了很大的内存
>>> for i in info: print(i,info[i]) stu1102 Jack teacher Jone stu1101 Lily
直接从字典取值——高效,实际应用中推荐使用这种字典取值方法
5.练习
购物车
用户入口
1.商品信息存在文件里
2.已购商品,余额记录,永久留存(只有第一次需要输入工资)
商家入口
1.商品信息存在文件里
2.可以添加商品,修改商品价格
浙公网安备 33010602011771号