第二周-第02章节-Python3.5-模块初识
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: sys.py
@time: 2019/04/16
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
#import guess
import os
import sys
#print(sys.path)
print(sys.argv) ###捕获参数
cmd_res = os.system("dir") ##执行命令不保存结果
print(sys.path)
=========================================================
G:Python3.7.3python.exe G:/practise/oldboy/day2/sys.py
['G:/practise/oldboy/day2/sys.py']
驱动器 G 中的卷没有标签。
卷的序列号是 C038-3181
G:practiseoldboyday2 的目录
2019/04/17 21:25 <DIR> .
2019/04/17 21:25 <DIR> ..
2019/04/17 20:52 274 checklist.py
2019/04/17 20:40 1,770 CPU.py
2019/04/17 20:43 897 disk.py
2019/04/17 20:54 930 mail.py
2019/04/17 20:39 1,263 memory.py
2019/04/17 20:22 3,314 monitor.py
2019/04/17 20:41 913 network.py
2019/04/17 21:22 <DIR> new_dir
2019/04/17 20:51 944 read_only.py
2019/04/17 21:25 491 sys.py
2019/04/17 20:52 <DIR> __pycache__
9 个文件 10,796 字节
4 个目录 84,762,398,720 可用字节
['G:\practise\oldboy\day2', 'G:\practise\oldboy', 'G:\Python3.7.3\python37.zip', 'G:\Python3.7.3\DLLs', 'G:\Python3.7.3\lib', 'G:\Python3.7.3', 'G:\Python3.7.3\lib\site-packages']
Process finished with exit code 0
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: sys.py
@time: 2019/04/16
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
import os
cmd_df=os.system("df -Th") ###不保存结果
print("===============================>",cmd_df)
=====================================================
[root@linux-node1 Python]# python argv.py
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 18G 2.1G 16G 12% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 120M 378M 25% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
0
==================分割线==============================
[root@linux-node1 Python]# cat argv.py
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: sys.py
@time: 2019/04/16
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
import os
cmd_df=os.popen("df -Th").read() ###不保存结果
print(cmd_df)
os.mkdir("TEST") ##创建同级目录TEST
==============================================
[root@linux-node1 Python]# python argv.py
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 18G 2.1G 16G 12% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 497M 120M 378M 25% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
第二周-第03章节-Python3.5-模块初识2
注意:导入自定义模块的时候,如果在同级目录下,直接import model_name就可以了,如果没有在同级目录,直接扔到G:Python3.7.3Libsite-packages 下面即可。
第二周-第04章节-Python3.5-pyc是什么
1. Python是一门解释型语言?
我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!
为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。
2. 解释型语言和编译型语言
计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。
编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。
解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。
通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。
此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。
用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。
3. Python到底是什么
其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。
当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:
javac hello.java
java hello
只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。
4. 简述Python的运行过程
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
第二周-第05章节-Python3.5-python数据类型
2 是一个整数的例子。
长整数 不过是大一些的整数。
3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数,j为虚数,数学中表示复数是什么?。
int(整型)
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型)
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
"hello world"
第二周-第06章节-Python3.5-bytes数据类型
三元运算:
例子:
>>> result = 1 if 2 > 1 else 2
>>> print(result)
1
python3 最重要的新特性大概要算是对文本和二进制数据做了更为清晰的区分,文本总是unicode,由string类型表示, 二进制数据则有Bytes类型表示。python3中不会以任意隐式的方式混用string和bytes.(如视频文件是二进制,而文本文件肯定是字符串)
string和bytes数据类型之间的相互转换用decode和encode
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: encode.py
@time: 2019/04/20
url:https://www.liaoxuefeng.com
functions:字符编码的转换
Software:JetBrains PyCharm 4.5.3
"""
msg = "我爱北京颐和园"
print(msg)
print(msg.encode(encoding="utf-8"))
print(msg.encode(encoding="utf-8").decode(encoding="utf-8"))
=====================================================================
G:Python3.7.3python.exe G:/practise/oldboy/day2/encode.py
我爱北京颐和园
b'xe6x88x91xe7x88xb1xe5x8cx97xe4xbaxacxe9xa2x90xe5x92x8cxe5x9bxad'
我爱北京颐和园
第二周-第07章节-Python3.5-列表的使用
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: list.py
@time: 2019/04/20
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
#字符串
names = "chenjs,xianggr,chenlr,liuxz"
print(names)
#列表
names = ["chenjs","xianggr","chenlr","liuxz"]
print(names)
###切片
print(names[1])
#追加
names.append("leihd")
print(names)
#插入
names.insert(1,"Chenrh")
names.insert(2,"Chenrh")
print(names)
#计数
print(names)
print(names.count("Chenrh"))
#替换
names[2] = "xied"
print(names)
#删除delete
#删除方法1
#names.remove("Chenrh")
#删除方法2
#del names[1]
#删除方法3
names.pop() #括号中可以输入下标
print(names)
#查找位置
print(names)
print(names.index("chenlr"))
#反转
print(names.reverse())
print(names)
#排序(按照字母排序)
print(names.sort())
print(names)
#扩展
names2 = ["xyz","abc","def"]
names.extend(names2)
print(names)
#清空
names.clear()
print(names)
=========================================================================
G:Python3.7.3python.exe G:/practise/oldboy/day2/list.py
chenjs,xianggr,chenlr,liuxz
['chenjs', 'xianggr', 'chenlr', 'liuxz']
xianggr
['chenjs', 'xianggr', 'chenlr', 'liuxz', 'leihd']
['chenjs', 'Chenrh', 'Chenrh', 'xianggr', 'chenlr', 'liuxz', 'leihd']
['chenjs', 'Chenrh', 'Chenrh', 'xianggr', 'chenlr', 'liuxz', 'leihd']
2
['chenjs', 'Chenrh', 'xied', 'xianggr', 'chenlr', 'liuxz', 'leihd']
['chenjs', 'Chenrh', 'xied', 'xianggr', 'chenlr', 'liuxz']
['chenjs', 'Chenrh', 'xied', 'xianggr', 'chenlr', 'liuxz']
4
None
['liuxz', 'chenlr', 'xianggr', 'xied', 'Chenrh', 'chenjs']
None
['Chenrh', 'chenjs', 'chenlr', 'liuxz', 'xianggr', 'xied']
['Chenrh', 'chenjs', 'chenlr', 'liuxz', 'xianggr', 'xied', 'xyz', 'abc', 'def']
[]
Process finished with exit code 0
第二周-第08章节-Python3.5-列表的使用2
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: list.py
@time: 2019/04/20
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
import copy
#字符串
names = "chenjs,xianggr,chenlr,liuxz"
print(names)
#列表
names = ["chenjs","xianggr",["chenjisong","chenjinxi"],"chenlr","liuxz"]
print(names)
#扩展
names2 = ["xyz","abc","def","ghi"]
names.extend(names2)
print(names)
#浅复制(copy)
names2=names.copy()
print(names)
print(names2)
names[0]="陈继松"
print("=======浅copy========>",names)
print("=======浅copy========>",names2)
#深复制(deepcopy,深copy必须要导入copy模块)
names2=copy.deepcopy(names)
print("=======深copy=======>",names)
print("=======深copy=======>",names2)
#copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变
#deepcopy深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
names[2][0]="CHENJISONG"
print(names)
#切片
print(names[0:-1:2])
print(names[::2])
#清空
names.clear()
print(names)
第二周-第09章节-Python3.5-元组与购物车程序练习
元祖又为不可变列表,用()表示,比如
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: yuanzu.py
@time: 2019/04/20
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
names = ("A","B","C","D","D","D")
print(names.index("C")) #取下标值
print(names.count("D")) #计数
=====================================================================
G:Python3.7.3python.exe G:/practise/oldboy/day2/yuanzu.py
2
3
Process finished with exit code 0
需求:
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额
第二周-第10章节-Python3.5-购物车程序练习实例
程序:
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: shopping.py
@time: 2019/04/20
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
product_list = [
('Iphone',5800),
('Mac Pro',9800),
('Bike',800),
('Watch',10600),
('Coffee',31),
('Alex Python',120),
]
shopping_list = [] ##定义shopping_list为空列表
salary = input("Input your salary:") ##输入用户的工资
if salary.isdigit(): ##判断用户输入的是否为数字
salary = int(salary) ##格式化salary
while True:
for index,item in enumerate(product_list):
#print(product_list.index(item),item)
print(index,item)
user_choice = input("选择要买嘛?>>>:")
if user_choice.isdigit():
user_choice = int(user_choice)
if user_choice < len(product_list) and user_choice >=0:
p_item = product_list[user_choice]
if p_item[1] <= salary: #买的起
shopping_list.append(p_item)
salary -= p_item[1]
print("Added %s into shopping cart,your current balance is 33[31;1m%s 33[0m" %(p_item,salary) )
else:
print(" 33[41;1m你的余额只剩[%s]啦,还买个毛线 33[0m" % salary)
else:
print("product code [%s] is not exist!"% user_choice)
elif user_choice == 'q':
print("--------shopping list------")
for p in shopping_list:
print(p)
print("Your current balance:",salary)
exit()
else:
print("invalid option")
第二周-第11章节-Python3.5-字符串常用操作
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: string.py
@time: 2019/04/22
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
name = "my name is chenjisong"
print(name.capitalize()) #capitalize首字母大写
print(name.count("n")) #字母的个数
print(name.center(50,"=")) #打印50个字符,如果不够就把name放在中间,并用"="补齐
print(name.endswith("ng")) #是否以什么结尾
print(name.expandtabs(tabsize=30)) #将 转成30个空格
print(name.find("name")) #找出字符的索引位置
print('abc123'.isalnum()) #是否为阿拉伯数字(包含字母和数字)
print('abA'.isalpha()) #是否为纯英文字符
print('12'.isdecimal()) #是否为十进制
print('1.2'.isdigit()) #是否为纯数字整数
print('_1A'.isidentifier()) #判断是否为合法的变量名
print('aBc'.islower()) #判断是否为小写
print('33.33'.isnumeric()) #判断是否为纯数字
print(' '.isspace()) #是否为空格
print('My Name Is'.istitle()) #是否为每个首字母大写
print('My Name Is'.isprintable()) #是否为可打印的
print('My Name Is'.isupper()) #是否全是大写
print('*'.join(['1','2','3','4'])) #是否将特定字符放在列表元素中间
print(name.ljust(50,"*")) #保证长度50.如果不够右边填充起来
print(name.rjust(50,"*")) #保证长度50.如果不够左边填充起来
print('Chenjisong'.lower()) #把大写变小写
print('Chenjisong'.upper()) #把小写变大写
print(' Chenjisong'.lstrip()) #lstrip去掉左边的空格或回车
print('Chenjisong '.rstrip()) #lstrip去掉右边的空格或回车
print(" Chenjisong ".strip()) #去掉左右两边的空格或回车
print('chenjisong'.replace('n','N')) #替换字母,也可以在后面加位置参数
print('chenjisong'.rfind('n')) #找到最后一个字母的位置下标并返回
print('1+2+3+4'.split('+')) #以什么作为分隔符
print('1+2 +3+4'.splitlines()) #自动识别不通系统的换行
print("ChenJiSong".swapcase()) #将字符串大小写互换
print("Chen ji song".title()) #将首字母变为大写
print('chen ji song'.zfill(50)) #字符串50,不够的用0填充
===================================================================
结果:
"G:Python 3.6.6python.exe" G:/practise/oldboy/day2/string.py
My name is chenjisong
3
==============my name is chenjisong==============
True
my name is chenjisong
4
True
True
True
False
True
False
False
True
True
True
False
1*2*3*4
my name is chenjisong****************************
****************************my name is chenjisong
chenjisong
CHENJISONG
Chenjisong
Chenjisong
Chenjisong
cheNjisoNg
8
['1', '2', '3', '4']
['1+2', '+3+4']
cHENjIsONG
Chen Ji Song
00000000000000000000000000000000000000chen ji song
Process finished with exit code 0
第二周-第12章节-Python3.5-字典的使用
字典一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划、字母来查对应页的详细内容。
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: dictionary.py
@time: 2019/04/22
url:https://www.liaoxuefeng.com
functions:
Software:JetBrains PyCharm 4.5.3
"""
'''
info = {
'stu001':"lanmao",
'stu002':"taoqi",
'stu003':"feifei"
}
#字典是无序的
print(info)
#通过key取value值
print(info["stu002"])
#通过key值修改value值
info["stu002"]="淘气"
print(info)
#创建一个item
info["stu004"]="chenjisong"
print(info)
#删除value
del info["stu004"]
print(info)
#删除pop
info.pop("stu001")
print(info)
#随机删除popitem
info.popitem()
print(info)
'''
info = {
'stu001':"lanmao",
'stu002':"taoqi",
'stu003':"feifei"
}
#查找 info.get,如果存在显示ture,如果不存在显示None
print(info.get("stu004"))
print("stu001" in info)
#更新update,有值更新,无值合并字典
b = {
'stu001':"chenjisong",
'3':'5',
'4':'6'
}
info.update(b)
print(info)
##初始化一个新的字典
c = dict.fromkeys([6,7,8],[1,{"name":"chenjisong"},444])
print(c)
c[7][1]["name"] = "orson chen"
print(c)
#字典的循环
info = {
'stu001':"lanmao",
'stu002':"taoqi",
'stu003':"feifei"
}
###直接取索引,高效
for i in info:
print(i,info[i])
##将字典变成列表,再取值,低效
for k,v in info.items():
print(k,v)
#把字典转换成列表
print(info.items())
'''
#多级字典的嵌套
av_catalog = {
"欧美":{
"www.youporn.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}
print(av_catalog)
av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
print(av_catalog["大陆"]["1024"])
#ouput
['全部免费,真好,好人一生平安', '服务器在国外,慢,可以用爬虫爬下来']
'''
第二周-第13章节-Python3.5-三级菜单实例
#!/usr/bin/env python
#-*- coding:utf-8 _*-
"""
@author:chenjisong
@file: Three Level.py
@time: 2019/04/23
url:https://www.liaoxuefeng.com
functions:三级菜单,在每个层级都能够退出
Software:JetBrains PyCharm 4.5.3
"""
data = {
'北京':{
"昌平":{
"沙河":["oldboy","test"],
"天通苑":["链家地产","我爱我家"]
},
"朝阳":{
"望京":["奔驰","陌陌"],
"国贸":{"CICC","HP"},
"东直门":{"Advent","飞信"},
},
"海淀":{},
},
'山东':{
"德州":{},
"青岛":{},
"济南":{}
},
'广东':{
"东莞":{},
"常熟":{},
"佛山":{},
},
}
exit_flag = False
while not exit_flag:
for i in data:
print(i)
choice = input("选择进入1>>:")
if choice in data:
while not exit_flag:
for i2 in data[choice]:
print(" ",i2)
choice2 = input("选择进入2>>:")
if choice2 in data[choice]:
while not exit_flag:
for i3 in data[choice][choice2]:
print(" ", i3)
choice3 = input("选择进入3>>:")
if choice3 in data[choice][choice2]:
for i4 in data[choice][choice2][choice3]:
print(" ",i4)
choice4 = input("最后一层,按b返回>>:")
if choice4 == "b":
pass
elif choice4 == "q":
exit_flag = True
if choice3 == "b":
break
elif choice3 == "q":
exit_flag = True
if choice2 == "b":
break
elif choice2 == "q":
exit_flag = True
第二周-第14章节-Python3.5-本周作业-购物车优化
购物车
用户入口:
1、商品信息存在文件里
2、已购商品,余额记录
商家入口:
1、可以添加商品,修改商品价格