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:\untitled2\day15\01序列化模块.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:\untitled2\day15\01序列化模块.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))
posted on 2020-03-02 14:54 Py_studying 阅读(268) 评论(0) 编辑 收藏 举报