员工信息表:
#!/usr/bin/env python
#-*-coding=utf-8 -*-
#GKX
column_dic = {'id':0,'name':1,'age':2,'iphone':3,'job':4}
def get_show_lst(col_condition):#'select name,age'
'''
获取要展示的列名
:param col_contion: 用户输入的select条件
:return: 列名组成的字典
'''
col_info_lst = col_condition.strip().split('select')
col_info_lst = [col_info_item for col_info_item in col_info_lst if col_info_item .strip()]
if col_info_lst:
col_info = col_info_lst[0].strip()
if '*' == col_info:
return column_dic.keys()
elif col_info:
ret = col_info.split(',')
return [item.strip() for item in ret]
# else:
# print(col_info)
def filter_handler(operate,con): # '>','age > 22'
'''
进行筛选工作
:param operate:用户要进行的操作是 < > = like
:param con:用户输入的where条件
:return:被选中的所有行组成的列表,其中每一行都是一个列表
'''
selected_lst = []
col,val = con.split(operate)
col = col.strip()
val = val.strip()
judge = 'int(line_lst[column_dic[col]]) %s int(val)'%operate if operate=='<' or operate =='>'
else 'line_lst[column_dic[col]] %s val'%operate
f = open('info_txt',encoding='utf-8')
for line in f:
line_lst = line.strip().split(',')
if eval(judge):
selected_lst.append(line_lst)
f.close()
return selected_lst
def get_selected_line(con): # 'age > 22'
'''
获取所有要查找的行,并将每一行作为一个列表项存储在selected_lst中
:param con:
:return:
'''
if '>' in con:
selected_lst = filter_handler('>',con)
elif '<' in con:
selected_lst = filter_handler('<', con)
elif '=' in con:
selected_lst = filter_handler('==', con.replace('=','=='))
elif 'like' in con:
selected_lst = filter_handler('in',con)
return selected_lst
def show(selected_lst,show_lst):
for selected_item in selected_lst:
for col in show_lst:
print(selected_item[column_dic[col]],end=' ')
print()
while True:
condition = input('>>>') #接收用户指令
#解析用户指令
if 'where' in condition:
ret = condition.split('where') #['select name,age','age > 22']
con = ret[1].strip() #'age > 22'
# 根据select条件解析用户需要展示的内容
show_lst = get_show_lst(ret[0]) # 'select name,age'
# 根据where条件解析筛选用户想查找的内容
selected_lst = get_selected_line(con)
# 将符合条件的内容按照用户的需求展示出来
show(selected_lst, show_lst)
choice = input('continue?')
if choice == 'q':
break
else:
print('selection without where')
员工信息表
计算器
#!/usr/bin/env python
#-*-coding=utf-8 -*-
#GKX
import re
def dealwith(express):
'''
将表达式中 ‘+-’替换为 - --替换为+
:param new_express: 计算完原子型表达式后的主表达式
:return:
'''
express:express = express.replace('+-','-')
express:express = express.replace('--','+')
return express
def cal_exp_son(exp_son):
'''
计算原子型表达式 两个数之间的乘除法
:param exp_son: 传进来的,只有两个数之间的乘除法
:return: 返回计算后的值
'''
if '/' in exp_son:
a,b = exp_son.split('/') # -40/5
return str(float(a)/float(b))
elif '*' in exp_son:
a,b = exp_son.split('*')
return str(float(a)* float(b))
def cal_express_no_bracket(exp):
'''
计算里层不带括号的表达式
:param exp: 最里层不带括号的表达式传进来
:return:
'''
exp = exp.strip('()')
#先乘除后加减
#-40/5*8+2 9-2*5/3+7/3*99/4*2998+10*568/14
while True:
ret = re.search('d+.?d*[*/]-?d+.?d*',exp)
if ret:
exp_son = ret.group() #子表达式 最简单的乘除法
ret = cal_exp_son(exp_son)
exp = exp.replace(exp_son,ret) #ret为计算后的值,替换为 乘除的式子
#111print(exp)
exp = dealwith(exp)
#111print(exp)
else: #当表达式里没有了乘除法
ret = re.findall('-?d+.?d*',exp)
sum = 0
for i in ret:
sum += float(i)
return str(sum)
#提取括号里面没有其他括号的表达式
def remove_bracket(new_express):
while True:
ret = re.search('([^()]+)',new_express)
if ret:
express_no_bracket = ret.group()
#111print('匹配到内部不再有括号的值',express_no_bracket) #表达式没括号
ret = cal_express_no_bracket(express_no_bracket)
#print(new_express,express_no_bracket,ret)
new_express = new_express.replace(express_no_bracket,ret)
#print(new_express)
#new_express = dealwith(new_express)
#111print(new_express)
else:
#111print('表达式中没有括号了',new_express)
ret = cal_express_no_bracket(new_express)
#111print(ret)
return ret
#去空格
def calculator(express):
#express = input('表达式')
if express.count('(') != express.count(')'):
print('表达式括号有误,请检查并重新输入')
else:
new_express = re.sub('[s]','',express) #express.replace(' ','')
#11print(new_express)
res = remove_bracket(new_express)
print(res)
express = '1 - 2 * ( ( (6 0) -3 0 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
calculator(express)
计算器
简单爬虫
import requests
import re
import json
def getPage(url):
response=requests.get(url)
return response.text
def parsePage(s):
com=re.compile('<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?<span class="title">(?P<title>.*?)</span>'
'.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>',re.S)
ret=com.finditer(s)
for i in ret:
yield {
"id":i.group("id"),
"title":i.group("title"),
"rating_num":i.group("rating_num"),
"comment_num":i.group("comment_num"),
}
def main(num):
url='https://movie.douban.com/top250?start=%s&filter='%num
response_html=getPage(url)
ret=parsePage(response_html)
print(ret)
f=open("move_info7","a",encoding="utf8")
for obj in ret:
print(obj)
data=json.dumps(obj,ensure_ascii=False)
f.write(data+"
")
if __name__ == '__main__':
count=0
for i in range(10):
main(count)
count+=25