1、初识模块

Python的强大之处在于他有非常丰富和强大的标准库和第三方库,现在简单的学习2个常见的标准库——sys和os。

(1)系统的标准库sys

 # Author:GCL

 # 系统的标准库sys
import sys # 打印环境变量
print(sys.path)
# 打印相对路径
print(sys.argv)

标准库sys

['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

 # Author:GCL

 # 系统的标准库os
import os # 执行系统命令,不保存结果,返回执行的状态,成功返回0
statue=os.system("dir")
print(statue)
# 得到返回的结果
ret=os.popen("dir").read()
print(ret)
# 新建文件夹的命令如下
#os.mkdir("newDir")

标准库os

 ������ F �еľ��� ѧϰ
������к��� 0000-0C4A F:\Python\code\Day02 ��Ŀ¼ 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:\Python\code\Day02 的目录 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,所以两者的区分特别清晰。
但是,字符串可以编码成字节包,而字节包可以解码成字符串。

 # Author:GCL

 nameStr="我是Chinese"
# 编码
nameBytes=nameStr.encode('utf-8')
print(nameBytes)
# 解码
nameStr=nameBytes.decode('utf-8')
print(nameStr)

编码与解码

b'\xe6\x88\x91\xe6\x98\xafChinese'
我是Chinese

输出

4、列表

列表是我们以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作。

(1)定义列表与访问单个元素

 # Author:GCL

 print("========定义列表与访问单个元素========")
# 定义列表
names=["Jack","Tom","Mary","Alex"]
print(names)
# 通过下标访问列表中的元素,下标从0开始计数
print(names[0],names[1],names[2],names[3])
# 倒着取的下标
print(names[-4],names[-3],names[-2],names[-1])

定义列表与访问单个元素

========定义列表与访问单个元素========
['Jack', 'Tom', 'Mary', 'Alex']
Jack Tom Mary Alex
Jack Tom Mary Alex

输出

(2)切片——取多个元素

 print("========切片========")
# 切片——取多个元素
# 取下标1至下标3之间的数字,包括1,不包括3
print(names[1:3])
# 与上句等价
print(names[1:-1])
# 当从头开始取的时候,下标0可以忽略
print(names[:2])
# 与上句等价
print(names[0:2])
# 如果想取到最后一个元素,应该像如下这么写
print(names[2:])
# 间隔着取元素
print(names[0:-1:2])
print(names[:-1:3])
print(names[::2])

切片——取多个元素

========切片========
['Tom', 'Mary']
['Tom', 'Mary']
['Jack', 'Tom']
['Jack', 'Tom']
['Mary', 'Alex']
['Jack', 'Mary']
['Jack']
['Jack', 'Mary']

输出

(3)追加

 print("========追加========")
names.append("追加新成员0")
print(names)

追加

========追加========
['Jack', 'Tom', 'Mary', 'Alex', '追加新成员0']

输出

(4)插入

 print("========插入========")
names.insert(1,"插入新成员0")
print(names)

插入

========插入========
['Jack', '插入新成员0', 'Tom', 'Mary', 'Alex', '追加新成员0']

输出

(5)修改

 print("========修改========")
names[2]="Tom_Mod"
print(names)

修改

========修改========
['Jack', '插入新成员0', 'Tom_Mod', 'Mary', 'Alex', '追加新成员0']

输出

(6)删除

 print("========删除========")
del names[1]
print(names)
# 删除指定元素
names.remove("Tom_Mod")
print(names)
# 删除列表的一个元素,默认是最后一个
names.pop()
print(names)
# names.pop(1)
names.pop(-2)
print(names)

删除

========删除========
['Jack', 'Tom_Mod', 'Mary', 'Alex', '追加新成员0']
['Jack', 'Mary', 'Alex', '追加新成员0']
['Jack', 'Mary', 'Alex']
['Jack', 'Alex']

输出

(7)扩展

 print("========扩展========")
ex=[1,2,3,2]
names.extend(ex)
del ex
print(names)

扩展

========扩展========
['Jack', 'Alex', 1, 2, 3, 2]

输出

(8)统计

 print("========统计========")
# 统计列表中元素为2的个数
num=names.count(2)
print(num)

统计

========统计========
2

输出

(9)排序与翻转

 print("========排序与翻转========")
# Python3中不同数据类型不能放在一起排序
names[2]=""
names[3]=""
names[-2]=""
names[-1]=""
print(names)
# 按照ASCII码的顺序排列
names.sort()
print(names)
# 翻转
names.reverse()
print(names)

排序与翻转

========排序与翻转========
['Jack', 'Alex', '', '', '', '']
['', '', '', '', 'Alex', 'Jack']
['Jack', 'Alex', '', '', '', '']

输出

(10)获取下标

 print("========获取下标========")
# 只返回找到的第一个下标
index=names.index("")
print(index)

获取下标

========获取下标========
3

输出

(11)清空列表

 print("========清空列表========")
names.clear()
print(names)

清空列表

========清空列表========
[]

输出

(12)拷贝

①.第一种浅拷贝

 # Author:GCL

 names1=["Jack","Tom","Mary",["",""],"Alex"]
# 浅拷贝
# names2=names1.copy()
# 等价于上句
# names2=names1[:]
# 等价于上句
names2=list(names1)
print(names1)
print(names2)
names1[1]="Tom_Mod"
names1[3][0]="One"
print(names1)
print(names2)

源码

['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom_Mod', 'Mary', ['One', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['One', ''], 'Alex']

结果

②.第二种浅拷贝

 # Author:GCL

 import copy
names3=["Jack","Tom","Mary",["",""],"Alex"]
# 浅拷贝
names4=copy.copy(names3)
print(names3)
print(names4)
names3[1]="Tom_Mod"
names3[3][0]="One"
print(names3)
print(names4)

源码

['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom_Mod', 'Mary', ['One', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['One', ''], 'Alex']

输出

③.深拷贝

 # Author:GCL

 import copy
# 深拷贝
names5=["Jack","Tom","Mary",["",""],"Alex"]
names6=copy.deepcopy(names5)
print(names5)
print(names6)
names5[1]="Tom_Mod"
names5[3][0]="One"
print(names5)
print(names6)

源码

['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['', ''], 'Alex']
['Jack', 'Tom_Mod', 'Mary', ['One', ''], 'Alex']
['Jack', 'Tom', 'Mary', ['', ''], 'Alex']

输出

5、元组

元组其实跟列表差不多,也是存一组数,只不过它一旦创建,便不能再修改,所以又叫只读列表。

6、购物车小程序

需求:

(1)启动程序后,让用户输入工资,然后打印商品列表;

(2)允许用户根据商品编号购买商品;

(3)用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒;

(4)可随时退出,退出时,打印已购买商品和余额。

 # Author:GCL

 # 商品列表
product_list=[("苹果",12),("香蕉",20),("西瓜",15),("橘子",10)]
# 购物列表,存放用户购买的商品
shopping_list=[]
# 工资
salary=input("请输入您的工资:")
# 工资是否为数字
if salary.isdigit():
salary=int(salary)
while True:
print("==========商品列表==========")
# index保存索引,item保存具体的值
for index,item in enumerate(product_list):
print(index,item)
user_choice=input("请选择需要购买的商品的编号:")
if user_choice.isdigit():
user_choice=int(user_choice)
# len(product_list)表示的是列表的元素个数
if user_choice<len(product_list) and user_choice>=0:
tmp_item=product_list[user_choice]
if tmp_item[1]<=salary:
shopping_list.append(tmp_item)
salary-=tmp_item[1]
print("商品:%s添加成功,还剩余额:\033[31;1m%d\033[0m"%(tmp_item,salary))
else:
print("\033[41;1m您的余额不够,只剩下:%d\033[0m"%(salary))
else:
print("您所输入的编号:%d不存在!"%(user_choice))
elif user_choice=="q":
print("正常退出!")
print("您所购买的商品如下:")
for index,item in enumerate(shopping_list):
print(index,item)
print("您的余额为:\033[31;1m%d\033[0m"%(salary))
exit()
else:
print("您的选择非法,无法识别!")
else:
print("您输入的工资有误!")

源码

请输入您的工资:50
==========商品列表==========
0 ('苹果', 12)
1 ('香蕉', 20)
2 ('西瓜', 15)
3 ('橘子', 10)
请选择需要购买的商品的编号:1
商品:('香蕉', 20)添加成功,还剩余额:30
==========商品列表==========
0 ('苹果', 12)
1 ('香蕉', 20)
2 ('西瓜', 15)
3 ('橘子', 10)
请选择需要购买的商品的编号:2
商品:('西瓜', 15)添加成功,还剩余额:15
==========商品列表==========
0 ('苹果', 12)
1 ('香蕉', 20)
2 ('西瓜', 15)
3 ('橘子', 10)
请选择需要购买的商品的编号:1
您的余额不够,只剩下:15
==========商品列表==========
0 ('苹果', 12)
1 ('香蕉', 20)
2 ('西瓜', 15)
3 ('橘子', 10)
请选择需要购买的商品的编号:q
正常退出!
您所购买的商品如下:
0 ('香蕉', 20)
1 ('西瓜', 15)
您的余额为:15

输出

7、字符串操作

关于对字符串的一系列操作,都在下面的源码中进行了详细的说明:

 # Author:GCL

 # 首字母大写,后续字母全部变为小写
print("toM gooD".capitalize()) # 统计给定字符串出现的次数
print("abc fdh aha".count("a")) # 将字符串填充到15位,用*号前后填充,如果指定的位数小于字符串的长度,将没有效果
print("".center(15,"*")) # 对字符串进行编码,得到对应的字节包
print("我爱中国".encode("utf-8")) # 判断字符串是否以gcl结尾
print("Qggh hjgcl".endswith("gcl")) # 将Tab键的距离扩展到16
print("I love\tYou".expandtabs(16)) # 格式化字符串
print("My name is {name},I am {year}".format(name="gcl",year=22))
print("My name is {name},I am {year}".format_map({"name":"gcl","year":22})) # 在字符串中查找name,找到的话返回首次找到的索引,否则返回-1
print("My name is {name},I am {year}".find("name")) # 在字符串中查找name,找到的话返回首次找到的索引,否则报错
print("My name is {name},I am {year}".index("name")) # 判断字符串是否为整数
print("".isdigit()) # 判断字符串是否只由数字和字母组成
print("ak15".isalnum()) # 判断字符串是否只由字母组成
print("aaA".isalpha()) # 判断字符串是否为十进制
print("".isdecimal()) # 判读字符串是否为一个合法的标识符
print("jk2_".isidentifier()) # 判读字符串中字母是否全为小写
print("abc 36".islower()) # 判断字符串是否只由数字组成
print("".isnumeric()) # 判断字符串是否可以打印
print("MyNameIs".isprintable()) # 判断字符串是否为空格
print(" ".isspace()) # 判断字符串是否为标题
print("My Name is".istitle())
print("My Name Is".istitle()) # 判读字符串中字母是否全为大写
print("AS11".isupper()) # join的示例用法
print("+".join(["","",""]))
print("->".join(["a","b","c"])) # 从左到右(左对齐),不够的位数用*来填充
print("".ljust(10,"*")) # 从右到左(右对齐),不够的位数用*来填充
print("".rjust(10,"*")) # 转换成小写
print("KLHasgUK".lower()) # 转换成大写
print("KLHasgUK".upper()) # 去除左边的空格或换行
print(" \nabc".lstrip()) # 去除右边的空格或换行
print("abc\n".rstrip()) # 去除两端的空格或换行
print(" \nabc\n".strip()) # maketrans用法示例
p=str.maketrans("abcde","")
print("hajbkcldqe".translate(p)) # 从左到右拆分字符串
print("My name is {name},I am {year}".partition(" ")) # 替换指定的字符串
print("gcl love li".replace("l","L",2)) # 从右到左首次找到的索引
print("gcl love li".rfind("l")) # 从右到左拆分字符串
print("My name is {name},I am {year}".rpartition(" ")) # 分割字符串
print("1+2+3+4".split("+")) # 大小写互换
print("aBcDeFgHi".swapcase()) # 转换成标题
print("i love you".title()) # 填充字符串
print("123abc".zfill(10))

源码

其对应的输出如下:

Tom good
3
****1234567****
b'\xe6\x88\x91\xe7\x88\xb1\xe4\xb8\xad\xe5\x9b\xbd'
True
I love You
My name is gcl,I am 22
My name is gcl,I am 22
3
3
True
True
True
True
True
True
True
True
True
False
True
True
1+2+3
a->b->c
12345*****
*****12345
klhasguk
KLHASGUK
abc
abc
abc
h1j2k3l4q5
('My', ' ', 'name is {name},I am {year}')
gcL Love li
9
('My name is {name},I am', ' ', '{year}')
['', '', '', '']
AbCdEfGhI
I Love You
0000123abc

输出

8、字典操作

(1)字典是一种----->key:value 的数据类型,其语法如下:

 info={
"stu001":"gcl","stu002":"lmy","stu003":"xx"
}
print(info)

定义

{'stu001': 'gcl', 'stu002': 'lmy', 'stu003': 'xx'}

输出

(2)字典的特性:

①.字典是无序的;

②.字典的key值必须是唯一的。

(3)字典的常见操作

①.增加

 # 增加
info["stu004"]="yxm"
info["stu005"]="tl"
print(info)

增加

{'stu001': 'gcl', 'stu002': 'lmy', 'stu003': 'xx', 'stu004': 'yxm', 'stu005': 'tl'}

输出

②.修改

 # 修改
info["stu001"]="gcl2.0"
print(info)

修改

{'stu001': 'gcl2.0', 'stu002': 'lmy', 'stu003': 'xx', 'stu004': 'yxm', 'stu005': 'tl'}

输出

③.删除

 # 删除
# 指定删除
info.pop("stu004")
print(info)
del info["stu005"]
print(info)
# 随机删除
info.popitem()
print(info)

删除

{'stu001': 'gcl2.0', 'stu002': 'lmy', 'stu003': 'xx', 'stu005': 'tl'}
{'stu001': 'gcl2.0', 'stu002': 'lmy', 'stu003': 'xx'}
{'stu001': 'gcl2.0', 'stu002': 'lmy'}

输出

④.查找

 # 查找
# 如果Key值不存在就会报错
print(info["stu001"])
# 最好的方法是get,如果不存在会返回None
print(info.get("stu002"))
print(info.get("stu003"))
# 判断Key值是否存在
print(("stu001" in info))

查找

gcl2.0
lmy
None
True

输出

⑤.Keys值与values值

 # Keys值
print(info.keys()) # values值
print(info.values())

Keys值与values值

dict_keys(['stu001', 'stu002'])
dict_values(['gcl2.0', 'lmy'])

输出

⑥.setdefault、update、items

 # setdefault
info.setdefault("stu003","xx")
print(info)
info.setdefault("stu001","gcl")
print(info) # update
ex={11:22,33:44,"stu001":"gcl"}
info.update(ex)
print(info) # items
print(info.items())

setdefault、update、items

{'stu001': 'gcl2.0', 'stu002': 'lmy', 'stu003': 'xx'}
{'stu001': 'gcl2.0', 'stu002': 'lmy', 'stu003': 'xx'}
{'stu001': 'gcl', 'stu002': 'lmy', 'stu003': 'xx', 11: 22, 33: 44}
dict_items([('stu001', 'gcl'), ('stu002', 'lmy'), ('stu003', 'xx'), (11, 22), (33, 44)])

输出

⑦.循环打印

 # 循环打印字典
# 比较常用
for key in info:
print(key,info[key])
#会先把dict转成list,数据量大时莫用
for k,v in info.items():
print(k,v)

循环打印字典

stu001 gcl
stu002 lmy
stu003 xx
11 22
33 44
stu001 gcl
stu002 lmy
stu003 xx
11 22
33 44

输出

9、程序:三级菜单

要求:

(1)可返回上一级;

(2)可随时退出程序。

 # Author:GCL

 # 整体的字典数据
data={
"A1":{
"A11":{
"A111":["",""],
"A112":["",""]
},
"A12":{
"A121":["",""],
"A122":["",""]
},
"A13":{
"A131":["",""],
"A132":["",""]
}
},
"A2":{
"A21":{
"A211":["",""],
"A212":["",""]
},
"A22":{
"A221":["",""],
"A222":["",""]
},
"A23":{
"A231":["",""],
"A232":["",""]
}
},
"A3":{
"A31":{
"A311": ["", ""],
"A312": ["", ""]
},
"A32":{
"A321": ["", ""],
"A322": ["", ""]
},
"A33":{
"A331": ["", ""],
"A332": ["", ""]
}
},
"A4":{
"A41":{
"A411": ["", ""],
"A412": ["", ""]
},
"A42":{
"A421": ["", ""],
"A422": ["", ""]
},
"A43":{
"A431": ["", ""],
"A432": ["", ""]
}
}
} # 退出的标志位,默认为真
exit_flag=True
while exit_flag:
# 打印第一级的keys值
for k in data:
print(k)
choice1=input("您的选择(第一级):")
if (choice1 in data):
while exit_flag:
# 打印第二级的keys值
for k in data[choice1]:
print(k)
choice2=input("您的选择(第二级):")
if (choice2 in data[choice1]):
while exit_flag:
# 打印第三级的keys值
for k in data[choice1][choice2]:
print(k)
choice3=input("您的选择(第三级):")
if (choice3 in data[choice1][choice2]):
print(data[choice1][choice2][choice3])
elif choice3=="b":
break
elif choice3=="q":
exit_flag=False
else:
print("您的选择有误,无法识别!")
elif choice2=="b":
break;
elif choice2=="q":
exit_flag=False
else:
print("您的选择有误,无法识别!")
elif choice1=="b":
print("已经是第一级了,无法返回上一级!")
elif choice1=="q":
exit_flag=False
else:
print("您的选择有误,无法识别!")

源码

A1
A2
A3
A4
您的选择(第一级):A2
A21
A22
A23
您的选择(第二级):A21
A211
A212
您的选择(第三级):A212
['', '']
A211
A212
您的选择(第三级):A211
['', '']
A211
A212
您的选择(第三级):B
您的选择有误,无法识别!
A211
A212
您的选择(第三级):b
A21
A22
A23
您的选择(第二级):b
A1
A2
A3
A4
您的选择(第一级):b
已经是第一级了,无法返回上一级!
A1
A2
A3
A4
您的选择(第一级):A4
A41
A42
A43
您的选择(第二级):q Process finished with exit code 0

输出

后记:欢迎各路大神批评与指正!

2018.5.6

最新文章

  1. 如何用ORM支持SQL语句的CASE WHEN?
  2. 多网卡的7种bond模式原理
  3. sql server 添加字段并且赋默认值和说明
  4. 基础学习总结(七)--子线程及Handler
  5. Java http post
  6. LeeCode(Database)-Combine Two Tables
  7. 使用VNC远程管理VPS(Centos系统)
  8. csv和excel的区别
  9. 解决用友U8删除用户时提示“用户已启用”不能删除的问题
  10. django的内置信号
  11. 【C++问题整理】
  12. koa 学习资料
  13. python 函数学习
  14. MySQL V5.6.37升级到V5.6.38
  15. ClangFormat代码格式化
  16. jQuery的一个关键函数
  17. Android SurfaceView播放视频时横竖屏的调整
  18. Python数据定义
  19. div圆角
  20. orm查询基本操作

热门文章

  1. MySQL与MongoDB的区别
  2. thinkphp整合swoole
  3. spark 机器学习 朴素贝叶斯 原理(一)
  4. 关于AFNetWorking 2.5.4之后版本编译报错问题解决方案
  5. hdu6201 transaction transaction transaction(from 2017 ACM/ICPC Asia Regional Shenyang Online)
  6. iOS 设置UITextView的Placeholder
  7. SPFA/Dijkstra POJ 3013 Big Christmas Tree
  8. 执行impdp时ORA-39213: Metadata processing is not available错误处理
  9. RAID基础
  10. 将php数组传递到js—json_encode(),json_decode()