一、os模块
os是系统自带的模块
通过os.来进行使用
1、os.name查询系统名
res = os.name
print(res)
2、os.system调用系统命令
os.system("ipconfig") #使用在cmd中可以使用的命令都可以用
os.system("notepad")
3、os.getcwd()返回当前工作路径
绝对路径:从盘服开始的
相对路径:相对于当前工作路径写出的路径 …/上一级目录
res = os.getcwd()
print(res)
4、os.listdir() 返回指定目录下的所有文件与文件夹
res = os.listdir("G:\project\pyProject\day13")
print(res)
res = os.listdir() #"../" 则返回上一级目录
print(res)
5、os.remove 删除指定文件
os.remove("../txt")
6、os.mkdir 创建目录 os.makedirs 创建多级目录
os.mkdir("../day14")
os.makedirs("../day14/day15/day16")
7、os.rmdir 删除指定目录
os.rmdir("../day14/day15/day16") #删除了day16
8、os.removedirs 删除路劲中所有空文件
os.removedirs("../day14/day15")
"""
如果文件夹中有文件不为空,则删除不掉,使用os不行
使用shutil可以,shutil.rmtree("../day14")可以直接删除day14及其内部的东西
"""
9、os.chdir 更换工作路径
os.chdir("../day13")
res = os.getcwd()
print(res)
10、os.rename 更名,注意两个参数都是路径
os.rename("../day10/a.py","../day10/b.py")#如果不写路径就会改到其他文件夹去导致文件位置改变
11、#os.walk 遍历目录下所有目录与文件
第一个参数:返回一个路径
第二个参数:这个路径下所有目录
第三个参数:这个路径下所有文件
res = os.walk("../")
for var in res: #res是生成器
print(var)
二、os.path方法
1、os.path.abspath将相对路径转化为绝对路径
#-*- coding: utf-8 -*-
import os
#os.path.abspath
#将相对路径转化为绝对路径
res = os.path.abspath("../day10/b.py")#G:\project\pyProject\day10\b\py
print(res)
"""
在window中,文件夹使用\来显示,这样可能是转义字符,要用“\\”
最好写成//
之后还会遇到这样转换操作 "".replace("\\","/")
"""
2、os.path.split 分割目录和文件名
#os.path.split 分割目录和文件名
res = os.path.split("G:\project\pyProject\day10/b.py")
print(res) #('G:\\project\\pyProject\\day10', 'b.py')
3、os.path.join 拼接目录和文件名
#os.path.join 拼接目录和文件名
res = os.path.join("G:\\project\\pyProject\\day10","b.py")
print(res) #G;\project\pyProject\day10\b.py
4、os.path.exists 判断一个路径是否存在
#os.path.exists 判断一个路径是否存在
res = os.path.exists("G:\\project\\pyProject\\day10\\b.py")
print(res)
5、os.path.isfile 判断是否是一个文件
res = os.path.isfile("G:\project\pyProject\day10\\b.py")
print(res)
6、os.path.isdir 判断是否是一个目录
#os.path.isdir 判断是否是一个目录
res = os.path.isdir("G:/project/pyProject/day10")
print(res)
7、os.path.getsize 获取一个文件大小
#os.path.getsize 获取一个文件大小
res = os.path.getsize("G:\project\pyProject\day10\optionOfDict.py")
print(res) #1663字节
三、递归函数
递归,自身调用自身 最重要的是找到一个出口
好处:精简程序执行中的重复调用
例如:
求阶乘
#求阶层 5*4*3*2*1
def func(n):
if n == 1:
return 1
else:
return func(n-1) * n
"""
res = func(4)*5 -> func(3)*4*5 -> func(2)*3*4*5 -> func(1)*2*3*4*5
res = 1*2*3*4*5
注意
每调用一次函数就会增加一层栈帧 没计算一次就会少一层栈帧
栈帧超过999就会报错
"""
res = func(5) #999报错,超出了递归的最大范围
print(res)
为了防止栈溢出报错,我们需要引用尾递归方法
遗憾的是python目前没有对尾递归进行优化
#尾递归
def fact(n):
return fact_iter(n,1)
def fact_iter(num,product):
if num == 1:
return product
else:
return fact_iter(num-1,product*num)
# fact_iter(4,5)
# fact_iter(3,20)
# fact_iter(2.60)
# fact_iter(1,120)
# product = 120
print(fact(5))
计算斐波那契额数列
1、1、2、3、5、8、13、21、34、、、n
def funcFBNQ(n):
if n==1 or n==2:
return 1
else:
return funcFBNQ(n-2) + funcFBNQ(n-1)
#这个数为前两个数加前一个数
print(funcFBNQ(10))
汉诺塔游戏
def funcHNT(n,a,b,c):
if n==1:
print(a,"-->",c)
else:
funcHNT(n-1,a,c,b)
print(a,"-->",c)
funcHNT(n-1,b,a,c)
funcHNT(3,"a","b","c")
四、超市小练习
#-*- coding: utf-8 -*-"
shop_list = [["健力宝",5.6],["加多宝",10],["QQ星",50],["动脉",100]]
buy_list = []
prise = 0
print("====================宝昌面包=====================")
for num,shop in enumerate(shop_list):
print(num,shop[0],shop[1])
print("按0退出系统")
print("=================================================")
salary = int(input("请输入你有多少salary:"))
if salary > 0:
while True:
buyNum = int(input("请输入你要买的商品:"))
if buyNum == 0:
break
if salary >= shop_list[buyNum-1][1]:
print("购买成功")
salary -= shop_list[buyNum-1][1]
prise += shop_list[buyNum-1][1]
buy_list.append(shop_list[buyNum-1][0])
print("感谢购买,消费%s,余额%s" %(shop_list[buyNum-1][1],salary))
else:
print("无法购买,穷逼")
else:
print("清先充钱")
print("购买清单为:")
for var in buy_list:
print(var)
print("感谢使用")