小虫的python路-第一个脚印-4

周日,多云,记录生活分享点滴

参考博客:https://www.cnblogs.com/yuanchenqi/articles/5782764.html

Python版本:3.5

目录:

1.嵌套基本逻辑

2.shopping 用户将商品添加到购物车并购买的程序

3.shopping 解析版

4.字典

1)数据类型

2)创建字典

3)增

4)查

5)改

6)删

7)其他操作以及涉及到的方法

8)字典的嵌套

9)排序

10)字典的遍历

5.String 字符串

1)字符串操作

2)String的内置方法

--

1.嵌套基本逻辑

1 a = [[1,2,3],"chung",4,(5,6,7)]
2 #print(a)
3 print (a[0][1])#取[2]
4 print (a[3][1])#查(6),元组可以被查询,但不能被修改

2.shopping 用户将商品添加到购物车并购买的程序

 1 product_list = [
 2     ('Mac', 9000),
 3     ('kindle', 800),
 4     ('tesla', 900000),
 5     ('python book', 105),
 6     ('bike', 2000),
 7 ]
 8 saving = input('please input your money:')
 9 shopping_car = []
10 if saving.isdigit():
11     saving = int(saving)
12     while True:
13         for i, v in enumerate(product_list, 1):
14             print(i, '>>>>', v)
15         choice = input('选择购买商品编号[退出:q]:')
16         if choice.isdigit():
17             choice = int(choice)
18             if choice > 0 and choice <= len(product_list):
19                 p_item = product_list[choice - 1]
20                 if p_item[1] < saving:
21                     saving -= p_item[1]
22                     shopping_car.append(p_item)
23                 else:
24                     print('余额不足,还剩%s' % saving)
25                 print(p_item)
26             else:
27                 print('编码不存在')
28         elif choice == 'q':
29             print('------------您已经购买如下商品----------------')
30             for i in shopping_car:
31                 print(i)
32             print('您还剩%s元钱' % saving)
33             break
34         else:
35             print('invalid input')

3.shopping 解析版

 1 #首先将商品数据储存到一个列表中(通过嵌套方式)
 2 product_list=[
 3 #商品信息用元组或列表表示,目的是把多个信息作为一个元素存储
 4     ('Mac',9000),
 5     ('kindle',800),
 6     ('tesla',900000),
 7     ('python book',105),
 8     ('bike',2000),
 9 ]
10 #目前把商品信息存储到一个大的list里面了
11 
12 #用一个变量代表现在拥有多少钱
13 saving=input('please input your money:')
14 shopping_car=[]
15 #有变量之后需要对变量做一个校验,通过 .isdigit 判断输入内容是否为纯数字
16 if saving.isdigit():  
17     #如果是数字,将字符串转成整型,为后面加减法做准备
18     saving=int(saving)  
19     
20     while True:  #while True 的目的是需要反复给用户提供商品列表进行选择
21 
22         #接下来是具体内容:
23         #通过for循环打印商品内容
24         for i,v in enumerate(product_list,1):  ##enumerate(列举),表示在列表中以“1”的位置开始,起到加序号作用
25             print(i,'>>>>',v)
26 
27         #引导用户选择商品
28         choice=input('选择购买商品编号[退出:q]:')
29         
30         #验证输入是否合法
31         if choice.isdigit():
32             choice=int(choice)
33             if choice>0 and choice<=len(product_list):  ##len所对应的值是列表的长度
34 
35                 #验证无问题,需要做两件事
36                 #第一:将用户选择商品通过choice取出来
37                 p_item=product_list[choice-1]
38 
39                 #如果钱够,用本金saving减去该商品价格,并将该商品加入购物车
40                 if p_item[1]<saving:
41                     saving-=p_item[1]
42                     shopping_car.append(p_item)
43 
44                 else:
45                     print('余额不足,还剩%s'%saving)
46                 print(p_item)
47             else:
48                 print('编码不存在')
49         elif choice=='q':
50             print('------------您已经购买如下商品----------------')
51             
52             #循环遍历购物车里的商品,购物车存放的是已买商品
53             for i in shopping_car:
54                 print(i)
55             print('您还剩%s元钱'%saving)
56             break
57         else:
58             print('invalid input')

4.字典

两大特点:无序、键唯一

1)数据类型

  • 不可变类型:整型,字符串,元组
  • 可变类型:列表,字典

2)创建字典

第一种,常用创建方法

扫描二维码关注公众号,回复: 11213347 查看本文章
1 dic={'name':'alex'}

第二种,不常用创建方法

1 dic1={}
2 dic2=dict((('name','alex'),)) #从外往里:第一组括号是dict本身携带的,第二组括号代表序列,第三组括号代表键值对。第二三组括号可以是一个列表也可以是一个元组。
3 print(dic2)

第三种,不常用创建方法

1 dic3=dict([['name','alex'],])
2 print(dic3)

 

3)增

第一种:如果有,做修改;如果没有,做创建

1 dic1={'name':'alex'}
2 dic1['age']=18
3 print(dic1)

第二种:键存在,不改动,返回字典中相应的键对应的值

1 dic1={'name':'alex'}
2 ret=dic1.setdefault('age',34)
3 print(ret)

第三种:键不存在,在字典中中增加新的键值对,并返回相应的值  

1 dic1={'name':'alex'}
2 ret2=dic1.setdefault('hobby','girl')
3 print(dic1)
4 print(ret2)

4)查

第一种:通过键去查找

1 dic3={'age': 18, 'name': 'alex', 'hobby': 'girl'}
2 print(dic3['name'])

第二种:通过list来将 dic3.keys() 的结果转换成列表式结果 keys()/values()/items()

1 dic3={'age': 18, 'name': 'alex', 'hobby': 'girl'}
2 print(list(dic3.keys())) #输出的是键
3 print(list(dic3.values())) #输出的是值
4 print(list(dic3.items())) #输出的是元组,键与值的组合

5)改

第一种:

1 dic3={'age': 18, 'name': 'alex', 'hobby': 'girl'}
2 dic3['age']=55
3 print(dic3)

第二种: .update 如果原来有,覆盖掉,如果没有,做创建

1 dic4={'age': 18, 'name': 'alex', 'hobby': 'girl'}
2 dic5={'1':'111','2':'222'} #做创建
3 dic5={'1':'111','name':'222'} #覆盖掉
4 dic4.update(dic5)
5 print(dic4)
6 print(dic5)

6)删

第一种:清空字典

1 dic5 = {'name': 'chung', 'age': 18, 'class': 1}
2 dic5.clear()
3 print(dic5)

第二种:删除字典中指定键值对

1 dic5 = {'name': 'alex', 'age': 18, 'class': 1}
2 del dic5['name'] 
3 print(dic5) 

第三种:删除字典中指定键值对,并返回该键值对的值

1 dic5 = {'name': 'alex', 'age': 18, 'class': 1}
2 print(dic5.pop('age')) 
3 ret=dic5.pop('age')
4 print(ret)
5 print(dic5)

第四种:随机删除某组键值对,并以元组方式返回值

1 dic5 = {'name': 'alex', 'age': 18, 'class': 1}
2 a = dic5.popitem() 
3 print(a, dic5)

第五种:删除整个字典

1 dic5 = {'name': 'alex', 'age': 18, 'class': 1}
2 del dic5
3 print(dic5)

7)其他操作以及涉及到的方法

dict.fromkeys方法

1 dic6=dict.fromkeys(['host1','host2','host3'],'test')
2 print(dic6)  #{'host3': 'test', 'host1': 'test', 'host2': 'test'}

以下涉及深浅拷贝的一点知识

1 dic6=dict.fromkeys(['host1','host2','host3'],['test1','tets2'])
2 print(dic6)  #{'host2': ['test1', 'tets2'], 'host3': ['test1', 'tets2'], 'host1': ['test1', 'tets2']}
3 dic6['host2'][1]='test3'
4 print(dic6)  #{'host3': ['test1', 'test3'], 'host2': ['test1', 'test3'], 'host1': ['test1', 'test3']}
类似深浅拷贝的逻辑

8)字典的嵌套:在修改前进行查询,查询时遇到字典就用键,遇到列表就用位置

 1 城市 = {
 2      "一线":{
 3          "北京": ["故宫","颐和园"],
 4          "上海": ["迪士尼"],
 5      },
 6      "二线":{
 7          "杭州":["西湖","其他的?求补充"],
 8          "南京":["夫子庙","秦淮河"],
 9      }
10  }
11  城市['二线']["杭州"][1]='雷峰塔'
12  print(城市['二线']["杭州"])

 

9)排序

1 dic={5:'555',2:'666',4:'444'}
2 print(sorted (dic))  #根据键来排序,显示键
3 print(sorted(dic.values()))  #根据值来排序,显示值
4 print(sorted(dic.items()))  #根据键来排序,显示键值对
5 dic.has_keys(5)
6 print(5 in dic) 

10)字典的遍历

第一种:效率高

1 dic5={'name': 'alex', 'age': 18}
2 for i in dic5:
3     print(i)  #默认循环字典里面的键
4 for i in dic5:
5     print(i,dic5[i])+  #打印字典里面的键和值

第二种:效率低,转化步骤偏多

1 dic5={'name': 'alex', 'age': 18}
2 for i,v in dic5.items():
3      print(i,v)  #打印字典里面的键值对,当只有一个变量i时,则打印元组形式的键值对

5.String 字符串

1)字符串操作

第一种:双引号与单引号无区别,但是在特殊情况下注意区分

1 a="Let's go "
2 print(a)

第二种: * 重复输出字符串

1 print('hello'*20)

第三种: [] ,[:] 通过索引获取字符串中字符,这里和列表的切片操作是相同的,具体内容见列表

1 print('helloworld'[2:])

第四种:判断in前面内容是否在后面内容中

1 print(123 in [23,45,123])
2 print('e2l' in 'hello')

第五种: % 格式字符串

1 print('alex is a good teacher')
2 print('%s is a good teacher'%'alex')

第六种:拼接

 1 # 第二个  join 用字符串将a,b,d拼接,效率高
 2 c= ''.join([a,b,d])
 3 print(c)
 4 
 5 # 第二个效率低
 6 a='123'
 7 b='abc'
 8 d='44'
 9 c=a+b
10 print(c)

 2)String的内置方法

常用字符串内置方法:

 1 st='hello kitty {name} is {age}'
 2 
 3 print(st.count('l'))  #统计元素个数
 4 print(st.center(50,'#'))  #居中
 5 print(st.startswith('he'))  #判断是否以某个内容开头
 6 print(st.find('t'))  #查找到第一个元素,并将索引值返回
 7 print(st.format(name='alex',age=37))  #格式化输出的另一种方式
 8 print('My tLtle'.lower())  #大写变小写
 9 print('My tLtle'.upper())  #小写变大写
10 print('\tMy tLtle\n'.strip())  #只处理文本内容(左右两边),跳过空格、换行符
11 print('My title title'.replace('itle','lesson',1))  #将字符串内容进行替换,1表示在有多个相同内容的时候,只替换一次
12 print('My title title'.split('i',1))  #以左为准,分割对象(i)把字符串分割成列表,分割一次

 其他字符串内置方法

 1 st='hello kitty {name} is {age}'
 2 
 3 print(st.count('l'))  #统计元素个数
 4 print(st.capitalize())  #首字母大写
 5 print(st.center(50,'#'))  #居中
 6 print(st.endswith('tty3'))  #判断是否以某个内容结尾
 7 print(st.startswith('he'))  #判断是否以某个内容开头
 8 print(st.expandtabs(tabsize=20))  #规定字符串中的空格数\t
 9 print(st.find('t'))  #查找到第一个元素,并将索引值返回
10 print(st.format(name='alex',age=37))  #格式化输出的另一种方式
11 print(st.format_map({'name':'alex','age':22}))  #字典也可表示格式化输出
12 print(st.index('t'))  #正常状况下同find输出一样
13 print('asd'.isalnum())  #判断是否包含字母或数字,汉字也可以
14 print('12632178'.isdecimal())  #判断是否为十进制的数
15 print('1269999.uuuu'.isnumeric())  #判断是否只由数字组成
16 print('abc'.isidentifier())  #判断是否满足标识符定义规则。标识符定义规则为:只能是字母或下划线开头、不能包含除数字、字母和下划线以外的任意字符。
17 print('Abc'.islower())  #判断是否为全小写
18 print('ABC'.isupper())  #判断是否为全大写
19 print('  e'.isspace())  #判断是否是空格
20 print('My title'.istitle())  #判断首字母是否是大写
21 print('My tLtle'.lower())  #大写变小写
22 print('My tLtle'.upper())  #小写变大写
23 print('My tLtle'.swapcase())  #大写变小写,同时小写变大写
24 print('My tLtle'.ljust(50,'*'))  # *依次向左补充,推动字符串至最左端
25 print('My tLtle'.rjust(50,'*'))  # *依次向右补充,推动字符串至最右端
26 print('\tMy tLtle\n'.strip())  #只处理文本内容(左右两边),跳过空格、换行符
27 print('\tMy tLtle\n'.lstrip())  #只处理文本内容(左边),跳过空格、换行符
28 print('\tMy tLtle\n'.rstrip())  #只处理文本内容(左边),跳过空格、换行符
29 print('My title title'.replace('itle','lesson',1))  #将字符串内容进行替换,1表示在有多个相同内容的时候,只替换一次
30 print('My title title'.rfind('t'))  #从右往左的第一个t的索引位置
31 print('My title title'.split('i',1))  #以左为准,分割对象(i)把字符串分割成列表,分割一次
32 print('My title title'.title())  #按照起始字符的格式将后面变成统一格式

猜你喜欢

转载自www.cnblogs.com/chungzhao/p/12902166.html