zoukankan      html  css  js  c++  java
  • Python学习之路(十七):基础知识之模块练习

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

     1 import os
     2 def func(path):
     3     if os.path.isfile(path) and path.endswith('.py'):
     4         os.system('python %s' % path)
     5     elif os.path.isdir(path):
     6         for name in os.listdir(path):
     7             abs_path = os.path.join(path, name)
     8             if abs_path.endswith('.py'):
     9                 os.system('python %s' % abs_path)
    10 
    11 
    12 func(r"D:untitled2day151序列化模块.py")

    2.写一个copy函数,接受两个参数,第一个参数是源文件的位置,第二个参数是目标位置,将源文件copy到目标位置

     import os
    1
    def copy(path1, path2): 2 file_name = os.path.basename(path1) 3 if os.path.isfile(path1) and os.path.isdir(path2): 4 path2 = os.path.join(path2, file_name) 5 if os.path.exists(path2): 6 print('已有同名文件!') 7 with open(path1, 'rb') as f1, open(os.path.join(path2, file_name), 'wb') as f2: 8 content = f.read() 9 f2.write(content) 10 copy(path1, path2)

    3.获取某个文件所在目录的上一级目录

    import os
    1
    path = os.path.dirname(r'D:untitled2day151序列化模块.pyr') 2 print(path) 3 base_name = os.path.dirname(path) 4 print(base_name)

    4.创建python目录

     import os
    1
    os.makedirs('glance/api') 2 os.makedirs('glance/cmd') 3 os.makedirs('glance/db') 4 open('glance/api/__init__.py', 'w').close() 5 open('glance/api/policy.py', 'w').close() 6 open('glance/api/version.py', 'w').close() 7 open('glance/cmd/manage.py', 'w').close() 8 open('glance/cmd/__init__.py', 'w').close() 9 open('glance/db/_init__.py', 'w').close() 10 open('glance/db/models.py', 'w').close()

    5.创建一个登陆程序,用户的注册信息以字典形式保存到文件中,登陆的时候从文件中检查信息是否匹配

     1 import pickle
     2 def register():
     3     username = input('请输入用户名:')
     4     password = input('请输入密码:')
     5     dic = {'user': username, 'pwd': password}
     6     with open('user_info', 'ab') as f:
     7         pickle.dump(dic, f)
     8     print('注册成功!')
     9 
    10 def login():
    11     flag = True
    12     user_login = input('请输入用户名:')
    13     password_login = input('请输入密码:')
    14     with open('user_info', 'rb') as f:
    15         while flag:
    16             try:
    17                 dic = pickle.load(f)
    18                 if dic['user'] == user_login and dic['pwd'] == password_login:
    19                     print('登陆成功!')
    20                     flag = False
    21                     break
    22             except EOFError:
    23                 print('登陆失败')
    24                 break
    25 
    26 register()
    27 login()

     6.计算数学算式1 - 2 * ( (60 - 30 +(-40/5) *(9-2*5/3 + 7 / 3*99/4*2998 +10 *568/14)) - (-4 * 3) / (16 - 3*2))

     1 import re
     2 # 计算乘除法
     3 def atom_cal(exp):
     4     if '*' in exp:
     5         a, b = exp.split('*')
     6         return str(float(a) * float(b))
     7     elif '/' in exp:
     8         a, b = exp.split('/')
     9         return str(float(a) / float(b))
    10 # 写函数,将括号内的符号进行规范化的处理
    11 def format_exp(exp):
    12     exp = exp.replace('--', '+')
    13     exp = exp.replace('-+', '-')
    14     exp = exp.replace('++', '+')
    15     exp = exp.replace('+-', '-')
    16     return exp
    17 # 将数学算式中的乘除法先匹配出来
    18 def mul_div(exp):
    19     while True:
    20         ret = re.search(r'd+(.d+)?[*/]-?d+(.d+)?', exp)
    21         if ret:
    22             #print(ret.group())
    23             atom_exp = ret.group()
    24             res = atom_cal(atom_exp)  # 调用atom_cal函数将乘除法的结果计算出来
    25             #print(atom_exp, res)
    26             exp = exp.replace(atom_exp, res)  # 将原来的表达式中1*-22用-22替换,替换时由于res是float类型,要转换为字符串类型
    27         else:
    28             return exp
    29 # 将乘除法计算后的算式中的元素匹配出来
    30 def add_sub(exp):
    31     ret = re.findall(r'[+-]?d+(?:.d+)?', exp)
    32     print(ret)  # 结果:['2', '+22.0', '-3', '+0.8']
    33     exp_sum = 0
    34     for i in ret:
    35         exp_sum += float(i)
    36     return exp_sum
    37 
    38 #乘法或者除法先匹配
    39 def cal(exp):  # 2-1*-22-3-4/-5
    40     # while True:
    41     #     ret = re.search(r'd+(.d+)?[*/]-?d+(.d+)?', exp)
    42     #     if ret:
    43     #         #print(ret.group())
    44     #         atom_exp = ret.group()
    45     #         res = atom_cal(atom_exp)  # 调用atom_cal函数将乘除法的结果计算出来
    46     #         #print(atom_exp, res)
    47     #         exp = exp.replace(atom_exp, res)  # 将原来的表达式中1*-22用-22替换,替换时由于res是float类型,要转换为字符串类型
    48     #     else:
    49     #         break                          # 在atom_cal函数返回的结果中直接进行转换
    50     # print(exp)  # 结果:2--22.0-3--0.8,其中有符号需要处理,再建立format函数进行处理
    51     exp = mul_div(exp)
    52     exp = format_exp(exp)
    53     # 结果:2+22.0-3+0.8
    54     # ret = re.findall(r'[+-]?d+(?:.d+)?', exp)
    55     # print(ret)  # 结果:['2', '+22.0', '-3', '+0.8']
    56     # exp_sum = 0
    57     # for i in ret:
    58     #     exp_sum += float(i)
    59     # return exp_sum
    60     exp_sum = add_sub(exp)
    61     return exp_sum
    62 
    63 # ret = cal('2-1*-22-3-4/-5')
    64 # print(ret)  # 21.8
    65 
    66 # 去括号1 - 2 * ( (60 - 30 +((-40/5) *(9-2*5/3 + 7 / 3*99/4*2998 +10 *568/14)) - (-4 * 3) / (16 - 3*2))
    67 
    68 
    69 def main(exp):
    70     exp = exp.replace(' ', '')
    71     while True:
    72         ret = re.search(r'([^()]+)', exp)
    73         if ret:
    74             inner_bracket = ret.group()  # (-40/5)
    75             res = str(cal(inner_bracket))  # ['-8.0']
    76             exp = exp.replace(inner_bracket, res)
    77             print(exp)
    78             exp = format_exp(exp)
    79             print(exp)
    80         else:break
    81     return cal(exp)
    82 s = '1 - 2 * ( (60 - 30 +(-40/5) *(9-2*5/3 + 7 / 3*99/4*2998 +10 *568/14)) - (-4 * 3) / (16 - 3*2))'
    83 ret = main(s)
    84 print(ret)
    85 print(eval(s))
  • 相关阅读:
    Java-JUC(十二):有3个线程。线程A和线程B并行执行,线程C需要A和B执行完成后才能执行。可以怎么实现?
    Spark2.x(五十九):yarn-cluster模式提交Spark任务,如何关闭client进程?
    Spark2.x(五十七):User capacity has reached its maximum limit(用户容量已达到最大限制)
    Spark2.x(五十六):Queue's AM resource limit exceeded.
    Java-Maven(十二):idea多项目:common module进行compiler和install正常,运行domain-perf module提示:Could not resolve dependencies for project
    Linux Shell:Map的用法
    Spark2.x(五十五):在spark structured streaming下sink file(parquet,csv等),正常运行一段时间后:清理掉checkpoint,重新启动app,无法sink记录(file)到hdfs。
    Linux Shell:根据指定的文件列表 或 map配置,进行文件位置转移
    Java-Maven(十一):Maven 项目出现pom.xml错误:Plugin execution not covered by lifecycle configuration: org.apache.maven.plugins:maven-compiler-plugin
    Spark2.x(五十四):在spark structured streaming下测试ds.selectExpr(),当返回列多时出现卡死问题。
  • 原文地址:https://www.cnblogs.com/Studying-Du/p/12395651.html
Copyright © 2011-2022 走看看