第二章
二进制、字符编码、数据类型 :
二进制:省略
字符编码:
中文 GB2312 GBK GB18030
BIG5(繁体)
统一字符编码:unicode utf-8
在python2中默认不支持中文,需要在开头声明编码格式为UTF-8
数据类型:
列表:
语法 [ ]
列表是一个数据集合,集合内可以放各种数据类型
可以进行创建/查询/切片/增加/删除/修改/循环/排序
创建:
name = ['zhangsan','lisi','wangwu',1,2,3,4,5,2,2]
查询:
name[0] #取列表第一个
name[-1] #取列表最后一个
name.index('wangwu') #元素的索引值,当有重复的元素时只会返回第一个元素的索引值
name.count(2) #对同一元素计数
切片:
name[0:2] name[-5:-1] #切片只能从左往右切
增加:
追加:
name.append(2333)
插入:
name.insert(2,'wilbur') #在name[2]前插入元素‘wilbur’
替换(修改):
name[3] = 'zzz'
删除:
name.pop() #删除末尾 name.remove('zhangsan') #删除指定元素 del name[2] #全局删除 del name[2:6] #切片删除
循环:
for i in name: print(i)
排序:
name.sort() 不同数据类型不能混排
排序规则为ASCII码顺序
倒序:
name.reverse()
扩展:
name+n2
name.expend(n2)
清空:
name.clear()
copy(文本复制):
n2 = name.copy()
列表练习:
循环列表names,打印每个元素的索引值和元素,当索引值为偶数时,把对应的元素改为-1
names = ['zhangsan','lisi','wangwu','zhaoliu','shanshan','alex'] for index,i in enumerate(names): if index%2 == 0: names[index] = -1 print(index, i) print(names)
列表中包含多个2,返回第二个2的索引值
names = ['zhangsan','lisi','wangwu','zhaoliu','shanshan','alex',3,45,24,6,2,546,2] names2 = names[names.index(2)+1:] #获取第一个2的索引值后加一 print(names2.index(2)+names.index(2)+1) #打印第二个2的索引值
最后一个是购物车程序:
写一个循环,不断的问用户想买什么,用户选择一个商品编号,就把对应的商品添加到购物车里, 最终用户输入q退出时,打印购物车里的商品列表
1 # author:wilbur0402 2 products = [['Iphone8', 6888], ['MacPro', 14800], ['小米6', 2499], ['Coffee', 31], ['Book', 80], ['Nike Shoes', 799]] 3 4 shopping_cart = [] 5 while True: 6 print('------products list------') 7 for index,i in enumerate(products): 8 print('%s.%s %s'%(index,i[0],i[1])) 9 chioce = input('请输入你需要购买的序号:(0-5)') 10 if chioce.isdigit(): 11 chioce = int(chioce) 12 if chioce >= 0 and chioce < len(products): 13 shopping_cart.append(products[chioce]) 14 print('added %s to shopping cart!'%products[chioce][0]) 15 else: 16 print('商品不存在!') 17 elif chioce == 'q': 18 print('------你已购买以下商品------') 19 for index, i in enumerate(shopping_cart): 20 print('%s.%s %s' % (index, i[0], i[1])) 21 break 22 else: 23 print('输入有误!')
之前做这种题完全没有思路,各种需求混为一谈。在此我介绍一下我的方法:
1.先做出最基本的功能
这个练习最基本的功能就是:打印商品列表——用户输入——打印输入购买的商品
2.增加循环功能:
增加死循环,使其能不断询问用户
3.增加判断功能:
当用户输入为q时,退出并打印已购列表,或者当用户输入不正确时,返回信息
总结一句话就是:
基本功能——增加功能——完善功能
字符串操作:
# author:wilbur0402 name = 'my name is {nm} and im {yr}year old' print(name.capitalize())#首字母大写 print(name.count('a'))#统计字符中a的个数 print(name.center(50,'-'))#字符居中填充,,输出50个字符,字符不够用-补上 print(name.endswith('an'))#判断字符串是否以an结尾 print(name.expandtabs(tabsize=30))#将 转为30个空格 print(name.find('name'))#查找字符位置 用来切片 print(name.format(nm='zhangsan',yr=21)) print('wilbur0402'.isalnum())#判断是否只包含数字和字母 print(name.isalpha())#判断是否为纯英文字母 print(name.isdigit())print('1a'.isidentifier())#判断是否为合法的标识符(变量名称) print('My Name Is'.istitle())#判断是否为标题 print('My Name Is'.isupper())#判断全为小写 print('My Name Is'.islower()) print('My Name Is'.upper())#将小写修改为大写 print('My Name Is'.lower()) print(','.join(['zhangsan','lisi','wangwu']))#列表转进字符串中 print(name.ljust(50,'*'))#字符居左填充,输出50个字符,字符不够右侧用*补上 print(name.rjust(50,'*'))#字符居右填充,输出50个字符,字符不够右侧用*补上 print(' My Name Is '.lstrip())#去掉左侧换行或空格 print(' My Name Is '.rstrip()) print(' My Name Is '.strip())#去掉两侧换行或空格 p = str.maketrans('abcdef','123456')#对应 print('zhangsan'.translate(p))#传入 print("zhangsan".replace('a','A',1))#替换 print('zhangsan'.rfind('n'))#返回n最右边的那个的下标 print('zhang san'.split('a'))#将字符串按a分成列表 print('zhang san'.splitlines()) print('ZhangSan'.swapcase())#反向大小写 print('zhangsan'.title())#标题化 print('zhangsan'.zfill(50))
以上为字符串的基本方法,不必全部记忆,强调几个常用的方法:
'zhangsan'.isdigit() #判断是否为数字 'zhangsan'.replace('a','A',1) #替换 'zhangsan'.find('a') #查找字符并返回下标,无则返回-1 'zhangsan'.count('a') #对字符计数 ' My Name Is '.strip() #去掉两侧换行或空格 'zhangsan'.center(50,'-') #字符居中以“-”填充,输出50个字符 'zhang san'.split('a') #将字符串按a分成列表,a不再显示 'my name is {nm} and im {yr}year old'.format(nm='zhangsan',yr=21) #格式化 '-'.join(['zhangsan','lisi','wangwu'])#列表转字符串,用-连接元素
元组:
类似于列表的数据类型,可以计数,切片,查找索引,但是不能修改内容
字典:
字典是一种key-value格式的数据类型
字典的特征:key-value格式;key可hash,且唯一的不可变数据类型;可存放多个不唯一的可修改的数据;字典是无序的;查找速度快
字典操作:
1 #字典为key-value类型,无序 2 info = { 3 'stu1101' : "zhangsan", 4 'stu1102' : "lisi", 5 'stu1103' : "wangwu", 6 } 7 print(info) 8 print(info['stu1101']) 9 info['stu1101']='张三'#修改 10 11 12 info['stu1104']='zhaoliu'#增加 13 print(info) 14 del info['stu1101']#删除 15 info.pop('stu1102') 16 print(info) 17 info.popitem()#随机删除 18 print(info) 19 info = { 20 'stu1101' : "zhangsan", 21 'stu1102' : "lisi", 22 'stu1103' : "wangwu", 23 } 24 print(info.get('stu1104'))#尝试获取(安全地获取) 25 print('stu1103' in info)#查找是否存在 26 info.items()#返回k-v的列表形式 27 info.update() 28 info.formkey()
字典练习题:
1 >>> dict = {'k1':'v1','k2':'v2','k3':'v3'} 2 >>> for k in dict: 3 ... print(k) 4 ... 5 k1 6 k2 7 k3 8 #遍历所有的key 9 >>> for k in dict: 10 ... print(dict[k]) 11 ... 12 v1 13 v2 14 v3 15 #遍历所有的value 16 >>> for k in dict: 17 ... print(k,dict[k]) 18 ... 19 k1 v1 20 k2 v2 21 k3 v3 22 #遍历所有的key与value 23 >>> dict['k4'] = 'v4' 24 >>> dict 25 {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'} 26 #添加键值对'k4':'v4',并输出添加后的字典 27 >>> dict.pop('k1') 28 'v1' 29 >>> dict 30 {'k2': 'v2', 'k3': 'v3', 'k4': 'v4'} 31 #删除键值对 k1 ,并输入删除后的字典
32>>> print(dict.pop('k5',None))
33None
#尝试删除K5,K5存在则删除,不存在则返回None
一行实现修改value和添加k-v:
>>> dict = {'k2': 'v2', 'k3': 'v3', 'k4': 'v4'}
>>> dict.update({'k1':'v1','k2':'v22222'})
>>> dict {'k2': 'v22222', 'k3': 'v3', 'k4': 'v4', 'k1': 'v1'}
下面的不再赘述,小写变大写可以用swapcase,upper更改,替换可以使用replace和 = 赋值来完成替换。
集合:
无序,不重复的数据总和
作用:去重,关系测试
集合的方法:
list_1 = [1,3,53,21,64]#此为列表 list_1 = set(list_1)#列表转换为集合 print(list_1,type(list_1)) list_2 = [34,3,76,1,98] print(list_1,list_2) 交集 print(list_1.intersection(list_2)) 并集 print(list_1.union(list_2)) 差集 print(list_1.difference(list_2))#在集合1中与集合2不同的元素 对称差集 print(list_1.symmetric_difference(list_2))#集合1与集合2中都不相同的元素 判断子集 list_3 = set([1,3]) print(list_3.issubset(list_1)) 判断父集 print(list_1.issuperset(list_3)) 判断是否有交集 print(list_1.isdisjoint(list_2))#Return True if two sets have a null intersection. 添加一项 list_1.add(999) print(list_1) 添加多项 list_1.update([999,888,777]) print(list_1) 删除一项 list_1.remove(999) print(list_1) 长度 print(len(list_1)) 判断是否是集合的元素 print(888 in list_1) 判断是否不是集合的元素 print(888 not in list_1) 任意删除一项 print(list_1.pop()) print(list_1.pop()) 尝试删除一项 print(list_1.discard(1))
附上这次的大作业,花费1天半写出来的。。。
# author:wilbur0402
# 带用户登录的购物车程序
goods = [['电脑', 9999], ['大保健', 998], ['iPhone X', 8688], ['煎饼果子多加个蛋', 5]] user = { 'zhangsan': 'aaa111', 'lisi': 'bbb222', 'wangwu': 'ccc333', 'alex': 'abc123' } while True: # 用户登录死循环 username = input('please input your username:') password = input('please input your password:') if username in user and password == user[username]: # 判断账号密码正确性 print('