实例演示

 

1.写一个函数,接受一个参数,如果是文件,就执行这个文件,如果是文件夹,就执行这个文件夹下的所有的py文件

def func(path):
    # 先判断这个path是文件还是文件夹,isdir isfile
    # 如果是文件,.py结尾的
    if os.path.isfile(path) and path.endswith('.py'):
        # 执行这个文件 :
        os.system('python %s'%path)  # 模拟了在cmd中执行代码的过程
    # 如果是文件夹
    elif os.path.isdir(path):
        # 查看这个文件夹下的所有内容  listdir
        for name in os.listdir(path):
            abs_path = os.path.join(path,name)
            # 如果是文件 .py结尾的
            if abs_path.endswith('.py'):
                # 执行这个文件 : os.system('python %s'%abs_path)
                os.system('python %s' % abs_path)
func(r'F:/python/kecheng/day20/code/day20/z20.py')
func(r'F:\python')

2、写一个copy函数,接受两个参数,第一个参数是源文件的位置,第二个参数是目标位置,将源文件copy到目标位置。
还需要判断一下这个文件之前是否存在

def copy(path1,path2):
    filename = os.path.basename(path1)
    if os.path.isfile(path1) and os.path.isdir(path2):
        path2 = os.path.join(path2,filename)
        if os.path.exists(path2):print('已有同名文件')
        with open(path1,'rb') as f1,open(os.path.join(path2,filename),'wb') as f2:
            content = f1.read()
            f2.write(content)
copy(r'F:/python/kecheng/day20/code/day20/z20.py',r'F:\python')

3、获取某个文件所在目录的上一级目录,例如'D:\sylar\s15\day19\6.序列化模块.py'目录的结果 :D:\sylar\s15

# 方法1
path = os.path.dirname(r'F:/python/kecheng/day20/code/day20/z20.py')
base_name = os.path.dirname(path)
print(base_name)
# 方法2
base_name = os.path.dirname(os.path.dirname(r'F:/python/kecheng/day20/code/day20/z20.py'))
print(base_name)

4、使用os模块创建如下目录结构

# glance/
#
# ├── __init__.py
#
# ├── api
#
# │ ├── __init__.py
#
# │ ├── policy.py
#
# │ └── versions.py
#
# ├── cmd
#
# │ ├── __init__.py
#
# │ └── manage.py
#
# └── db
#
# ├── __init__.py
#
# └── models.py
# 创建文件夹
# 创建文件
os.makedirs('glance/api')
os.makedirs('glance/cmd')
os.makedirs('glance/db')
open('glance/api/__init__.py','w').close()
open('glance/api/policy.py','w').close()
open('glance/api/versions.py','w').close()
open('glance/cmd/__init__.py','w').close()
open('glance/cmd/manage.py','w').close()
open('glance/db/__init__.py','w').close()
open('glance/db/models.py','w').close()

5、写一个用户注册登陆的程序,每一个用户的注册都要把用户名和密码用字典的格式写入文件userinfo。
在登陆的时候,再从文件中读取信息进行验证。

{'usr':'alex','pwd':'alex3714'}
import pickle
def register():
    usr = input('username :')
    pwd = input('password : ')
    dic = {usr:pwd}
    with open('userinfo','ab') as f:
        pickle.dump(dic,f)
    print('注册成功')

def login():
    flag = True
    usr = input('username :')
    pwd = input('password : ')
    with open('userinfo', 'rb') as f:
        while flag:
            try :
                dic = pickle.load(f)
                for k,v in dic.items():
                    if k == usr and pwd == v:
                        print('登录成功')
                        flag = False
                        break
            except EOFError:
                print('登录失败')
                break

register()
login()

6、发红包 random

import random
def red_packet(money,num):
    money = money * 100
    ret = random.sample(range(1,money),num-1)
    ret.sort()
    ret.insert(0,0)
    ret.append(money)
    for i in range(len(ret)-1):
        yield (ret[i+1] - ret[i])/100

ret_g = red_packet(200,10)
for money in ret_g:
    print(money)

 

7.计算器

import re
def atom_cal(exp):
    if '*' in exp:
        a,b = exp.split('*')
        return str(float(a) * float(b))
    elif '/' in exp:
        a, b = exp.split('/')
        return str(float(a) / float(b))

def format_exp(exp):
    exp = exp.replace('--','+')
    exp = exp.replace('+-','-')
    exp = exp.replace('-+','-')
    exp = exp.replace('++','+')
    return exp

def mul_div(exp):
    while True:
        ret = re.search('\d+(\.\d+)?[*/]-?\d+(\.\d+)?',exp)
        if ret:
            atom_exp = ret.group()
            res = atom_cal(atom_exp)
            exp = exp.replace(atom_exp,res)
        else:return exp

def add_sub(exp):
    ret = re.findall('[+-]?\d+(?:\.\d+)?', exp)
    exp_sum = 0
    for i in ret:
        exp_sum += float(i)
    return exp_sum

def cal(exp):
    exp = mul_div(exp)
    exp = format_exp(exp)
    exp_sum =  add_sub(exp)
    return exp_sum   # float

def main(exp):
    exp = exp.replace(' ','')
    while True:
        ret = re.search('\([^()]+\)',exp)
        if ret :
            inner_bracket = ret.group()
            res = str(cal(inner_bracket))
            exp = exp.replace(inner_bracket,res)
            exp = format_exp(exp)
        else:break
    return cal(exp)

s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
ret = main(s)
print(ret,type(ret))
posted @ 2018-08-22 21:52  骑驴老神仙  阅读(326)  评论(0)    收藏  举报