1 自定义目录 ,我们可以同时创建多级目录来满足我们的需求,比如不同目录下的文件夹存放的东西等
import os
os.makedirs('file02/file03/file04')
def mkdirs(path):
path_lst = path.split('/')
# print(os.getcwd())
for file in path_lst:
if os.path.exists(file):
os.chdir(file)
else:
os.mkdir(file)
os.chdir(file)
# print(os.getcwd())
同时呢我们还可以对此目录进行一定的优化处理
def mkdirs(path):
path_lst = path.split('/')
# print(os.getcwd())
for file in path_lst:
if not os.path.exists(file):
os.mkdir(file)
os.chdir(file)
# print(os.getcwd())
if __name__ == '__main__':
mkdirs('file03/file04/file05')
为了满足其他的一些需求 ,不仅要创建目录,还要将其中的文件夹或者文件名称进行改动,比如添加前缀,写了一段代码,添加文件等 大家参考一下:
import os
while True:
content = input('请输入目录:')
if os.path.exists(content):
"""表示路径存在"""
os.chdir(content)
all_file_lst = os.listdir(os.getcwd())
print(all_file_lst)
file_lst = [] # 保存所有的文件
dir_lst = [] # 保存所有的文件夹
# os.chdir('..') #表示上一层
# os.path.basename(os.getcwd()) #获取根目录
for file in all_file_lst:
if os.path.isfile(file):
"""文件"""
file_lst.append(file)
else:
"""文件夹"""
dir_lst.append(file)
print('文件:{}'.format(file_lst))
print('文件夹:{}'.format(dir_lst))
ret = input('请选择操作:添加前缀(A) 删除前缀(D)添加文件(C)删除文件(DEL)重命名(R) 退出(Q)')
if ret.lower() == 'a':
prefix = input('请输入要添加前缀')
for file in all_file_lst:
os.rename(file, prefix + file)
print('前缀添加成功!!')
elif ret.lower() == 'd':
prefix = input('请输入要删除前缀')
for file in all_file_lst:
os.rename(file, file.replace(prefix, ''))
print('删除前缀成功!!')
elif ret.lower() == 'c':
file_name = input('请输入文件名称:')
with open(file_name, mode='w') as f:
print('创建成功!!')
elif ret.lower() == 'del':
"""删除文件"""
file_name = input('请输入要删除的文件名称:')
os.remove(file_name)
print('删除成功!!')
elif ret.lower() == 'r':
file = input('请输入要修改的名称和新名称[old new]')
file = file.split()
os.rename(file[0], file[1])
print('修改成功!!')
elif ret.lower() == 'q':
quit()
else:
print('输入错误')
os.chdir(os.path.dirname(os.getcwd())) # 获取上一层目录
else:
print('路径不存在,请重新输入')
2 个税计算器简介
用于计算税款等 ,主要是逻辑判断 ,有兴趣的小伙伴可以借用修改,做一些其他的判断
def calculator():
try:
all_money = int(input('请输入你的工资:'))
# 1 计算要缴纳的税
should_money = all_money - all_money * 0.165 - 5000
if should_money <= 1500:
pay_taxes = should_money * 0.03 - 0
elif should_money <= 4500 and should_money > 1500:
pay_taxes = should_money * 0.1 - 105
elif should_money <= 9000 and should_money > 4500:
pay_taxes = should_money * 0.2 - 555
elif should_money <= 35000 and should_money > 9000:
pay_taxes = should_money * 0.25 - 1005
else:
print('不上了')
wxyj = all_money * 0.165
pay_taxes_later = all_money - pay_taxes - wxyj
print('总工资{},五险一金{},纳税{},实发工资{}'.format(all_money, wxyj, should_money, pay_taxes_later))
except Exception as e:
print('输入错误')
if __name__ == '__main__':
pass
3人机猜数字
利用random模块来模拟的猜数字游戏,如果比想猜到的数字大会提示,小了也会提示,从而减小范围,最终猜到。玩家猜一次,电脑猜一次
import random, time
bomb = random.randint(0, 99)
print('数字炸弹', bomb)
start = 0
end = 99
while True:
people = int(input('请输入{}到{}之间的数字'.format(start, end)))
if people > bomb:
print('大了')
start = start
end = people - 1
elif people < bomb:
print('小了')
start = people + 1
end = end
else:
print('bomb')
break
print('电脑输入{}到{}之间的数字'.format(start, end))
time.sleep(2)
computer = random.randint(start, end)
print('电脑生成的是{}'.format(computer))
if computer > bomb:
print('大了')
start = start
end = computer - 1
elif computer < bomb:
print('小了')
start = computer + 1
end = end
else:
print('bomb')
break
print('数字炸弹,bommmmmm')
4自定义抛出异常
有些时候,我们在写代码是需要自定义抛出异常,从从而来达到我们的目的,举一个很简单的例子,在某些网站输入账号或者密码时,会要求长度在几位到几位之间,不能因为长了或者短了引起崩溃吧,所以需要自定义异常来处理,我们看一下例子
class ShortInputException(Exception):
def __init__(self, length, least_length):
self.length = length
self.least_length = least_length
def __str__(self):
return '您输入的长度是{},要求至少输入{}长度'.format(self.length, self.least_length)
while True:
try:
content = input('请输入内容')
if len(content) < 5:
raise ShortInputException(len(content), 5)
else:
print('符合要求')
break
except ShortInputException as e:
print(e)
其中 ShortInputException使我们自己定义的异常类,他继承Exceotion父类,从而来判断输入内容过段的问题,之后可以做一些其他的逻辑操作。
5 模拟下载一个下载过程
这里其实是用到进程池的方法做到的,大家可以看一下,在下载结束时可以做一些其他的逻辑操作或者方法调用
from multiprocessing import Pool
import time
def down_load(movie_name):
for i in range(5):
print('电影:{},下载进度{}%'.format(movie_name, (i / 4 * 100)))
time.sleep(1)
return movie_name
def alert(movie_name):
print('恭喜{}下载完成了...'.format(movie_name))
if __name__ == '__main__':
movie_lst = ['西红柿首富', '功夫小子', '功夫熊猫', '叶问', '功夫', '战狼', '红海行动']
pool = Pool(3)
for movie_name in movie_lst:
pool.apply_async(down_load, (movie_name,), callback=alert)
pool.close()
pool.join()
6 设计模式之观察者模式
举一个很简单的例子,上课时候,一部分同学睡觉,在老师来的时候需要没有睡觉的同学(比如班长)来提醒睡觉的同学,在这里班长起到的就是通知者的作用,睡觉的同学就是观察者。(比较拗口,大家理解……)
# 主题 班长 通知者
class Moniter(object):
def __init__(self):
self.observers = [] # 保存所有观察者对象
self.status = '' # 表示状态
def attach(self, observer):
self.observers.append(observer)
def notify(self):
for observer in self.observers:
observer.update()
# 观察者
class SleepStudentObserver(object):
def __init__(self, name, monitor):
self.name = name
self.monitor = monitor # 绑定通知者
def update(self):
print('{}来了,{}别睡觉了,起来装一下'.format(self.monitor.status, self.name))
if __name__ == '__main__':
moniter = Moniter()
observer1 = SleepStudentObserver('zs', moniter)
observer2 = SleepStudentObserver('lyc', moniter)
moniter.attach(observer1)
moniter.attach(observer2)
moniter.status = '老师'
moniter.notify()
"""
老师来了,zs别睡觉了,起来装一下
老师来了,lyc别睡觉了,起来装一下
"""
在这里只是举例了睡觉,可能还有看球赛,看小说,打游戏的,同时也可能是以宿舍为单位,若是只是提醒本宿舍的人则会需要到更过的通知者来通知做不同事情的同学(更多的观察者)。
以上为举例理解,大家可以自己进行扩展