内容
- 模块初识
- 数据运算
- bytes数据类型
- python数字类型
- python序列类型-字符串|列表|元组的常用操作
- 购物车程序练习
- python映像类型-字典的使用
- 三级菜单实例
- 本周作业-购物车优化
Python数据类型:
按特征划分为:数字类型、序列类型、映像类型、集合类型;
按可变性划分:可哈希的,不可变数据类型包括{数字类型、不可变集合(frozenset)、字符串(str)、元组(tuple)};可变数据类型包括{字典(dict)、列表(list)、可变集合(set)}。
四、python 数字类型
数字类型:
int(整型):
简单来讲就是整数。
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1
举例:
name = 25
print (type(name))
输出:
<class 'int'>
long(长整型):
短整型的取值范围[-2417483648,2417483647],如果超过这个范围怎么办呢?就可以使用长整型数,不过在结尾必须写上大写的“L”,小写也可。但是为了避免与1混淆,建议用L
float(浮点型):
浮点数用来处理实数,即带有小数的数字, 如:2.6、3.14
complex(复数):
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
#Python数字,python支持四种不同的数据类型 int整型 long长整型 float浮点型 complex复数 var1 = 10; #表示整型 var2 = 678L #表示长整型 var3 = 12.34;#表示浮点型 var4 = 123j #复数 var5 = 123+45j #复数
bool(l布尔值):
真与假的判断(经常结合if语句使用)。0关闭、1开启。
判断包含
>>> name = "chen chang qing"
>>> "chen" in name
True
>>> if "chen" in name:
... print "OK"
...
OK
五、python序列类型-字符串|列表|元组的常用操作
序列类型
1)、字符串
python中的字符串体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空间,并且一旦需要修改字符串的话,就需要再次开辟空间,”+”号每出现一次就会在内从中重新开辟一块空间。
字符串常用功能:
- 移除空白
- 分割
- 长度
- 索引
- 切片
A、移除空白:通过.strip() 去掉,()里面填写字母还可以去掉字符
1 name = input("Enter your name:") 2 dy = '''
3 name: %s
4 ''' % (name)
5
6 print (dy)
7 name1 = input("Enter your name1:").strip()
8 dy1 = """
9 name:%s
10 """ % (name1)
11 print (dy1)
12 输出:
13
14 Enter your name: chen
15 name: chen #带空格输出
16 Enter your name1: chenchangqing
17 name:chenchangqing
去空格
B、切割、分片索引操作
#python字符串
"""python的字串列表有2种取值顺序:
从左到右索引默认0开始的,最大范围是字符串长度少1
从右到左索引默认-1开始的,最大范围是字符串开头
"""
name = "chen chang qing"
print (name) #全部打印
print (name[0]) #输出第一个字符
print (name[2:5])#输出2到5个字符
print (name[2:20:2])#输出2到5个字符,最后面这个2 表示步长
print (name[2:]) #输出第三个字符后面的字符串
print (name*2) # 连续打印两次
print (name + "yes") #字符串的拼接
print (name[-3:]) #输出倒数第三个位置(含倒数第三个字母\数字)开始往后的所有字符
print (name[-6:-2]) #输出倒数第六个位置字母到倒数第二个(不包含第二字母)字母之间的字符串,注意空格也算一个站位
切片、索引操作
2)、列表
#Python列表,List是Python使用最频繁的数据类型之一;列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)
列表存储信息是中括号 [],
- 索引
- 切片
- 追加
- 删除
- 长度
- 切片
- 循环
- 包含
基本操作 如下:
1 list = ["chen","chang","qing"] 2 list1 = [1,2,3,4,5,6,7,8,9]
3 #列表中的切片跟字符串的切片是一样的
4 print (list[0]) #根据索引取值["chen","chang","qing"]分别对应 0、1、2
5 print (list1[2:6])#根据切片,输出第三个字符到第六个字符
6 print (list1[2:7:2]) #最后面这个2 表示步长,最后一个不打印
7 print (list*2) #连续打印两次
8 print (list + list1 ) #列表组合
9 打印:#一个print 对应一个输出
10 chen
11
12 [3, 4, 5, 6]
13 [3, 5, 7]
14 ['chen', 'chang', 'qing', 'chen', 'chang', 'qing']
15 ['chen', 'chang', 'qing', 1, 2, 3, 4, 5, 6, 7, 8, 9]
16 #打印列表中能使用的方法
17 print (dir(list))
18
19 输出:
20
21 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
22
23 前面有两个下划线的先不管,这是私有方法,后期在解析;重点:#append 追加;count 统计 extend 扩展;index 索引;insert 插入;pop 删除一个; remove 删除指定的一个; reverse 反转 ; sort 排序;
24 #.append在最后追加字符串
25 print ("________________")
26 list.append("chenchangqing")
27 print (list)
28 输出:
29
30 ['chen', 'chang', 'qing', 'chenchangqing']
31 #.insert指定所以位置插入字符串
32 print ("________________")
33 print (list)
34
35 list.insert(1,"123chen")
36 print (list)
37 输出:
38
39 ['chen', 'chang', 'qing', 'chenchangqing']
40 ['chen', '123chen', 'chang', 'qing', 'chenchangqing']
41 #.index 找出字符串在列表中的位置
42 print ("__________________")
43 print (list)
44
45 number = list.index("chang")
46 print (number)
47 输出:
48
49 ['chen', '123chen', 'chang', 'qing', 'chenchangqing']
50 2
51
52 #count 统计字符串在列表中出现的次数
53 print ("__________________")
54 print (list)
55 tj = list.count("chen")
56 print (tj)
57 输出:
58
59 ['chen', '123chen', 'chang', 'qing', 'chenchangqing']
60
61 1
62
63 #.pop()删除列表中最后一个元素
64 print ("________________")
65
66 print (list)
67 print (list.pop())
68 print (list)
69 输出:
70
71 ['chen', '123chen', 'chang', 'qing', 'chenchangqing']
72 chenchangqing
73 ['chen', '123chen', 'chang', 'qing']
74 #.remove() 指定元素删除
75 print ("________________")
76 print (list)
77 list.remove("chen")
78 print (list)
79 输出:
80
81 ['chen', '123chen', 'chang', 'qing']
82 ['123chen', 'chang', 'qing']
83
84 #.sort 根据元素中的第一个字符进行排序,顺序为特殊字符、数字、字母
85 print ("________________")
86 print (list)
87 list.append("chenchangqing")
88 list.sort()
89 print (list)
90 输出:
91
92 ['123chen', 'chang', 'qing']
93 ['123chen', 'chang', 'chenchangqing', 'qing']
94
95 #.reverse 反转,最后的元素变成第一个
96 print ("________________")
97 print (list)
98 list.reverse()
99 print (list)
100 输出:
101
102 ['123chen', 'chang', 'chenchangqing', 'qing']
103 ['qing', 'chenchangqing', 'chang', '123chen']
104
105 #.extend 扩展,把C的赋值分别查分添加到list列表中
106
107 print ("________________")
108 print (list)
109 c = "chen"
110 list.extend(c)
111 print (list)
112 输出:
113
114 ['qing', 'chenchangqing', 'chang', '123chen']
115
116 ['qing', 'chenchangqing', 'chang', '123chen', 'c', 'h', 'e', 'n']
117
118 #循环删除列表中相同的元素,与for预计结合
119
120 name = ["chen","chenchangqing","f","fa",1,2,3,5,"chen",4,8,8,"chen"]
121 for i in range(name.count("chen")) :
122
123 name.remove("chen")
124
125 print (name)
126
127 输出:
128
129 ['chenchangqing', 'f', 'fa', 1, 2, 3, 5, 4, 8, 8]
130 #判断包含
131
132 >>> "chen" in name
133 True
134 >>> if "chen" in name:
135 ... print "OK"
136 ...
137 OK
列表的操作
3)、元组
元组可以切片、取值。但不能修改元组里面的信息。简单讲:列表能够干元组的活,元组不能干列表的活
元组存储信息是小括号 ()
- 统计
- 获取游标
元组的操作举例:
1 定义元组
2 name = ("chen","chang","qing","chenchang","chenqing","chen",123)
3
4 A、打印元组的使用方法
5
6 print (dir(name))
7 输出:
8
9 ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']
10
11 #只有count, index,双下划线的私有定义先忽略
12
13 B、统计
14
15 number = name.count("chen")
16 print number
17 输出:
18 2
19
20 C、获取游标
21
22 index = name.index("qing")
23 print (index)
24 输出:
25
26 2
元组的操作六、购物车练习
程序:购物车练习
需求:
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额
1 product_list = [
2 {'宝马':300000},
3 {'奔驰':450000},
4 {'奥迪':350000},
5 {'现代':106000},
6 {'哈弗':150000},
7 {'传祺':120000}
8 ]
9
10 shoppling_list = []
11 salary = input("请转入您的购车金额:")
12
13 i = 0
14
15 if salary.isdigit():
16 salary = int(salary)
17 while i < 3 :
18 for index,item in enumerate(product_list):
19 print (index,item)
20
21 user_choice = input("请输入您想购买的品牌(如没有适合的品牌,请输入q退出):")
22 if user_choice.isdigit():
23 user_choice = int(user_choice)
24
25 if 0 <= user_choice < len(product_list):
26 for key in product_list[user_choice]:
27 p_item = product_list[user_choice][key]
28
29 if p_item <= salary:
30 shoppling_list.append(product_list[user_choice])
31 salary -= p_item
32 print ("已购买商品:%s ,您的余额: %s " % (shoppling_list,salary))
33
34 else:
35 print ('''余额不足,剩余:%d ,请及时充值;\n所购买商品:%s ''' % (salary, shoppling_list))
36
37 confirm_recharge = input("\n是否充值,请选择 yes 或 no:")
38 if confirm_recharge == "yes":
39 add_salary = int(input("请输入充值金额:"))
40 salary += add_salary
41 print ("充值后余额 %s" % (salary))
42 elif confirm_recharge == "no":
43 print ("最终购买商品列表%s;\n余额剩余:%d " % (shoppling_list,salary))
44 balance_refund = input("是否申请余额退款:yes 或 no:")
45
46 if balance_refund == "yes":
47 refund_amount = input("请输入退款金额:")
48 if refund_amount.isdigit():
49 refund_amount = int(refund_amount)
50 salary -= refund_amount
51 print ("退款成功,余额剩余:" ,salary)
52 else:
53 exit()
54 elif balance_refund == "no":
55 exit()
56
57 else:
58 print ("您选择产品编号 %d 不存在,请继续选择:" % (user_choice))
59
60 elif user_choice == "q":
61 print ("商品列表: %s;剩余余额:%s" % (shoppling_list,salary))
62 exit()
63 else:
64 print ("错误选项,请认真对待:",user_choice)
65 i += 1
python代码
enumerate 打印列表中的,索引。
逻辑图:
七、映像类型-字典的使用
映像类型
1、字典
字典的特性:
- dict 是无序的
- key 是必须是唯一的,有去重的功能。
1 city_center = {
2 "广东":"广州",
3 "广西":"南宁",
4 "湖南":"长沙",
5 "北京":"天安门"
6 }
7
8
9 #增加
10 city_center["江西"] = "南昌"
11 print (city_center)
12
13 打印:
14 >>{'广东': '广州', '北京': '天安门', '湖南': '长沙', '江西': '南昌', '广西': '南宁'}
15
16 #1、修改
17 city_center["北京"] = "故宫"
18 print(city_center)
19 打印:
20 >>{'广东': '广州', '北京': '故宫', '湖南': '长沙', '江西': '南昌', '广西': '南宁'}
21
22 #2、删除:为分三种 标准删除、del删除、随机删除
23 city_center.pop("广西")
24 print (city_center)
25 打印:
26 >>{'广东': '广州', '北京': '故宫', '湖南': '长沙', '江西': '南昌'}
27
28 del city_center["湖南"]
29 print (city_center)
30 打印:
31 >>{'广东': '广州', '北京': '故宫', '江西': '南昌'}
32
33 city_center.popitem()
34 print(city_center)
35 打印:
36 >>{'北京': '故宫', '江西': '南昌'}
37
38 #3、查找
39 print ("北京" in city_center) #判断是不是在字典里面,取的是Key
40 打印:
41 >>True
42
43 print (city_center.get("广东")) #如果一个key不存在,就报错,get不会,不存在只返回(None)
44 打印:
45 >>None
46
47
48 print (city_center["广东"]) #利用key取values的值
49 打印:
50 Traceback (most recent call last):
51 File "/Users/mac/PycharmProjects/untitled2/51CTO/2day/dict.py", line 36, in <module>
52 print (city_center["广东"]) #利用key取values的值
53 KeyError: '广东'
字典增删改查
1 dict2 = {
2 "chen":123,
3 "chang":1203,
4 "qing":1230
5 }
6
7 for key in dict2:
8 print (key,dict2[key])
9
10
11 for k,v in dict2.items():#数据量大时,慎用!!!
12 print (k,v)
13
14 打印:
15 1、
16 chang 1203
17 chen 123
18 qing 1230
19
20 2、
21 chang 1203
22 chen 123
23 qing 1230
for循环打印字典八、三级菜单的实例
程序练习
程序: 三级菜单
要求:
1、使用字典定义菜单列表(有三个级别)
2、输入下标输出打印对应的层级菜单
3、可返回上一级
4、可随时退出程序
九、购物车的优化
要求:
1、额度 15000
2、可以提现,手续费5%
3、每月最后一天出账单(每月30天),写入文件
4、记录每月日常流水
5、提供还款接口
优化:
1、每月10号为还款日,过期未还,按欠款额 5%。计息