day13:os模块、os.path方法、递归函数

一、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("感谢使用")

路径中有中文报错时,在文件头加上即可 #-- coding: utf-8 --

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值