周日,多云,记录生活分享点滴
参考博客:https://www.cnblogs.com/yuanchenqi/articles/5782764.html
Python版本:3.5
嵌套基本逻辑
a = [[1,2,3],"chung",4,(5,6,7)] #print(a) print (a[0][1])#取[2] print (a[3][1])#查(6),元组可以被查询,但不能被修改
Shopping
用户将商品添加到购物车并购买的程序
product_list = [ ('Mac', 9000), ('kindle', 800), ('tesla', 900000), ('python book', 105), ('bike', 2000), ] saving = input('please input your money:') shopping_car = [] if saving.isdigit(): saving = int(saving) while True: for i, v in enumerate(product_list, 1): print(i, '>>>>', v) choice = input('选择购买商品编号[退出:q]:') if choice.isdigit(): choice = int(choice) if choice > 0 and choice <= len(product_list): p_item = product_list[choice - 1] if p_item[1] < saving: saving -= p_item[1] shopping_car.append(p_item) else: print('余额不足,还剩%s' % saving) print(p_item) else: print('编码不存在') elif choice == 'q': print('------------您已经购买如下商品----------------') for i in shopping_car: print(i) print('您还剩%s元钱' % saving) break else: print('invalid input')
Shopping 解析版
#首先将商品数据储存到一个列表中(通过嵌套方式) product_list=[ #商品信息用元组或列表表示,目的是把多个信息作为一个元素存储 ('Mac',9000), ('kindle',800), ('tesla',900000), ('python book',105), ('bike',2000), ] #目前把商品信息存储到一个大的list里面了 #用一个变量代表现在拥有多少钱 saving=input('please input your money:') shopping_car=[] #有变量之后需要对变量做一个校验,通过 .isdigit 判断输入内容是否为纯数字 if saving.isdigit(): #如果是数字,将字符串转成整型,为后面加减法做准备 saving=int(saving) while True: #while True 的目的是需要反复给用户提供商品列表进行选择 #接下来是具体内容: #通过for循环打印商品内容 for i,v in enumerate(product_list,1): ##enumerate(列举),表示在列表中以“1”的位置开始,起到加序号作用 print(i,'>>>>',v) #引导用户选择商品 choice=input('选择购买商品编号[退出:q]:') #验证输入是否合法 if choice.isdigit(): choice=int(choice) if choice>0 and choice<=len(product_list): ##len所对应的值是列表的长度 #验证无问题,需要做两件事 #第一:将用户选择商品通过choice取出来 p_item=product_list[choice-1] #如果钱够,用本金saving减去该商品价格,并将该商品加入购物车 if p_item[1]<saving: saving-=p_item[1] shopping_car.append(p_item) else: print('余额不足,还剩%s'%saving) print(p_item) else: print('编码不存在') elif choice=='q': print('------------您已经购买如下商品----------------') #循环遍历购物车里的商品,购物车存放的是已买商品 for i in shopping_car: print(i) print('您还剩%s元钱'%saving) break else: print('invalid input')
字典
两大特点:无序、键唯一
数据类型
- 不可变类型:整型,字符串,元组
- 可变类型:列表,字典
创建字典
第一种,常用创建方法
dic={'name':'alex'}
第二种,不常用创建方法
dic1={} dic2=dict((('name','alex'),)) #从外往里:第一组括号是dict本身携带的,第二组括号代表序列,第三组括号代表键值对。第二三组括号可以是一个列表也可以是一个元组。 print(dic2)
第三种,不常用创建方法
dic3=dict([['name','alex'],]) print(dic3)
增
第一种:如果有,做修改;如果没有,做创建
dic1={'name':'alex'} dic1['age']=18 print(dic1)
第二种:键存在,不改动,返回字典中相应的键对应的值
dic1={'name':'alex'} ret=dic1.setdefault('age',34) print(ret)
第三种:键不存在,在字典中中增加新的键值对,并返回相应的值
dic1={'name':'alex'} ret2=dic1.setdefault('hobby','girl') print(dic1) print(ret2)
查
第一种:通过键去查找
dic3={'age': 18, 'name': 'alex', 'hobby': 'girl'} print(dic3['name'])
第二种:通过list来将 dic3.keys() 的结果转换成列表式结果 keys()/values()/items()
dic3={'age': 18, 'name': 'alex', 'hobby': 'girl'} print(list(dic3.keys())) #输出的是键 print(list(dic3.values())) #输出的是值 print(list(dic3.items())) #输出的是元组,键与值的组合
改
第一种:
dic3={'age': 18, 'name': 'alex', 'hobby': 'girl'} dic3['age']=55 print(dic3)
第二种: .update 如果原来有,覆盖掉,如果没有,做创建
dic4={'age': 18, 'name': 'alex', 'hobby': 'girl'} dic5={'1':'111','2':'222'} #做创建 dic5={'1':'111','name':'222'} #覆盖掉 dic4.update(dic5) print(dic4) print(dic5)
删
第一种:清空字典
dic5 = {'name': 'chung', 'age': 18, 'class': 1} dic5.clear() print(dic5)
第二种:删除字典中指定键值对
dic5 = {'name': 'alex', 'age': 18, 'class': 1} del dic5['name'] print(dic5)
第三种:删除字典中指定键值对,并返回该键值对的值
dic5 = {'name': 'alex', 'age': 18, 'class': 1} print(dic5.pop('age')) ret=dic5.pop('age') print(ret) print(dic5)
第四种:随机删除某组键值对,并以元组方式返回值
dic5 = {'name': 'alex', 'age': 18, 'class': 1} a = dic5.popitem() print(a, dic5)
第五种:删除整个字典
dic5 = {'name': 'alex', 'age': 18, 'class': 1} del dic5 print(dic5)
其他操作以及涉及到的方法
dict.fromkeys方法
dic6=dict.fromkeys(['host1','host2','host3'],'test') print(dic6) #{'host3': 'test', 'host1': 'test', 'host2': 'test'}
以下涉及深浅拷贝的一点知识
dic6=dict.fromkeys(['host1','host2','host3'],['test1','tets2']) print(dic6) #{'host2': ['test1', 'tets2'], 'host3': ['test1', 'tets2'], 'host1': ['test1', 'tets2']} dic6['host2'][1]='test3' print(dic6) #{'host3': ['test1', 'test3'], 'host2': ['test1', 'test3'], 'host1': ['test1', 'test3']}
字典的嵌套
在修改前进行查询,查询时遇到字典就用键,遇到列表就用位置
城市 = { "一线":{ "北京": ["故宫","颐和园"], "上海": ["迪士尼"], }, "二线":{ "杭州":["西湖","其他的?求补充"], "南京":["夫子庙","秦淮河"], } } 城市['二线']["杭州"][1]='雷峰塔' print(城市['二线']["杭州"])
排序
dic={5:'555',2:'666',4:'444'} print(sorted (dic)) #根据键来排序,显示键 print(sorted(dic.values())) #根据值来排序,显示值 print(sorted(dic.items())) #根据键来排序,显示键值对 dic.has_keys(5) print(5 in dic)
字典的遍历
第一种:效率高
dic5={'name': 'alex', 'age': 18} for i in dic5: print(i) #默认循环字典里面的键 for i in dic5: print(i,dic5[i])+ #打印字典里面的键和值
第二种:效率低,转化步骤偏多
dic5={'name': 'alex', 'age': 18} for i,v in dic5.items(): print(i,v) #打印字典里面的键值对,当只有一个变量i时,则打印元组形式的键值对
String 字符串
字符串操作
第一种:双引号与单引号无区别,但是在特殊情况下注意区分
a="Let's go " print(a)
第二种: * 重复输出字符串
print('hello'*20)
第三种: [] ,[:] 通过索引获取字符串中字符,这里和列表的切片操作是相同的,具体内容见列表
print('helloworld'[2:])
第四种:判断in前面内容是否在后面内容中
print(123 in [23,45,123]) print('e2l' in 'hello')
第五种: % 格式字符串
print('alex is a good teacher') print('%s is a good teacher'%'alex')
第六种:拼接
# 第一个 join 用字符串将a,b,d拼接,效率高 c= ''.join([a,b,d]) print(c) # 第二个 效率低 a='123' b='abc' d='44' c=a+b print(c)
String的内置方法
常用字符串内置方法:
st='hello kitty {name} is {age}' print(st.count('l')) #统计元素个数 print(st.center(50,'#')) #居中 print(st.startswith('he')) #判断是否以某个内容开头 print(st.find('t')) #查找到第一个元素,并将索引值返回 print(st.format(name='alex',age=37)) #格式化输出的另一种方式 print('My tLtle'.lower()) #大写变小写 print('My tLtle'.upper()) #小写变大写 print(' My tLtle '.strip()) #只处理文本内容(左右两边),跳过空格、换行符 print('My title title'.replace('itle','lesson',1)) #将字符串内容进行替换,1表示在有多个相同内容的时候,只替换一次 print('My title title'.split('i',1)) #以左为准,分割对象(i)把字符串分割成列表,分割一次
其他字符串内置方法
st='hello kitty {name} is {age}' print(st.count('l')) #统计元素个数 print(st.capitalize()) #首字母大写 print(st.center(50,'#')) #居中 print(st.endswith('tty3')) #判断是否以某个内容结尾 print(st.startswith('he')) #判断是否以某个内容开头 print(st.expandtabs(tabsize=20)) #规定字符串中的空格数 print(st.find('t')) #查找到第一个元素,并将索引值返回 print(st.format(name='alex',age=37)) #格式化输出的另一种方式 print(st.format_map({'name':'alex','age':22})) #字典也可表示格式化输出 print(st.index('t')) #正常状况下同find输出一样 print('asd'.isalnum()) #判断是否包含字母或数字,汉字也可以 print('12632178'.isdecimal()) #判断是否为十进制的数 print('1269999.uuuu'.isnumeric()) #判断是否只由数字组成 print('abc'.isidentifier()) #判断是否满足标识符定义规则。标识符定义规则为:只能是字母或下划线开头、不能包含除数字、字母和下划线以外的任意字符。 print('Abc'.islower()) #判断是否为全小写 print('ABC'.isupper()) #判断是否为全大写 print(' e'.isspace()) #判断是否是空格 print('My title'.istitle()) #判断首字母是否是大写 print('My tLtle'.lower()) #大写变小写 print('My tLtle'.upper()) #小写变大写 print('My tLtle'.swapcase()) #大写变小写,同时小写变大写 print('My tLtle'.ljust(50,'*')) # *依次向左补充,推动字符串至最左端 print('My tLtle'.rjust(50,'*')) # *依次向右补充,推动字符串至最右端 print(' My tLtle '.strip()) #只处理文本内容(左右两边),跳过空格、换行符 print(' My tLtle '.lstrip()) #只处理文本内容(左边),跳过空格、换行符 print(' My tLtle '.rstrip()) #只处理文本内容(左边),跳过空格、换行符 print('My title title'.replace('itle','lesson',1)) #将字符串内容进行替换,1表示在有多个相同内容的时候,只替换一次 print('My title title'.rfind('t')) #从右往左的第一个t的索引位置 print('My title title'.split('i',1)) #以左为准,分割对象(i)把字符串分割成列表,分割一次 print('My title title'.title()) #按照起始字符的格式将后面变成统一格式