Python的强大之处在它有非常丰富强大的标准库和第三方库,几乎你想实现的任何功能都有相应的库支持。
主要学习标准库中的sys和os库:
sys库
import sys
print(sys.path) # 打印环境变量所在的路径
print("<<<<----------------->>>>")
print(sys.argv) # 打印脚本当前的绝对路径
G:\Project1\venv\Scripts\python.exe G:/Project1/practice.py
['G:\\Project1', 'G:\\Project1', 'G:\\Python38\\python38.zip', 'G:\\Python38\\DLLs', 'G:\\Python38\\lib', 'G:\\Python38', 'G:\\Project1\\venv', 'G:\\Project1\\venv\\lib\\site-packages']
<<<<----------------->>>>
['G:/Project1/practice.py']
Process finished with exit code 0
os库
import os
cmd_res = os.system("dir") # 执行命令,查看磁盘中的文件,不保存结果(这儿会乱码,并不是编辑器有问题,嘻嘻)syetem可以将字符串转化为命令在服务器上运行(类似于windows下的dos命令窗口)
print(cmd_res)
print("<<<<----------------->>>>")
cmd_res = os.popen("dir").read() # popen能够打开一个管道,获取输入到cmd控制台的信息
print(cmd_res)
print("<<<<----------------->>>>")
os.mkdir("mu_lu") # 当前目录下创建新文件夹,"mu_lu"为新创建的文件名
G:\Project1\venv\Scripts\python.exe G:/Project1/practice.py
������ G �еľ��� �¼Ӿ�
�������� FAA2-F9B8
G:\Project1 ��Ŀ¼
2020/10/28 18:54 <DIR> .
2020/10/28 18:54 <DIR> ..
2020/10/28 18:52 <DIR> .idea
2020/10/21 16:21 2,731 day1.py
2020/10/24 12:57 3,698 day2.py
2020/10/26 20:38 3,704 day3.py
2020/10/28 16:27 2,126 homework1.py
2020/10/15 15:12 544 main.py
2020/10/28 16:36 <DIR> practice
2020/10/28 18:54 4,839 practice.py
2020/10/15 15:06 <DIR> venv
6 ���ļ� 17,642 �ֽ�
5 ��Ŀ¼ 258,955,628,544 �����ֽ�
0
<<<<----------------->>>>
驱动器 G 中的卷是 新加卷
卷的序列号是 FAA2-F9B8
G:\Project1 的目录
2020/10/28 18:54 <DIR> .
2020/10/28 18:54 <DIR> ..
2020/10/28 18:52 <DIR> .idea
2020/10/21 16:21 2,731 day1.py
2020/10/24 12:57 3,698 day2.py
2020/10/26 20:38 3,704 day3.py
2020/10/28 16:27 2,126 homework1.py
2020/10/15 15:12 544 main.py
2020/10/28 16:36 <DIR> practice
2020/10/28 18:54 4,839 practice.py
2020/10/15 15:06 <DIR> venv
6 个文件 17,642 字节
5 个目录 258,955,628,544 可用字节
<<<<----------------->>>>
Process finished with exit code 0
第三方库
首先是我自己写了一个很low的账户密码输入登录作为今天的第三方库,哈哈哈(抱歉,实在没忍住笑了!!!)
库名为:pwd.py<<<------>>>库中的代码为
username_ = "hpl"
password_ = "123456"
i = 0
while i < 3:
username = input("username:")
password = input("password:")
if username == username_ and password == password_:
print("welcome to my world {user}".format(user=username))
break
else:
print("The account number or password is wrong. Please check!")
i += 1
else:
print("Account or password input error too many times, locked!")
然后咱们在同一路径下的另一个py文件中去调用它(简简单单的来一个)
import pwd
look,look,调用成功,嘻嘻
G:\Project1\venv\Scripts\python.exe G:/Project1/practice/lianxi1.py
username:hp
password:123
The account number or password is wrong. Please check!
username:hpl1234
password:123456
The account number or password is wrong. Please check!
username:hpl
password:123456
welcome to my world hpl
Process finished with exit code 0
看,是不是觉得Python这个引用模块的功能很强大!!!
既然是解释型语言,那么生成的.pyc是什么?
计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机"来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。
编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是c语言。
解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行。
通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译",所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。
其实Python和Java一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。
当我们在命令行中输入python hello.py时,其实是激活了Python的"解释器",告诉"解释器":你要开始工作了。可是在“解释"之前,其实执行的第一项工作和Java一样,是编译。
熟悉Java的小伙伴可以想一下我们在命令行中如何执行一个Java的程序:
javac hello.java
java hello
只是我们在用Eclipse之类的IDE时,将这两步给融合成了一步而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
3就是一个整数的例子
3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3*10-4。
(-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数,j为虚数,数学中表示复数是什么?
大家是否记得,数学中的虚数单位是用i表示的,而Python中却是j,纳尼(使劲推了推隐形眼镜),难道是???”他们“数学不行…打住,不要乱想,这是因为Python遵循了电器工程师使用的惯例,
int(整型)
在64位系统上,整数的位数为64位,取值范围为-263~263-1,即-9223372036854775808~9223372036854775807
float(浮点型)
浮点数用来处理实数,即带有小数的数字。
真或假
1或0
“Hello World”
万恶的字符串拼接:
python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。
字符串的格式化输出
name = "hpl"
print("I im %s" % name)
G:\Project1\venv\Scripts\python.exe G:/Project1/practice/lianxi1.py
I im hpl
Process finished with exit code 0
①算数运算符
②增强运算符
③比较运算符
④逻辑运算符
and(与)、or(或)、not(非)
逻辑运算and和or涉及短路,一但结果确定,后面的表达式将不再执行,因此尽量将耗时的判断放在后面。
and(与)、or(或)、not(非)
注:逻辑运算and和or涉及短路,即一但结果确定,后面的表达式将不再执行,因此尽量将耗时的判断放在后面。运算符的优先级
逻辑运算符—>比较运算符—>算数运算符
---------------->>>>从左到右由低到高
a, b, c = 1, 3, 5
d = a if a > b else c
print(d)
d = a if a < b else c
print(d)
G:\Project1\venv\Scripts\python.exe G:/Project1/practice/lianxi1.py
5
1
Process finished with exit code 0
二进制:01
八进制:01234567
十进制:012345789
十六进制:0123456789ABCDEF
name = ["XiaoWang", "LiMing", "ZhangSan", "LiSi", "WangWu", "ZhaoLiu"]
print(name)
print(name[0], name[3])
print(name[0:3])
print(name[-6:-3]) # 和上一个表示的意思相同
name.append("XiaoLi") # 往最后添加一个XiaoLi
print(name)
name.insert(2, "LiHua") # 在第二个位置插入LiHua
print(name)
name[2] = "XieDi" # 将下标为2的元素更换为XieDi
print(name)
name.remove("XiaoLi") # 删除XiaoLi
print(name)
del name[2] # 删除下标为2的元素
print(name)
name.pop() # 默认删除最后一个元素
print(name)
name.pop(1) # 删除下标为1的元素
print(name)
name.sort() # 默认按ASCII码的顺序进行排列(特殊字符>数字>大写英文>小写英文)
print(name)
a = name.count("XiaoWang") # 查找列表中某个元素出现的次数
print(a)
name.reverse() # 将列表中的所有元素位置进行反转
print(name)
name2 = [1, 2, 3, 4, 5, 6]
name.extend(name2) # 将列表name进行扩展,在后面添加上name2
print(name)
name.clear() # 删除列表中所有的元素,并返回一个空列表
print(name)
print("<<<<<<<<------------------>>>>>>>>>")
season = ["spring", "summer", "fall", "winter"]
print(list(enumerate(season)))
print(list(enumerate(season, start=1)))
print("<<<<<<<<------------------>>>>>>>>>")
season = ["spring", "summer", "fall", "winter"]
for i in enumerate(season, start=1):
print(i)
G:\Project1\venv\Scripts\python.exe G:/Project1/day2.py
['XiaoWang', 'LiMing', 'ZhangSan', 'LiSi', 'WangWu', 'ZhaoLiu']
XiaoWang LiSi
['XiaoWang', 'LiMing', 'ZhangSan']
['XiaoWang', 'LiMing', 'ZhangSan']
['XiaoWang', 'LiMing', 'ZhangSan', 'LiSi', 'WangWu', 'ZhaoLiu', 'XiaoLi']
['XiaoWang', 'LiMing', 'LiHua', 'ZhangSan', 'LiSi', 'WangWu', 'ZhaoLiu', 'XiaoLi']
['XiaoWang', 'LiMing', 'XieDi', 'ZhangSan', 'LiSi', 'WangWu', 'ZhaoLiu', 'XiaoLi']
['XiaoWang', 'LiMing', 'XieDi', 'ZhangSan', 'LiSi', 'WangWu', 'ZhaoLiu']
['XiaoWang', 'LiMing', 'ZhangSan', 'LiSi', 'WangWu', 'ZhaoLiu']
['XiaoWang', 'LiMing', 'ZhangSan', 'LiSi', 'WangWu']
['XiaoWang', 'ZhangSan', 'LiSi', 'WangWu']
['LiSi', 'WangWu', 'XiaoWang', 'ZhangSan']
1
['ZhangSan', 'XiaoWang', 'WangWu', 'LiSi']
['ZhangSan', 'XiaoWang', 'WangWu', 'LiSi', 1, 2, 3, 4, 5, 6]
[]
<<<<<<<<------------------>>>>>>>>>
[(0, 'spring'), (1, 'summer'), (2, 'fall'), (3, 'winter')]
[(1, 'spring'), (2, 'summer'), (3, 'fall'), (4, 'winter')]
<<<<<<<<------------------>>>>>>>>>
(1, 'spring')
(2, 'summer')
(3, 'fall')
(4, 'winter')
Process finished with exit code 0
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
它只有两个方法,一个是count,一个是index。
names = ("XiaoWang", "LiMing", "ZhangSan", "LiMing", "LiSi", "WangWu", "ZhaoLiu", "LiMing")
print(names)
print(names.count("LiMing")) # 查询元组中某个字符出现的次数
print(names.index("ZhangSan")) # 检测字符串中是否包含某个字符串,如果包含字符串返回索引值,否则抛出异常。
G:\Project1\venv\Scripts\python.exe G:/Project1/day2.py
('XiaoWang', 'LiMing', 'ZhangSan', 'LiMing', 'LiSi', 'WangWu', 'ZhaoLiu', 'LiMing')
3
2
Process finished with exit code 0
那么我们什么时候用元组呢?
通俗的讲,可以用于一些程序一但写好启动以后就不想被别人修改的程序。that is to say,当别人看到你使用了元组,就明白此处不允许被修改。
程序:购物车程序
需求:
1.启动程序后,让用户输入工资,然后打印商品列表
2.允许用户根据商品编号购买商品
3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4.可随时退出,退出时,打印已购买商品和余额
# 购物车is very low!!!
product_list = [ # 建立商品列表
("iphone", 6400),
("bike", 800),
("ipad", 3400),
("watch", 1400),
("book", 40),
("xiaomi", 2999),
]
shopping_list = [] # 创建一个空的列表,方便存储或取出
money = input("please input your money:")
if money.isdigit(): # 判断用户输入的钱数是不是数字
money = int(money) # 如果是转换成int型
while True:
for index, item in enumerate(product_list): # 用enumerate得到列表中元素的下标
# print(product_list.index(item), item)
print(index, item)
user_choice = input("Please choose the goods you want to buy!>>>>>>>>") # 让用户选择要买的商品
print("if you want to exit the program, please enter Q or q!") # 如果用户想退出,就输入Q或q
if user_choice.isdigit(): # 判断用户输入的商品列表是不是数字
user_choice = int(user_choice) # 如果用户输入的是数字,转换成int型
if len(product_list) > user_choice >= 0: # 判断用户输入的是否是列表中已有的商品
product_goods = product_list[user_choice] # 如果是,就从商品列表中拿到其对应的商品
if product_goods[1] <= money: # 判断用户选择商品的价格是否小于用户的钱
shopping_list.append(product_goods) # 如果是,就在空列表中加入新商品
money -= product_goods[1] # 再用工资减去商品价格
print("Added %s into shopping cart,your currents balance is \033[31;1m%s\033[0m!" % (
product_goods, money))
else:
print("\033[41;1mSorry, you have %s yuan left. You can't buy this product! Please recharge or "
"purchase other products! thank you!!!\033[0m" % money) # 否则用户的钱小于商品的价格将无法加入空列表中
else:
print("Sorry, the product %s does not exist, please re-enter!!!" % user_choice) # 用户选择的不是商品列表中已有的商品
elif user_choice == "Q" or "q": # 输入Q或q退出
print("-----------shopping list----------") # 打印已购买商品的列表
for p in shopping_list:
print(p)
print("Your balance is:", money) # 打印购买完后用户剩余的工资
exit()
else:
print("error!!!")
G:\Project1\venv\Scripts\python.exe G:/Project1/day2.py
please input your money:5000
0 ('iphone', 6400)
1 ('bike', 800)
2 ('ipad', 3400)
3 ('watch', 1400)
4 ('book', 40)
5 ('xiaomi', 2999)
Please choose the goods you want to buy!>>>>>>>>1
if you want to exit the program, please enter Q or q!
Added ('bike', 800) into shopping cart,your currents balance is 4200!
0 ('iphone', 6400)
1 ('bike', 800)
2 ('ipad', 3400)
3 ('watch', 1400)
4 ('book', 40)
5 ('xiaomi', 2999)
Please choose the goods you want to buy!>>>>>>>>0
if you want to exit the program, please enter Q or q!
Sorry, you have 4200 yuan left. You can't buy this product! Please recharge or purchase other products! thank you!!!
0 ('iphone', 6400)
1 ('bike', 800)
2 ('ipad', 3400)
3 ('watch', 1400)
4 ('book', 40)
5 ('xiaomi', 2999)
Please choose the goods you want to buy!>>>>>>>>2
if you want to exit the program, please enter Q or q!
Added ('ipad', 3400) into shopping cart,your currents balance is 800!
0 ('iphone', 6400)
1 ('bike', 800)
2 ('ipad', 3400)
3 ('watch', 1400)
4 ('book', 40)
5 ('xiaomi', 2999)
Please choose the goods you want to buy!>>>>>>>>1
if you want to exit the program, please enter Q or q!
Added ('bike', 800) into shopping cart,your currents balance is 0!
0 ('iphone', 6400)
1 ('bike', 800)
2 ('ipad', 3400)
3 ('watch', 1400)
4 ('book', 40)
5 ('xiaomi', 2999)
Please choose the goods you want to buy!>>>>>>>>4
if you want to exit the program, please enter Q or q!
Sorry, you have 0 yuan left. You can't buy this product! Please recharge or purchase other products! thank you!!!
0 ('iphone', 6400)
1 ('bike', 800)
2 ('ipad', 3400)
3 ('watch', 1400)
4 ('book', 40)
5 ('xiaomi', 2999)
Please choose the goods you want to buy!>>>>>>>>q
if you want to exit the program, please enter Q or q!
-----------shopping list----------
('bike', 800)
('ipad', 3400)
('bike', 800)
Your balance is: 0
Process finished with exit code 0
害,实在是太low了,不过还好能凑合按要求运行出来(哈哈哈)
嗯哼,居然是太长了,那我也只好将其分为两篇
链接: 第二周学Python(2).