1、初识模块
Python的强大之处在于他有非常丰富和强大的标准库和第三方库,现在简单的学习2个常见的标准库——sys和os。
(1)系统的标准库sys
1 # Author:GCL
2
3 # 系统的标准库sys
4 import sys
5
6 # 打印环境变量
7 print(sys.path)
8 # 打印相对路径
9 print(sys.argv)
['F:\Python\code\Day02', 'F:\Python\code\Day02', 'E:\PythonAnZhuang\python36.zip', 'E:\PythonAnZhuang\DLLs', 'E:\PythonAnZhuang\lib', 'E:\PythonAnZhuang', 'E:\PythonAnZhuang\lib\site-packages']
['F:/Python/code/Day02/MySys_Os.py']
(2)系统的标准库os
1 # Author:GCL
2
3 # 系统的标准库os
4 import os
5
6 # 执行系统命令,不保存结果,返回执行的状态,成功返回0
7 statue=os.system("dir")
8 print(statue)
9 # 得到返回的结果
10 ret=os.popen("dir").read()
11 print(ret)
12 # 新建文件夹的命令如下
13 #os.mkdir("newDir")
������ F �еľ��� ѧϰ
�������� 0000-0C4A
F:PythoncodeDay02 ��Ŀ¼
2018/05/05 17:04 <DIR> .
2018/05/05 17:04 <DIR> ..
2018/05/05 20:22 <DIR> .idea
2018/05/04 17:14 181 BytesAndStr.py
2018/05/05 11:45 772 ListCopy.py
2018/05/05 11:22 1,884 MyList.py
2018/05/04 01:38 443 MySys_Os.py
2018/05/05 17:04 1,561 ShoppingCart.py
5 ���ļ� 4,841 �ֽ�
3 ��Ŀ¼ 30,338,977,792 �����ֽ�
0
驱动器 F 中的卷是 学习
卷的序列号是 0000-0C4A
F:PythoncodeDay02 的目录
2018/05/05 17:04 <DIR> .
2018/05/05 17:04 <DIR> ..
2018/05/05 20:22 <DIR> .idea
2018/05/04 17:14 181 BytesAndStr.py
2018/05/05 11:45 772 ListCopy.py
2018/05/05 11:22 1,884 MyList.py
2018/05/04 01:38 443 MySys_Os.py
2018/05/05 17:04 1,561 ShoppingCart.py
5 个文件 4,841 字节
3 个目录 30,338,977,792 可用字节
2、pyc文件是什么
经常说Python是一门解释性语言,其实不够准确,想要弄清楚pyc文件到底是什么,就必须清楚Python的运行过程。
Python的运行过程其实类似于Java,先编译后解释,即:Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器解释成机器文件。所以说Python应该是一门先编译后解释的语言。
在说Python的运行过程之前,我们先来说两个概念,PyCodeObject和pyc文件。我们在硬盘上看到的pyc文件自然不必多说,而其实PyCodeObject则是Python编译器真正编译出的结果。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。所以pyc文件其实是PyCodeObject的一种持久化保存方式。
3、Python3的数据类型bytes
在Python3中,文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python3不会以任意隐式的方式混用str和bytes,所以两者的区分特别清晰。
但是,字符串可以编码成字节包,而字节包可以解码成字符串。
1 # Author:GCL 2 3 nameStr="我是Chinese" 4 # 编码 5 nameBytes=nameStr.encode('utf-8') 6 print(nameBytes) 7 # 解码 8 nameStr=nameBytes.decode('utf-8') 9 print(nameStr)
b'xe6x88x91xe6x98xafChinese'
我是Chinese
4、列表
列表是我们以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作。
(1)定义列表与访问单个元素
1 # Author:GCL
2
3 print("========定义列表与访问单个元素========")
4 # 定义列表
5 names=["Jack","Tom","Mary","Alex"]
6 print(names)
7 # 通过下标访问列表中的元素,下标从0开始计数
8 print(names[0],names[1],names[2],names[3])
9 # 倒着取的下标
10 print(names[-4],names[-3],names[-2],names[-1])
========定义列表与访问单个元素========
['Jack', 'Tom', 'Mary', 'Alex']
Jack Tom Mary Alex
Jack Tom Mary Alex
(2)切片——取多个元素
1 print("========切片========")
2 # 切片——取多个元素
3 # 取下标1至下标3之间的数字,包括1,不包括3
4 print(names[1:3])
5 # 与上句等价
6 print(names[1:-1])
7 # 当从头开始取的时候,下标0可以忽略
8 print(names[:2])
9 # 与上句等价
10 print(names[0:2])
11 # 如果想取到最后一个元素,应该像如下这么写
12 print(names[2:])
13 # 间隔着取元素
14 print(names[0:-1:2])
15 print(names[:-1:3])
16 print(names[::2])
========切片========
['Tom', 'Mary']
['Tom', 'Mary']
['Jack', 'Tom']
['Jack', 'Tom']
['Mary', 'Alex']
['Jack', 'Mary']
['Jack']
['Jack', 'Mary']
(3)追加
1 print("========追加========")
2 names.append("追加新成员0")
3 print(names)
========追加========
['Jack', 'Tom', 'Mary', 'Alex', '追加新成员0']
(4)插入
1 print("========插入========")
2 names.insert(1,"插入新成员0")
3 print(names)
========插入========
['Jack', '插入新成员0', 'Tom', 'Mary', 'Alex', '追加新成员0']
(5)修改
1 print("========修改========")
2 names[2]="Tom_Mod"
3 print(names)
========修改========
['Jack', '插入新成员0', 'Tom_Mod', 'Mary', 'Alex', '追加新成员0']
(6)删除
1 print("========删除========")
2 del names[1]
3 print(names)
4 # 删除指定元素
5 names.remove("Tom_Mod")
6 print(names)
7 # 删除列表的一个元素,默认是最后一个
8 names.pop()
9 print(names)
10 # names.pop(1)
11 names.pop(-2)
12 print(names)
========删除========
['Jack', 'Tom_Mod', 'Mary', 'Alex', '追加新成员0']
['Jack', 'Mary', 'Alex', '追加新成员0']
['Jack', 'Mary', 'Alex']
['Jack', 'Alex']
(7)扩展
1 print("========扩展========")
2 ex=[1,2,3,2]
3 names.extend(ex)
4 del ex
5 print(names)
========扩展========
['Jack', 'Alex', 1, 2, 3, 2]
(8)统计
1 print("========统计========")
2 # 统计列表中元素为2的个数
3 num=names.count(2)
4 print(num)
========统计========
2
(9)排序与翻转
1 print("========排序与翻转========")
2 # Python3中不同数据类型不能放在一起排序
3 names[2]="1"
4 names[3]="2"
5 names[-2]="3"
6 names[-1]="2"
7 print(names)
8 # 按照ASCII码的顺序排列
9 names.sort()
10 print(names)
11 # 翻转
12 names.reverse()
13 print(names)
========排序与翻转========
['Jack', 'Alex', '1', '2', '3', '2']
['1', '2', '2', '3', 'Alex', 'Jack']
['Jack', 'Alex', '3', '2', '2', '1']
(10)获取下标
1 print("========获取下标========")
2 # 只返回找到的第一个下标
3 index=names.index("2")
4 print(index)
========获取下标========
3
(11)清空列表
1 print("========清空列表========")
2 names.clear()
3 print(names)
========清空列表========
[]
(12)拷贝
①.第一种浅拷贝
1 # Author:GCL
2
3 names1=["Jack","Tom","Mary",["1","2"],"Alex"]
4 # 浅拷贝
5 # names2=names1.copy()
6 # 等价于上句
7 # names2=names1[:]
8 # 等价于上句
9 names2=list(names1)
10 print(names1)
11 print(names2)
12 names1[1]="Tom_Mod"
13 names1[3][0]="One"
14 print(names1)
15 print(names2)
['Jack', 'Tom', 'Mary', ['1', '2'], 'Alex']
['Jack', 'Tom', 'Mary', ['1', '2'], 'Alex']
['Jack', 'Tom_Mod', 'Mary', ['One', '2'], 'Alex']
['Jack', 'Tom', 'Mary', ['One', '2'], 'Alex']
②.第二种浅拷贝
1 # Author:GCL
2
3 import copy
4 names3=["Jack","Tom","Mary",["1","2"],"Alex"]
5 # 浅拷贝
6 names4=copy.copy(names3)
7 print(names3)
8 print(names4)
9 names3[1]="Tom_Mod"
10 names3[3][0]="One"
11 print(names3)
12 print(names4)
['Jack', 'Tom', 'Mary', ['1', '2'], 'Alex']
['Jack', 'Tom', 'Mary', ['1', '2'], 'Alex']
['Jack', 'Tom_Mod', 'Mary', ['One', '2'], 'Alex']
['Jack', 'Tom', 'Mary', ['One', '2'], 'Alex']
③.深拷贝
1 # Author:GCL
2
3 import copy
4 # 深拷贝
5 names5=["Jack","Tom","Mary",["1","2"],"Alex"]
6 names6=copy.deepcopy(names5)
7 print(names5)
8 print(names6)
9 names5[1]="Tom_Mod"
10 names5[3][0]="One"
11 print(names5)
12 print(names6)
['Jack', 'Tom', 'Mary', ['1', '2'], 'Alex']
['Jack', 'Tom', 'Mary', ['1', '2'], 'Alex']
['Jack', 'Tom_Mod', 'Mary', ['One', '2'], 'Alex']
['Jack', 'Tom', 'Mary', ['1', '2'], 'Alex']
5、元组
元组其实跟列表差不多,也是存一组数,只不过它一旦创建,便不能再修改,所以又叫只读列表。
6、购物车小程序
需求:
(1)启动程序后,让用户输入工资,然后打印商品列表;
(2)允许用户根据商品编号购买商品;
(3)用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒;
(4)可随时退出,退出时,打印已购买商品和余额。
1 # Author:GCL
2
3 # 商品列表
4 product_list=[("苹果",12),("香蕉",20),("西瓜",15),("橘子",10)]
5 # 购物列表,存放用户购买的商品
6 shopping_list=[]
7 # 工资
8 salary=input("请输入您的工资:")
9 # 工资是否为数字
10 if salary.isdigit():
11 salary=int(salary)
12 while True:
13 print("==========商品列表==========")
14 # index保存索引,item保存具体的值
15 for index,item in enumerate(product_list):
16 print(index,item)
17 user_choice=input("请选择需要购买的商品的编号:")
18 if user_choice.isdigit():
19 user_choice=int(user_choice)
20 # len(product_list)表示的是列表的元素个数
21 if user_choice<len(product_list) and user_choice>=0:
22 tmp_item=product_list[user_choice]
23 if tmp_item[1]<=salary:
24 shopping_list.append(tmp_item)
25 salary-=tmp_item[1]
26 print("商品:%s添加成功,还剩余额: 33[31;1m%d 33[0m"%(tmp_item,salary))
27 else:
28 print("