温馨提示:
建议访者慎做cv工程师,答案只提供参考,这篇文章的意义在于给没做对的同学提供做题思路。不懂先生建议大家跟着自己思路做,不会的话可以评论区留言,编者看到就会回复的。
HTTP基础
第1关 HTTP 标准
1. B
2. B
3. D
第2关 开发者工具的基本使用
1.C
2.B
正则表达式入门
第1关查找第一个匹配的字符串
# coding=utf-8
# 在此导入python正则库
########## Begin ##########
import re
########## End ##########
check_name = input()
# 在此使用正则匹配'张明'的信息,结果存储到is_zhangming中
########## Begin ##########
is_zhangming = re.search(r'张明',check_name)
########## End ##########
if is_zhangming is not None:
print(is_zhangming.span())
else:
print(is_zhangming)
第2关基础正则表达式--字符组
# coding=utf-8
import re
input_str = input()
# 编写获取python和Python的正则,并存储到match_python变量中
########## Begin ##########
match_python = re.findall(r'[Pp]ython',input_str)
########## End ##########
print(match_python)
第3关基础正则表达式--区间与区间取反
# coding=utf-8
import re
input_str = input()
# 1、编写获取到数字的正则,并输出匹配到的信息
########## Begin ##########
num = re.findall(r'[\d]',input_str)
print(num)
########## End ##########
# 2、编写获取到不是数字的正则,并输出匹配到的信息
########## Begin ##########
str = re.findall(r'[^0-9]',input_str)
print(str)
########## End ##########
第4关基础正则表达式--快捷方式
# coding=utf-8
import re
input_str = input()
# 1、编写获取到单词的正则,并输出匹配到的信息
########## Begin ##########
word = re.findall(r'\w',input_str)
print(word)
########## End ##########
# 2、编写获取到不是单词的正则,并输出匹配到的信息
########## Begin ##########
yyds = re.findall(r'\W',input_str)
print(yyds)
########## End ##########
第5关字符串的开始与结束
# coding=utf-8
import re
input_str = input()
# 1、编写获取到以educoder开头的正则,并存储到变量a
########## Begin ##########
a=re.search(r'^educoder',input_str)
########## End ##########
if a is not None:
print(a.span())
else:
print(a)
# 2、编写获取到以educoder结束的正则,并存储到变量b
########## Begin ##########
b= re.search(r'educoder$',input_str)
########## End ##########
if b is not None:
print(b.span())
else:
print(b)
第6关任意字符
# coding=utf-8
import re
input_str = input()
# 编写获取(任意字符)+ython的字符串,并存储到变量a中
########## Begin ##########
a= re.findall(r'.ython',input_str)
########## End ##########
print(a)
第7关可选字符
# coding=utf-8
import re
input_str = input()
# 编写获取she或者he的字符串,并存储到变量a中
########## Begin ##########
a= re.findall(r's?he',input_str)
########## End ##########
print(a)
第8关重复区间
# coding=utf-8
import re
input_str = input()
# 1、基于贪心模式匹配字符串中重复出现2个数字的子字符串,并存储到变量a。
########## Begin ##########
a=re.findall(r'[\d]{2}',input_str)
########## End ##########
print(a)
# 2、基于贪心模式匹配字符串中重复出现4-7个数字的子字符串,并存储到变量b。
########## Begin ##########
b=re.findall(r'[\d]{4,7}',input_str)
########## End ##########
print(b)
第9关开闭区间与速写
# coding=utf-8
import re
input_str = input()
# 1、基于贪心模式匹配字符串中连续出现5个数字以上的子字符串,并存储到变量a。
########## Begin ##########
a=re.findall(r'[\d]{5,}',input_str)
########## End ##########
print(a)
# 2、匹配字符串中都为数字的子字符串,并存储到变量b。
########## Begin ##########
b = re.findall(r'[\d]+',input_str)
########## End ##########
print(b)
python正则表达式分组
import re
def re_group(input_data):
result=[]
#*********** Begin **********#
p = "1[345789]\d{9}"
result = re.findall(p, input_data)
#*********** End **********#
return result
python正则表达式断言
第1关先行断言
import re
a = input()
#*********** Begin **********#
result = re.findall(r'[\w]{1,}(?=ing)',a)
#*********** End **********#
print(result)
第2关后发断言
import re
a = input()
#*********** Begin **********#
result = re.findall(r'(?<=go)[\w]{1,}',a)
#*********** End **********#
print(result)
python正则表达式标记
import re
def re_mark(input_data):
result=[]
#*********** Begin **********#
result = re.findall(r'^[study].*?.com',input_data,re.M|re.I)
#*********** End **********#
return result
python正则表达式替换
import re
def re_sub(str):
#*********** Begin **********#
after_Replacement = re.sub("123|mn|[a-f]|7","",str)
#*********** End **********#
return after_Replacement
python正则表达式编译
import re
def re_telephone(str):
#*********** Begin **********#
p = re.compile(r'\d{1,}')
re_group = re.findall(p,str)
re_group = tuple(re_group)
#*********** End **********#
return re_group
python正则表达式综合练习
第1关提取日志内容
import re
def re_Regex():
#*********** Begin **********#
# 读取数据文件
with open('./test_one/src.txt', 'r') as f:
# 根据日志数据编写正则表达式提取数据内容
string = r'cs_item_sk[\s=]*(\d*?1+)\s+.+?true\s*(\d+)$'
pattern = re.compile(string)
# 提取cs_item_sk的数值以1结尾的并且布尔值为true的所需的日志内容
for line in f.readlines():
line = line.strip()
m = pattern.search(line)
if m is not None:
print(m.groups())
#*********** End **********#
第2关组合密码匹配
import re
def re_test2(input_data):
result=[]
#*********** Begin **********#
result = re.findall(r'^(?![a-zA-z]+$)(?!\d+$)(?![!@#$%^&*.?]+$)[a-zA-Z\d!@#$%.?^&*]+$',input_data,re.M)
#*********** End **********#
return result
第3关网页内容解析
我不会,如果你会的话请在评论区回复答案,有福同享,谢谢
本题答案已完善,供稿人为:冷冷的 ,下面是代码
import re
def parse_one_page(html):
#*********** Begin **********#
pattern = re.compile('<dd>.*?board-index.*?>(.*?)</i>.*?data-src="(.*?)"'
+'.*?name.*?a.*?>(.*?)</a>.*?star.*?>[^\u4e00-\u9fff]+(.*?)[^\u4e00-\u9fff]+</p>'
+'.*?releasetime.*?>(.*?)</p>.*?integer.*?>(.*?)</i>'
+'.*?fraction.*?>(.*?)</i>.*?</dd>',
re.S)
res = re.findall(pattern, html)
print(res)
#*********** End **********#
爬虫实战-求是网周刊文章爬取
第1关获取新闻url
import requests
import re
def geturls():
# ********** Begin ********** #
url = 'http://www.qstheory.cn/dukan/qs/2014/2019-01/01/c_1123924172.htm'
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.84'
}
response = requests.get(url=url,headers=headers).text
# print(response)
urls = re.findall('<a\shref="(.*?)"\starget="_blank"><strong>',response)
# ********** End ********** #
return urls
if __name__ == "__main__":
urls = geturls()
for x in urls:
print(x)
第2关获取文章内容
import requests
from lxml import etree
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
}
def parsepage(urls):
mainbody = [] # 保存新闻内容
# ********** Begin ********** #
for url in urls:
http = url.split('c_')[0]
page_text = requests.get(url=url, headers=headers)
page_text.encoding = 'utf-8'
tree = etree.HTML(page_text.text)
# 获取图片的url
img_urls = tree.xpath('/html/body/section/div/div/div/div/div[1]/div[1]/div//img/@src')
if len(img_urls) != 0:
imgurls = []
for img_url in img_urls:
img_url = str(img_url)
imgurl = http + img_url
imgurls.append(imgurl)
# print(imgurls)
else:
imgurls = "" # 留空
# 获取标题并去除首尾空格
title = tree.xpath('/html/body/section/div/div/div/div/h1/text()')[0]
title = str(title).replace("\r\n","")
# 获取作者并去除首尾空格
author = tree.xpath('/html/body/section/div/div/div/div/span[2]/text()')[0]
author =str(author).replace("\r\n","")
# 获取正文并去除首尾空格
p_text = tree.xpath('/html/body/section/div/div/div/div/div[1]/div[1]/div//font/text()|/html/body/section/div/div/div/div/div[1]/div[1]/div//p/text()')
p_text= ','.join(p_text)
p_text = str(p_text).replace('\u3000','')
p_text = str(p_text).replace(',', '')
dic = {
'title': title,
'author': author,
'content': p_text,
'imgurl': imgurls
}
mainbody.append(dic)
# ********** End ********** #
return mainbody
Xpath基础
第1关XPath 路径表达式
1.选取bookstore元素的所有子节点
********** Begin *********
bookstore
*********** End **********
2.选取所有拥有名为 lang 的属性的 title 元素
********** Begin *********
//title[@lang]
*********** End **********
3.选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性和值为good的class属性
********** Begin *********
//title[@lang='eng' and @class="good"]
*********** End **********
4.选取属于 bookstore 子元素的book元素下的所有文本内容
********** Begin *********
/bookstore/book/text()
*********** End **********
5.选取属于 bookstore 子元素的第一个 book 元素
********** Begin *********
/bookstore/book[1]
*********** End **********
第2关XPath 轴定位
1.选取所有属于当前节点的子元素的 book 节点
********** Begin *********
child::book
*********** End **********
2.选取当前节点的 lang 属性
********** Begin *********
attribute::lang
*********** End **********
3.选取当前节点的所有 price 孙节点
********** Begin *********
child::*/child::price
*********** End **********
第3关XPath 解析
# 导入lxml库
from lxml import etree
# 读取lll.html文件并转化为元素树对象
parse = etree.HTMLParser(encoding='utf-8')
tree = etree.parse('src/step3/lll.html', parse)
# 补充xpath表达式,获取所有书的名称
# ********** Begin ********* #
print(tree.xpath('//title/text()'))
# *********** End ********** #
# 补充xpath表达式,获取所有书的价格
# ********** Begin ********* #
print(tree.xpath('//price/text()'))
# *********** End ********** #
# 填写代码, 获取价格低于30的书名
# ********** Begin ********* #
books = tree.xpath('//book')
for i in books:
price = i.xpath('./price/text()')[0]
pri = float(price)
if pri < 30:
print(i.xpath('./title/text()')[0])
# *********** End ********** #
requests爬虫
第1关requests 基础
import requests
def get_html(url):
'''
两个参数
:param url:统一资源定位符,请求网址
:param headers:请求头
:return:html
'''
# ***************** Begin ******************** #
# 补充请求头
headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/"
"537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
}
# get请求网页
html = requests.get(url = url,headers=headers).text
# 获取网页信息文本
# ***************** End ******************** #
return html
第2关requests 进阶
import requests
def get_html(url):
'''
两个参数
:param url:统一资源定位符,请求网址
:param headers:请求头
:return html 网页的源码
:return sess 创建的会话
'''
# ***************** Begin ******************** #
# 补充请求头
headers={
'User-Agent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/'
'537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36',
"Cookie": "BAIDUID=53B7CC4BFCDC39D2EF625C13D285429D:FG=1; BIDUPSID=53B7CC4BFCDC39D2EF625C13D285429D; "
"PSTM=1591665716; BD_UPN=12314753; BDUSS=2N2ajRYZnI2cVlZN1FRemlWNU9FV1lSZFM3SnZBS0dvRW44WFRCUTRWck1mUVpmR"
"VFBQUFBJCQAAAAAAAAAAAEAAAAoKJzNMTIyMzM4ODQ1uNW41QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAMzw3l7M8N5eS; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; sug=3; sugstore=1; ORIGIN=0; bdime=0; "
"H_PS_PSSID=1456_31672_32139_31253_32046_32230_31708_32295_26350_22160; delPer=0; BD_CK_SAM=1; PSINO=6; "
"H_PS_645EC=3b86vFCd303Aw0wmqvkcAGpfxU4oXfwYcs6jRd1RnxihTsvhfqaVB%2BIoeBs; BDSVRTM=0"
}
# 创建Session, 并使用Session的get请求网页
sess = requests.session()
# 获取网页信息文本
html = sess.get(url,headers= headers).text
# ****************** End ********************* #
return html, sess
urllib爬虫
第1关urllib基础
import urllib.request
def request(url):
'''
一个参数
:param url:请求网址
:return:返回一个请求的字符串。编码为utf-8
'''
# *************** Begin *************** #
response = urllib.request.urlopen(url)
return response.read().decode("utf-8")
# *************** End ***************** #
第2关urllib进阶
注意:本题形参headers不加到请求内(咱也不知道给这个参数是干嘛的)
import urllib.request
import http.cookiejar
def request(url,headers):
'''
两个参数
:param url:统一资源定位符,请求网址
:param headers:请求头
:return:html
'''
# ***************** Begin ******************** #
cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
r = opener.open(url)
# ***************** End ******************** #
html = r.read().decode('utf-8')
return html
学习通爬取百度热点新闻(新添加了文件读取编码方式采用utf-8中文编码,多语言兼容)
# -*-coding:utf-8 -*-
# 作者:不懂先生
# 日期: 2021/9/18
import requests
from lxml import etree
import os
filename = open("D:/代码/python/爬虫/爬虫实战/educoder/baidunews.txt","a",encoding="utf-8")
url = 'https://news.baidu.com/'
response = requests.get(url=url).text
tree = etree.HTML(response)
# 打开网页的用etree.HTML 打开本地的用etree.parse()
a_lists = tree.xpath('//*[@id="pane-news"]//ul//li//a')
print(len(a_lists))
for i in a_lists:
page_detail_hrefs = i.xpath('./@href')[0]
page_detail_names = i.xpath('./text() | b/text()')[0]
# print(page_detail_hrefs,page_detail_names)
print('新闻名称:{name} ,新闻链接:{url}'.format(name=page_detail_names,url=page_detail_hrefs), file=filename)
filename.close()
效果如下:
网页数据解析
第1关:XPath解析网页
import urllib.request
from lxml import etree
def get_data(url):
'''
:param url: 请求地址
:return: None
'''
response=urllib.request.urlopen(url=url)
html=response.read().decode("utf-8")
# *************** Begin *************** #
parse = etree.HTML(html)
item_list = parse.xpath("//div[@class='left']/ul/li/span/a/text()")
# *************** End ***************** #
print(item_list)
第2关:BeautifulSoup解析网页
import requests
from bs4 import BeautifulSoup
def get_data(url, headers):
'''
两个参数
:param url:统一资源定位符,请求网址
:param headers:请求头
:return data:list类型的所有古诗内容
'''
# ***************** Begin ******************** #
data = []
text = requests.get(url).text
soup=BeautifulSoup(text,'html.parser')
detail_text = soup.find_all("p")[:-1]
for i in detail_text:
data.append(i.string)
# ****************** end ********************* #
return data
JSON数据解析
import urllib.request
from lxml import etree
import http.cookiejar
import json
def request_sess(url,headers):
cj=http.cookiejar.CookieJar()
opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
request = urllib.request.Request(url=url, headers=headers)
r=opener.open(fullurl=request)
html = r.read().decode('utf-8')
return html
def save_data(path):
'''
:param path: 文件保存路径
:return: 无
'''
url='http://127.0.0.1:8080/index'
headers={
'User-Agent':'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36'
}
# ********** Begin ************** #
# 输出 JSON 数据中的 key 值为 code 对应的数据
json_str = request_sess(url=url,headers=headers)
b=json.loads(json_str)
data = b['code']
print(data)
# 将爬取下来的 JSON 数据保存到本地
b = str(b).replace("'",'"')
with open(path, 'w',encoding="utf-8") as fp:
fp.write(b)
# ********** End ************** #a
爬虫实战——网页抓取及信息提取
第1关:利用URL获取超文本文件并保存至本地
# -*- coding: utf-8 -*-
import urllib.request as req
import os
import hashlib
# 国防科技大学本科招生信息网中录取分数网页URL:
url = 'http://www.gotonudt.cn/site/gfkdbkzsxxw/lqfs/index.html' # 录取分数网页URL
def step1():
# 请按下面的注释提示添加代码,完成相应功能
#********** Begin *********#
# 1.将网页内容保存到data
webpage = req.urlopen(url) # 按照类文件的方式打开网页
data = webpage.read() # 一次性读取网页的所有数据
# data = data.decode('utf-8')
# 2.将data以二进制写模式写入以学号命名的 “nudt.txt” 文件
with open('./nudt.txt','wb') as fp:
fp.write(data)
#********** End **********#
第2关:提取子链接
# -*- coding: utf-8 -*-
import urllib.request as req
# 国防科技大学本科招生信息网中录取分数网页URL:
url = 'http://www.gotonudt.cn/site/gfkdbkzsxxw/lqfs/index.html' # 录取分数网页URL
webpage = req.urlopen(url) # 按照类文件的方式打开网页
data = webpage.read() # 一次性读取网页的所有数据
data = data.decode('utf-8') # 将byte类型的data解码为字符串(否则后面查找就要另外处理了)
def step2():
# 建立空列表urls,来保存子网页的url
urls = []
# 请按下面的注释提示添加代码,完成相应功能
#********** Begin *********#
# 从data中提取2016到2012每一年分数线子网站地址添加到urls列表中
years = [2016, 2015, 2014, 2013, 2012]
for year in years:
index = data.find("国防科技大学%s年录取分数统计" % year)
href = data[index - 80:index - 39] # 根据单个特征串提取url子串
# 注意提取的超链href是相对URL,需要加上站点域名
website = 'http://www.gotonudt.cn'
urls.append(website + href)
#********** End **********#
return urls
第3关:网页数据分析
# -*- coding: utf-8 -*-
import urllib.request as req
import re
# 国防科技大学本科招生信息网中2016年录取分数网页URL:
url = 'http://www.gotonudt.cn/site/gfkdbkzsxxw/lqfs/info/2017/717.html'
webpage = req.urlopen(url) # 根据超链访问链接的网页
data = webpage.read() # 读取超链网页数据
data = data.decode('utf-8') # byte类型解码为字符串
# 获取网页中的第一个表格中所有内容:
table = re.findall(r'<table(.*?)</table>', data, re.S)
firsttable = table[0] # 取网页中的第一个表格
# 数据清洗,将表中的 ,\u3000,和空格号去掉
firsttable = firsttable.replace(' ', '')
firsttable = firsttable.replace('\u3000', '')
firsttable = firsttable.replace(' ', '')
def step3():
score = []
# 请按下面的注释提示添加代码,完成相应功能,若要查看详细html代码,可在浏览器中打开url,查看页面源代码。
#********** Begin *********#
# 1.按tr标签对获取表格中所有行,保存在列表rows中:
rows = re.findall(r'<tr(.*?)</tr>', firsttable, re.S)
# 2.迭代rows中的所有元素,获取每一行的td标签内的数据,并把数据组成item列表,将每一个item添加到scorelist列表:
scorelist = []
for row in rows:
items = []
tds = re.findall(r'<td.*?>(.*?)</td>', row, re.S)
for td in tds:
rightindex = td.find('</span>') # 返回-1表示没有找到
leftindex = td[:rightindex].rfind('>')
items.append(td[leftindex+1:rightindex])
scorelist.append(items)
# 3.将由省份,分数组成的7元列表(分数不存在的用\代替)作为元素保存到新列表score中,不要保存多余信息
for record in scorelist[3:]:
record.pop()
score.append(record)
#********** End **********#
return score
以下答案来自 ؟¿زذ正则表达式
数据持久化(非数据库)
第1关数据持久化(非数据库)
import os
import requests
from bs4 import BeautifulSoup
from lxml import etree
url = 'http://127.0.0.1:8080/imgs/'
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36'
}
response = requests.get(url, headers=headers)
#********** Begin **********#
# 解析网页
html = etree.HTML(response.text)
img_srcs = html.xpath("//div[@class='box']/div/a/img/@src")
for img_src in img_srcs:
name = img_src.split('/')[-1].split('.')[0]
# 请求图片地址
img_url = "http://127.0.0.1:8080" + img_src
img = requests.get(img_url)
# 判断保存图片的文件夹是否存在,若不存在就创建文件夹
dir_path = 'step1/images'
if not os.path.exists(dir_path):
os.makedirs(dir_path)
img_path = dir_path + '/' + name + '.jpg'
# 保存图片
with open(img_path, 'wb')as file:
file.write(img.content)
#********** End **********#
MySQL常用操作
第1关创建数据表并插入数据
########## 创建emp表 ##########
create table emp(
empno int(4) not null,
ename char(9),
job char(10),
mgr int(4),
sal int(7),
comm int(7),
deptno int(2) not null
);
########## 向emp表中插入数据 ##########
insert into emp(empno,ename,job,mgr,sal,comm,deptno) values(1011,"Elon","cameraman",001,8000,18207471234,30),(1111,"Donny","waiter",003,4000,18207475678,40);
第2关删除、修改表中的数据
########## 删除 Elon 的信息 ##########
delete from emp where ename='Elon';
########## 修改 Donny 的信息 ##########
update emp set deptno=20 where ename='Donny';
第3关简单查询语句
########## 查询在20号部门工作的雇员姓名和工资 ##########
select ename,sal,deptno from emp where deptno=20;
########## 查找以“s”开头的雇员姓名和所在部门编号 ##########
select ename,deptno from emp where ename like 's%';
########## 按工资升序排列20号部门的雇员 ##########
select ename,sal,deptno from emp where deptno=20 order by sal ASC;
########## 查询所有部门中工资大于2800的雇员 ##########
select ename,sal from emp where sal>2800;
第4关深入学习查询语句
########## 查询工种是职员或分析员的雇员姓名 ##########
select ename,job from emp where job in ('clerk','analyst');
########## 查询在 sales 部门中哪些工种是 account 部门中没有 ##########
SELECT job FROM emp WHERE deptno=10 AND job NOT IN (SELECT job FROM emp WHERE deptno=30);
########## 查询工资高于3000的雇员信息 ##########
SELECT ename,sal,emp.deptno,loc,dname FROM emp,dept WHERE emp.deptno=dept.deptno AND sal>3000;
MySQL数据库编程
第1关python数据库编程之创建数据库
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pymysql
# 连接mysql,创建连接并返回连接对象
def connect():
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='123123',
charset='utf8'
)
return conn
# ********* End ********* #
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
cursor.execute('create database my_db default character set utf8 collate utf8_general_ci')
# ********* End ********* #
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
第2关python数据库编程之创建数据表
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pymysql
# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
db='my_db',
passwd='123123',
charset='utf8'
)
return conn
# ********* End ********* #
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
cursor.execute('''create table user (id int(16) AUTO_INCREMENT PRIMARY KEY,username varchar(32) not null,password varchar(32) not null)ENGINE = MyISAM''')
# ********* End ********* #
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
第3关python数据库编程之插入数据
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pymysql
# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
db='my_db',
passwd='123123',
charset='utf8'
)
return conn
# ********* End ********* #
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
cursor.execute("insert into user (username, password) values('teble', 'teble')")
# ********* End ********* #
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
第4关python数据库编程之查询数据
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pymysql
# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
db='my_db',
passwd='123123',
charset='utf8'
)
return conn
# ********* End ********* #
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
cursor.execute("select id, username, password from user ORDER BY id DESC")
for data in cursor.fetchall():
print(data)
# ********* End ********* #
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
第5关python数据库编程之修改数据
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pymysql
# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
db='my_db',
passwd='123123',
charset='utf8'
)
return conn
# ********* End ********* #
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
cursor.execute("update user set username = 'root',password='root' where id = '1'")
# ********* End ********* #
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
第6关python数据库编程之删除数据
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import pymysql
# 连接mysql,连接数据库my_db,创建连接并返回连接对象
def connect():
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
db='my_db',
passwd='123123',
charset='utf8'
)
return conn
# ********* End ********* #
def test():
# 创建连接,并且返回连接对象
conn = connect()
# 创建游标对象
cursor = conn.cursor()
# 请在这里补充代码,完成本关任务,注意缩进格式为4个空格
# ********* Begin ********* #
cursor.execute("delete from user where id = '2'")
# ********* End ********* #
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
Python--进程和线程
第1关Python多进程-求素数个数
import math
from multiprocessing import cpu_count
from multiprocessing import Pool
# 判断数字是否为质数
#********** Begin *********#
def isPrime(n):
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
#********** End *********#
# 计算给定区间含有多少个质数
#********** Begin *********#
def howMany(T):
sum = 0;
for i in range(T[0], T[1] + 1):
if isPrime(i):
sum += 1
return sum
#********** End *********#
# 对整个数字空间N进行分段CPU_COUNT
#********** Begin *********#
def separateNum(N, CPU_COUNT):
list = [[i * (N // CPU_COUNT) + 1, (i + 1) * (N // CPU_COUNT)] for i in range(0, CPU_COUNT)]
list[0][0] = 1
if list[CPU_COUNT - 1][1] < N:
list[CPU_COUNT - 1][1] = N
return list
#********** End *********#
if __name__ == '__main__':
N = int(input())
# 多进程
CPU_COUNT = cpu_count() ##CPU内核数 本机为8
pool = Pool(CPU_COUNT)
sepList = separateNum(N, CPU_COUNT)
result = []
for i in range(CPU_COUNT):
result.append(pool.apply_async(howMany, (sepList[i], )))
pool.close()
pool.join()
ans = 0
list = [res.get() for res in result]
print(sum(list), end = '')
第2关Python多线程-求合数个数
import threading
import math
ans = 0
lock = threading.Lock()
# 判断数字是否为质数
#********** Begin *********#
def isPrime(n):
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
#********** End *********#
#********** Begin *********#
# 计算给定区间含有多少个质数
def howMany(T):
sum = 0;
for i in range(T[0], T[1] + 1):
if isPrime(i):
sum += 1
lock.acquire()
try:
global ans
ans += sum
finally:
lock.release()
#********** End *********#
#********** Begin *********#
# 对整个数字空间N进行分段CPU_COUNT
def seprateNum(N, CPU_COUNT):
list = [[i * (N // CPU_COUNT) + 1, (i + 1) * (N // CPU_COUNT)] for i in range(0, CPU_COUNT)]
list[0][0] = 1
if list[CPU_COUNT - 1][1] < N:
list[CPU_COUNT - 1][1] = N
return list
#********** End *********#
if __name__ == '__main__':
N = int(input())
threadNum = 32
t = []
sepList = seprateNum(N, threadNum)
for i in range(0, threadNum):
t.append(threading.Thread(target = howMany, args = (sepList[i], )))
t[i].start()
for i in range(0, threadNum):
t[i].join()
print(N - 1 - ans, end = '')
第3关Python-ThreadLocal变量
import threading
x = 10
data = threading.local()
def action():
global x
data.num = x
for i in range(1000000):
data.num += 1
data.num -= 1
x = data.num
x = int(input())
thread = []
for i in range(10):
thread.append(threading.Thread(target = action))
thread[i].start()
for i in range(10):
thread[i].join()
print(x,end = '')
第4关Python-进程 VS 线程
import math
from multiprocessing import cpu_count
from multiprocessing import Pool
N = int(input())
a = list(map(int, input().split()))
def howMany(T):
ans = 0;
for i in range(T[0] - 1, T[1]):
ans = max(ans, a[i])
return ans
# 对整个数字空间N进行分段CPU_COUNT
def seprateNum(N, CPU_COUNT):
list = [[i * (N // CPU_COUNT) + 1, (i + 1) * (N // CPU_COUNT)] for i in range(0, CPU_COUNT)]
list[0][0] = 1
if list[CPU_COUNT - 1][1] < N:
list[CPU_COUNT - 1][1] = N
return list
if __name__ == '__main__':
# 多进程
#********** Begin *********#
CPU_COUNT = cpu_count()
pool = Pool(CPU_COUNT)
sepList = seprateNum(N, CPU_COUNT)
result = []
for i in range(CPU_COUNT):
result.append(pool.apply_async(howMany, (sepList[i], )))
pool.close()
pool.join()
ans = 0
list = [res.get() for res in result]
print(max(list), end = '')
#********** End *********#
第5关Python-分布式进程
B