当前位置: 首页 > news >正文

LPL比赛数据可视化,完成这个项目,用尽了我的所有Python知识

LPL比赛数据可视化

效果图

完成这个项目,我感觉我已经被掏空了,我几乎用尽了我会的所有知识
html+css+javascript+jQuery+python+requests+numpy+mysql+pymysql+json+ajax+flask+echarts
在这个过程中,并不是那么顺利,遇到了很多坑,好在全部都已经解决
在整个页面全部功能运行成功的那一刻,我感觉幸福极了

复制代码

"""
当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢? 
学习Python中有不明白推荐加入交流Q群号:928946953 
群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!
还有大牛解答!
"""

复制代码


下面我就带领大家实践一下,怎么从无到有

如果觉得涉及的知识太多,实践起来困难的同学.不要怕,我专门做了一期视频一分钟上手此项目点我观看视频


 

需要用到的Python第三方库:flask,requests,pymysql,numpy


听说看着源码读python教程文章绝配哦Github


点我直达可视化页面

绘制前端页面

整个页面可划分为10个盒子,使用HTML和CSS就可以把最基础的框架搭建出来,大家都是pink老师的学生,怎么在页面中写盒子我就不多说了,我主要讲解一下如何将echarts的图表插入到页面中来

图1

什么是Echarts

Echarts官方网站
ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求

ECharts 遵循 Apache-2.0 开源协议,免费商用

ECharts 兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等)及兼容多种设备,可随时随地任性展示

第一个 ECharts 实例

第一个 ECharts 实例源码

!!!!!!

使用Echarts的前提是你需要掌握HTML和Javascript的知识,毕竟Echarts是基于JS开发
观察源码不难发现,引入了外部文件[echarts.js] 如果不引入,程序将无法正常运行
基于准备好的div,绑定事件,初始化echarts实例
指定图表的配置项和数据,即可显示图表
大致流程:引入所需文件,在HTML定义好div盒子,在JS中绑定事件,初始化echarts实例,指定图表的配置项和数据

项目中的Echarts

1.引入所需文件

图2

说明:上面第一个实例将echarts的代码写在了HTML文件中,而我为了后期维护起来方便,就分开写了,所以需要引入[js.js]文件,也就是我把关于echarts的代码都写在了[js.js]文件中

2.在HTML定义好div盒子

图3

3.在JS中绑定事件,初始化echarts实例

图4

4.指定图表的配置项和数据

代码过多,请到源码中查看

Echarts部分小总结

Echarts部分不是很难,直接到Echarts官网实例中找你想要的图表,然后复制代码,修改图表的配置和数据即可。我知道你肯定要问“代码中的一些属性我根本就不知道怎么去使用,怎么办嘛” 不要方,请到Echarts官网文档查看

项目中一共用了5种Echarts图表,使用的方法大同小异,我相信你可以举一反三

前端的页面绘制完毕后,你会发现一个问题。数据都写死的,而比赛数据几乎每天都在更新。每天去源码中修改对应的数据部分,过不了几天我想你肯定会厌倦。解决的方法肯定是有的,不光只是爬虫,还要向Echarts中插入数据(肯定不是手动插,而是机器插)。欲知后事如何,请往下看

爬取比赛数据

在讲解爬取数据之前,我还是想简单介绍一下什么是爬虫,回答大家对于爬虫的一些误解;假定大家都有一定的爬虫基础

什么是爬虫,爬虫违法吗?

数据从何而来

点我查看官网比赛数据

图5


这个网站很特别,是一个动态的网站。如果说只是简单的使用requests获取页面的源码;虽然可以获取到数据,但是数据只有当前显示的一页。我最开始的想法是使用selenium这个可以操控浏览器的第三方库,进行数据的获取。代码写完后,获取数据没什么问题,就是速度太慢了,我也利用requests重新写了爬虫程序,速度提升非常明显(selenium用时20s,requests用时2s;两个程序还包括了将数据写入数据库的代码)

所有,selenium版本的爬虫我不会讲,主要还是讲解requests的版本


现在,我们来到官网,右键点击检查(如果是谷歌浏览器,按F12也可以),点击【Network】

图6


按CTRL+R 刷新一下
在【name】下方找到【
LOL_MATCH2_MATCH_TEAMRANK_LIST_134_7_8.js】,接着点击【Preview】,你就会看到这么一个界面

图7


观察右边的数据,是不是就是战队的信息,只不过就是用json包装起来了而已,利用Python简单处理一下就能获取到你想要的数据。这些数据是用接口形式传输的,我们就可以直接爬取接口

点击旁边的【Headers】,复制【Request URL】后面的网址,我们来到Pycharm

图8

我们打印一下请求的网址

import requestsdef get_info(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER'}response = requests.get(url=url,headers=headers)return response.text
info = get_info('https://lpl.qq.com/web201612/data/LOL_MATCH2_MATCH_TEAMRANK_LIST_134_7_8.js')
print(info)

Python

输出结果:

图9

可以看出所有的战队信息已经获取成功,可是输出的内容是一个str(字符串)对象,我们需要使用json.loads()函数将str对象转换为dict(字典)对象。再使用字典和列表的方法就可以将想要的数据提取出来,并且存放到另外一个字典里面

import requests
import jsondef get_info(url):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER'}response = requests.get(url=url,headers=headers)return response.text
info = get_info('https://lpl.qq.com/web201612/data/LOL_MATCH2_MATCH_TEAMRANK_LIST_134_7_8.js')info = json.loads(info) #将str对象转换为dict(字典)对象
info_msg = info['msg']  #使用字典里面的键获取对于的值#队名
teamName = [data['sTeamName'] for data in info_msg]
#出场次数
out_count = [data['iAppearancesFrequency'] for data in info_msg]
#胜场
win = [data['iWin'] for data in info_msg]
#败场
loss = [data['iLoss'] for data in info_msg]
#胜率
win_rate = [int(str((int(data['iWin'])/(int(data['iWin'])+int(data['iLoss'])))*100)[:2]) for data in info_msg]
#总击杀
kill_sum = [data['iKill'] for data in info_msg]
#总死亡
death_sum = [data['iDeath'] for data in info_msg]
#插眼
placed_eye = [int(float(data['sAveragingWardPlaced']))for data in info_msg]
#排眼
killed_eye = [int(float(data['sAveragingWardKilled']))for data in info_msg]infos_list = [('队名',teamName),('出场次数',out_count),('胜场',win),('败场',loss),('胜率',win_rate),('总击杀',kill_sum),('总死亡',death_sum),('插眼',placed_eye),('排眼',killed_eye)]
info_dict = {key:value for key,value in infos_list}
print(info_dict)

Python

输出结果:

图10


在上面的程序当中,我运用列表推导式,字典推导式,很轻松的就拿到了想要数据。如果你还看不懂推导式,你可以到我这篇文章看看Python高级编程之列表推导式、字典推导式、集合推导式

其实,列表推导式还有更简单的写法,你可以去源码当中的【spider_api.py】文件中,第125行代码查看,117-122行注释的代码就是未优化的代码,留个小小的彩蛋,期待你去发现

聪明的你肯定已经发现了,这只是LPL战队的数据,那么队员和英雄的数据接口在哪里呢,刚才检查网页的时候,也没有发现.不要方,接着往下看

动态网站,其他数据接口在哪里

我们回到官方网站,点击【个人数据】

图11


接着右键检查,找到【
LOL_MATCH2_MATCH_PERSONALRANK_LIST_134_7_8.js】

图12


获取数据的方法就和上面的类似了,我相信你可以举一反三


然而,获取英雄数据就不是那么顺利了
还是回到官网,点击【英雄数据】
还是右键检查,找到【
LOL_MATCH2_MATCH_HERORANK_LIST_134_7_8.js】

图13


你会惊奇的发现,为什么没有英雄的名字,而只有【iChampionId】和其他数据
于是,我们大胆的猜测,这些【iChampionId】会不会是英雄对应的ID呢?

寻找英雄名称

想查看英雄的名称,我脑袋里面第一个蹦出了的想法就是英雄联盟官网
老规矩,右键检查,找到【hero_list.js】,Amazing呀!

图14


你仔细看,发现英雄名称前面有个【heroId】,会不会就和我们刚才看到的【iChampionId】相对应呢?
你不用去对比啦,我已经对比过了,就是相对应的,嘿嘿


虽然已经找到英雄名称,但是新的问题又来了
从两个接口获取到的数据,怎么保证【iChampionId】的英雄匹配到正确的名称
如何获取数据,我就不多嘴了,详细代码请查看源码.我这里主要讲解一下如何匹配正确的英雄名称

name = []for i in hero_key_id_top60:for j in hero_name_id_list:if i == j :#由于从lpl数据页面无法获取到英雄名称,只能获取到对应的id#一层循环是pick率前60的英雄id,二层是所有英雄的的id#通过if判断,将pick率前60的英雄写入到指定列表中name.append(hero_name_list[hero_name_id_list.index(j)])

Python

【hero_key_id_top60】中的内容:

图15


【hero_name_id_list】中的内容:

图16


【hero_name_list】中的内容:

图17


【name 】中的内容:

图18

数据已到位,下一步导入数据库

数据库交互

首先,请在你的电脑上面创建一个名为【lpl】的数据库,不需要建表,后面我会讲解如何用pymysql建表

导入数据

我们需要连接自己的数据库
代码如下,值得注意的是,passwd='你自己数据库的密码'
如果说看不懂代码,可以先去了解一下MySQL和pyMySQL

import pymysqldef mysql():db = pymysql.connect(host='localhost', user='root',passwd='123456', db='lpl', charset='utf8')cur = db.cursor()return db,cur

Python

数据库连接成功后,我们以【战队排行榜】为例

db, cur = mysql()try:# 是否存在这个表,若存在就删除,【战队排行榜前五】为表的名称cur.execute("DROP TABLE IF EXISTS 战队排行榜前五")# 创建表sql语句set_sql_top5 = """                             create table 战队排行榜前五(战队名称 varchar(20),出场次数 varchar(10),胜率 varchar(10))"""# 执行sql语句cur.execute(set_sql_top5)db.commit() # 保存# 准备写入数据的sql语句save_sql_top5 = "INSERT INTO 战队排行榜前五 values(%s,%s,%s);"# 写入数据库,参数一:写入的sql语句  参数二:数据,类型为列表,里面的元素类型是元组cur.executemany(save_sql_top5,info_list)db.commit()print("写入数据库成功")except Exception as e:print("创建数据库失败:case%s" % e)

Python

【info_list】当中的数据

图19

数据库中的数据

图20

取出数据

数据库还是需要连接的,我们任然以【战队排行榜】为例

import pymysqldef mysql():db = pymysql.connect(host='localhost', user='root',passwd='123456', db='lpl', charset='utf8')cur = db.cursor()return db,cur
def query(sql):db,cur = mysql()cur.execute(sql)    #执行传入的sql语句res =cur.fetchall() #获取sql语句字段中的所有数据return res#sql语句,从【战队排行榜前五】这张表中,选择战队名称,出场次数,胜率
sql_wings = 'SELECT 战队名称,出场次数,胜率 FROM 战队排行榜前五'infos_wings = query(sql_wings) #取出数据
#print(infos_wings) : (('TES', '40', '75%'), ('JDG', '43', '72%'), ('V5', '49', '61%'), ('IG', '44', '59%'), ('SN', '52', '59%'))name = [info[0] for info in infos_wings]
out_count = [info[1] for info in infos_wings]
win_rate = [info[2] for info in infos_wings]
infos_list = [('name', name), ('outcount', out_count), ('winRate', win_rate)]#为什么最后要转换成字典的形式,我会在后面向前端传输数据的时候讲解
infos_dict = {key: value for key, value in infos_list}
#print(infos_dict)
#{'name': ['TES', 'JDG', 'V5', 'IG', 'SN'], 'outcount': ['40', '43', '49', '44', '52'], 'winRate': ['75%', '72%', '61%', '59%', '59%']}

Python

Web程序开发

什么是Web程序

Web应用程序是一种可以通过Web访问的应用程序。Web应用程序的一个最大好处是用户很容易访问应用程序。用户只需要有浏览器即可,不需要再安装其他软件
能够开发web程序的编程语言有很多,比如Java,Php,Python等
而我们选择用Python进行开发,使用Falsk框架进行快速开发

什么是Falsk

Flask是一个使用 Python编写的轻量级Web应用框架。其WSGl( Python Web Server Gateway Interface)工具包采用 Werkzeug,模板引擎则使用 Jinja2,是目前十分流行的Web框架
这里给大家推荐一期视频,Flask快速入门.由于我的能力有限,还请大家花点时间将视频看完,再接着往后看文章

使用Flask连接前端页面

假定大家已经看完了视频,嘿嘿

使用pycharm创建一个flask项目,会自动帮我们生成两个文件夹【templates】【static】和一个python文件【app.py】
我们需要将写好的HTML文件放在【templates】目录下,CSS、JS和所用到的图片放在【static】目录下,如下图所示

图21

值得注意的是,也是一个坑,HTML文件当中,引用的外部文件,文件地址一定要去修改。因为我们是先写好的前端页面,而flask当中需要我们将外部文件都放在【static】当中

注意事项

引入模板

这里所说的模板,就是我们写好的HTMl文件,只不过需要使用render_template()将其引入

import lpldata
from flask import Flask,render_templateapp = Flask(__name__)
LPL = lpldata.Lpl_Data()#从数据库获取数据@app.route('/')#默认路由
def hello_world():return render_template("index.html")#引入模板

Python

使用Ajax传输数据

什么是Ajax

Ajax是Asynchronous Javascript and XML的简称,通过Ajax向服务器发送请求,接收服务器返回的json数据,然后使用 Javascript修改网页,来实现页面局部数据更新。使用 Jquery框架可方便的编写Ajax代码,需要 Jquery.js文件

基本格式

$.ajax({type:"post",     //请求类型url:"/目标路由",  //请求地址data:{},         //数据datatype:"json",success:function (data) {//请求成功的回调函数,data是返回的数据},error:function () {//请求失败时执行}
})

JavaScript

我们先到app.py文件中,定义好一个路由(/wingsvd),methods添加一个'post',这里以【战队胜负图表】为例

@app.route('/wingsvd',methods=['GET','POST'])
def wings_vd():return LPL.get_wings_vd()

Python

LPL.get_wings_vd(),你可以到lpldata.py文件查看相关的代码。主要功能就是从数据获取数据,并且将数据整理好后,存到字典里面,最后使用json.dumps()将dict(字典)对象转换为json对象,最为函数的返回值返回

现在回到Ajax的部分,你可以到【js.js】文件中359行查看

function echarts_4() {// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('echart4'));var lpl = {};$.ajax({url:'/wingsvd', //这里的地址是不是很眼熟,没错就是刚才定义的路由地址data: {},type: 'POST',async: false,dataType:'json',success: function (data) {lpl.name = data.name;  // 使用json的方法,提取刚才LPL.get_wings_vd()返回的数据lpl.victory = data.victory;lpl.defeat = data.defeat;lpl.winRate = data.winRate;
......

JavaScript

数据提取成功后,就可以在后面的echarts代码中修改对应的配置,图表就可以显示出数据啦

这里以图表的X轴为例

xAxis: [{type: "category",data: lpl.name,  //上面的代码是不是也有它呀,有就对啦axisLine: { lineStyle: {color: "rgba(255,255,255,.1)"}},axisLabel:  { textStyle: {color: "rgb(255,255,255)", fontSize: '16', }},},],

JavaScript

所有的图表传输数据的操作方法都是一样的,先在【app.py】中创建路由,返回你需要的数据,再到【js.js】当中写Ajax和Echarts的代码

最后的胜利

所有的准备工作完成后,我们就只剩最后一步啦!

if __name__ == '__main__':app.run(debug=True)

Python

右键,运行,点击下方的地址,可视化的页面就呈现在了你的眼前

图24

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-35300.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

闭关5个月,终于把这篇阿里P8大牛的数据结构与算法领悟明白!!以入阿里!!

数据结构是计算机科学与技术专业非常重要的-一门核心基础课,计算机科学各个领域及各种应用软件都要使用相关的数据结构和算法。 经历过校招的人都知道,算法和数据结构都是不可避免的。像拼多多、头条这种大公司,上来就来几道算法题&#xff…...

安卓按键响应的方式

一、在xml中设置按键的onClick绑定的函数 在页面显示两个按钮,用onClick 绑定buttonBeClicked函数&#xff0c;该函数在MainActivity.java中实现。 activity.main.xml: <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools…...

实战篇:sdram+fifo调试

本片主要总结SDRAM的FIFO优化仿真中出现的问题及解析。 针对下图的疑问点&#xff1a; 1.图中第一处&#xff0c;SDRAM的数据线在写FIFO往SDRAM写的过程中位高阻态&#xff0c;但实际应该是wr_data才对。为何&#xff1f; 在代码中&#xff0c;关于DQ以及ADDR的PIN定义没有位…...

组队学习:学习者参考手册

学习者参考手册 作为希望参与组队学习活动的学习者&#xff0c;一定想了解有关本次活动的各种环节。我就通过这份手册来给大家介绍一下。 本手册一共分为四个部分&#xff0c;分别是活动角色划分&#xff0c;活动流程介绍、打卡环节介绍、角色职责介绍。 1. 大航海模型 航路…...

2021-07-9 unity学习笔记(25)之插件Dialogue System for Unity的使用注意事项

2021-07-9 unity学习笔记(25)之插件Dialogue System for Unity的使用注意事项 要在玩家身上挂selector组件&#xff0c;在需要对话的对象上挂usable组件&#xff0c;usable组件中的max use distance要设置到能让鼠标射线检测到得范围&#xff0c;同时要在对话的对象上挂碰撞器…...

ubuntu20 ros darknet 安装记录

1. 代码下载 代码Github主页&#xff1a;https://github.com/leggedrobotics/darknet_ros 下载命令&#xff1a; mkdir -p catkin_workspace/srccd catkin_workspace/srcgit clone --recursive gitgithub.com:leggedrobotics/darknet_ros.gitcd ../不知道怎么git clone的朋友可…...

Jmeter接口测试提取token值为全局变量

jmeter接口测试提取token值为全局变量有两种常用方法&#xff1a;正则表达式提取器、JSON提取器。 PS:例如返回数据如下&#xff0c;下面的操作都根据此次返回数据进行&#xff1a; {data{"file1": "value1","file2": "value2","…...

vue 集成腾讯地图基础api Demo集合

vue 集成腾讯地图基础api Demo集合(基础地图引入与展示模块,地址逆解析&#xff0c;3D/2D切换 &#xff0c;位置服务&#xff0c;mark标记) 写作背景 官方网站的demo大部分都是原生js&#xff0c;较基础&#xff0c;很多高级Api分布比较分散&#xff0c;为了有利于开发者查找…...

error C249: ‘DATA‘: SEGMENT TOO LARGE

今天碰到这个问题&#xff0c;浪费挺长时间的&#xff0c;做个笔记提供一种解决方法&#xff1a;error C249: ‘DATA’: SEGMENT TOO LARGE 编译的时候出现这个错误 需要将【魔术棒】中【Target】项中【Memory Model】&#xff0c;由small&#xff1a;xxxx改成Large&#xff1…...

用VPN访问公司内网

用VPN访问公司内网 VPN的作用是&#xff1a;能够让移动员工、远程员工、商务合作伙伴和其他人利用本地可用的高速宽带网连接到企业网络&#xff0c;不再受地域的限制。VPN可以建立可信的安全连接&#xff0c;并保证数据的安全传输。 VPN的理解&#xff1f; 比如一个公司员工…...

Redis从安装到(主从、哨兵、集群)部署到整合项目以及一些常用功能介绍

目录一.安装配置redis 二.五种数据类型 三.SpringBoot整合Redis 四.利用fastJson实现String和List互转&#xff08;Redis存储Java对象&#xff09; 五.发布(pub)和订阅&#xff08;sub&#xff09; 六.持久化 七.主从复制&#xff08;读写分离&#xff09;Master &#xff1a;S…...

人在迷茫的时候该做什么,别让迷茫拖累你的前进的脚步...【建议收藏】

前言 迷茫是一个笼统的状态&#xff0c;首先是找不到方向&#xff0c;其实是找不到做事的步骤。如果你生活在一个都是平凡人组成的社会微环境中&#xff0c;身边没有一个特别优秀的人&#xff0c;你也没有读过任何历史或者社会名人的传记&#xff0c;那么要有方向&#xff0c;…...

element时间选择器 选择当前时间和之后的时间

<el-form-item label"称号有效期&#xff1a;" prop"featureEndTime"><el-date-pickerv-model"formObj.featureEndTime"type"datetime"placeholder"选择日期"format"yyyy-MM-dd HH:mm:ss"value-format&q…...

2021.8.23

写项目 画创建群的界面和查看好友资料界面 重新修改了一下好友列表的布局&#xff0c;增加显示查看好友资料&#xff0c;删除好友的按钮&#xff0c;还没有改好。。。。。。。。。。。。。。。 思考怎么实现表情包的发送...

从青铜到王者的路线,6年菜鸟开发面试字节跳动Android研发岗,移动架构师成长路线

前言 今天我给大家再次分享一下&#xff0c;我最近的一些读书的感想&#xff0c;思考起来&#xff0c;确实能够给自己带来一些真实的帮助和启发&#xff0c;希望大家在平时的工作学习中&#xff0c;也能够认清楚学习的一些本质。 如果我们的学习是在不断掌握应对具体工作场景…...

在vue3中vue-router的使用

从vue2转到使用vue3&#xff0c;遇到了好多问题&#xff0c;原来使用的方法有很大不同。 1.安装vue-routernext npm install vue-routernext --save 2.创建名为“router”的文件夹&#xff0c;在创建index.js 3.编写index.js 首先引入vue-router插件&#xff0c;然后创建一个…...

js面向对象 —— 继承

二、继承 ES6之前并没有给我们提供extends继承。我们可以通过 构造函数原型对象 模拟实现继承,被称为组合继承。 2.1 、call() 调用这个函数并且修改函数运行时的this指向 ● thisArg :当前调用函数this的指向对象 ● arg1 , arg2 :传递的其他参数 2.2、借用构造函数继承父…...

Java List remove时报UnsupportedOperationException

遇到的问题&#xff1a; 解决后&#xff1a; 源代码&#xff1a; /*** 需求&#xff1a;删除字符串中的a8&#xff0c;并重新组成字符串* param args*/public static void main(String[] args) {String str "a3,a4,a5,a6,a8";String[] moIds str.split(StringPool.…...

计算结构体的大小

#include <stdio.h> struct mystruct1 { // 1字节对齐 4字节对齐 int a; // 4 4 char b; // 1 2(11) short c; // 2 2 }; int main(void)…...

ResultMap 关系映射详细使用

关于MyBatis中ResultMap的详细使用ResultMap简介使用ResultMap创建sql 模仿一对多或多对一关系创建数据库创建SpringBoot项目 导入mybatis依赖pojo---------------------------------------------------------------------------------StudentTeacherdao----------------------…...

模拟,枚举与递推

模拟 模拟指的是将题目描述转化为可执行的代码&#xff0c;其中我们会用到编程语言的基础内容&#xff0c;最常见的就是循环。 简单的题目&#xff0c;通常直接模拟就够了&#xff0c;比如 874. 模拟行走机器人 。 而如果是中等和困难的题目&#xff0c;除了使用模拟&#x…...

一种比较直观地推断递归算法时间复杂度的思路

用快速排序举例 问题规模为N 递归第一层为 N 递归第二层 分成两个分区&#xff0c;每个分区的规模为 N/2 &#xff08;取平均值1/2&#xff09; ... 因为递归一直二分&#xff0c;所以&#xff0c;到了logN层&#xff0c;分无可分。 每一层其实都要遍历整个数组&#xff…...

计组第五章:中央处理器

文章目录CPU的功能和基本结构1.运算器的基本结构①专用数据通路方式②CPU内部单总线方式2.控制器的基本结构小结CPU的功能和基本结构 1.运算器的基本结构 ①专用数据通路方式 AX、BX……这些就和图里的R0、R1……对应 三态门每一路都接上&#xff08;一端接输出一端接输入&am…...

小工具整理

转载&#xff1a; 在线工具 - 你的工具箱 (tool.lu) 1.正则 [正则表达式测试工具 - 在线工具 (tool.lu)](https://tool.lu/regex/) 2.文字加密解密 文字加密解密 - 在线工具 (tool.lu) 3.时间戳转换 时间戳(Unix timestamp)转换工具 - 在线工具 (tool.lu) 4.图片压缩 h…...

链表求和。

分析&#xff1a; 定义三个链表&#xff0c;两个链表负责两组数据的存储&#xff0c;第三个链表负责存储结果&#xff0c;前两个链表每个对应位置上的数据相加&#xff0c;注意进位处理&#xff0c;以及如果两个链表不等长的情况。 代码实现&#xff1a; class Solution3 {pu…...

【数组-中等】560. 和为K的子数组

【题目】 给定一个整数数组和一个整数 k&#xff0c;你需要找到该数组中和为 k 的连续的子数组的个数。 示例 1 : 输入:nums [1,1,1], k 2 输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。 说明 : 数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] &#xff0…...

Linux --- shell位置参数变量

一、位置参数变量 当我们执行一个shell脚本时 ,如果希望获取到命令行的参数信息&#xff0c;就可以使用到位置参数变量比如: /myshell.sh 100 200&#xff0c;这个就是一个执行shell的命令行 &#xff0c;可以在myshell脚本中获取到参数信息 基本语法&#xff1a; 1.$n (功能…...

源码分析MyCat专栏

源码分析MyCAT1.6目录 1、源码研究mycat之mysql通信协议篇之握手认证协议 2、源码分析mycat1.6之mysql通信协议篇之COM_QUERY(SELECT语句报文解析) 3、源码分析mycat1.6之mysql通信协议篇之存储过程调用 4、源码研读Mycat1.6之网络篇---前端线程模型&#xff08;应用程序与…...

树莓派基于Linux内核驱动开发详解

一、驱动认知 首先理解Linux内核框图 文件系统认知&#xff0c;Linux内核框图 1、什么是驱动 linux内核驱动。软件层面上的驱动 广义上是指&#xff1a;这一段代码操作了硬件去动&#xff0c;所以这一段代码就叫硬件的驱动程序。狭义上驱动程序就是专指操作系统中用来操控硬…...

[HCIP] 10 - IGMP 协议

一、IGMP 介绍 二、组播组管理协议工作机制&#xff1a;...

解决CSDN无法复制

按F12打开开发者调试模式&#xff0c;点击 “console” ,然后输入 document.body.innerText 语句按回车即可&#xff0c;现在可以随意复制你想要的内容了。...

网页端无法复制粘贴的解决方案

由于瑞格系统无法复制粘贴&#xff0c;写java代码比较难受&#xff0c;所以就找了一些方法来解决网页端无法复制粘贴的问题 1.打开浏览器的设置界面&#xff0c;并打开拓展程序 2.在拓展程序中选择左上角的拓展程序&#xff0c;并打开Chrome网上应用商店。 3.在Chrome网上应用…...

网页禁止进行复制粘贴操作怎么破解?

破解网页禁止复制粘贴的具体操作步骤&#xff1a; 方法一: 1、打开目标网页&#xff0c;选中网页的地址栏。&#xff08;这里以360浏览器为例 2、在地址栏输入下行代码&#xff0c;全部输入。 javascript:void&#xff08;${}&#xff09;; 按下回车键&#xff08;Enter&#x…...

网页禁止复制粘贴怎么办?教你六招轻松搞定

资讯内容 经常在网上遇到一些无法复制的文章&#xff0c;那么问题来了&#xff0c;有什么办法可以绕开这种限制&#xff0c;将网页内容轻松下载回来呢&#xff1f;其实既然是网页内容&#xff0c;那么意味着HTML代码是公开的&#xff0c;将相关文本复制下来根本不是问题&#…...

文本框模糊搜索

在WPF中使用文本框搜索时&#xff0c;其原理是将输入的文字与数据库中已有的数据进行相似匹配&#xff0c;从而模糊的找到相关的资料&#xff0c;这就是模糊搜索。 在前端页面代码中&#xff0c;对搜索栏标签类添加一个属性SelectionChanged并为它赋值txt_Select_SelectionChan…...

java 文本框显示_java 文本框提示文字

package com;import java.awt.FlowLayout;import java.awt.event.FocusAdapter;import java.awt.event.FocusEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextField;public class Kyo extends JFrame{public Kyo(){setSize(100,100);set...

java 添加文本框_java 添加了文本框的窗口

/** 程序头部注释开始* 程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生* All rights reserved.* 文件名称&#xff1a;添加了文本框的窗口* 作 者&#xff1a;薛广晨* 完成日期&#xff1a;2011 年 09 月 11 日* 版 本号&#xff1a;x1.0* 对任务及求解…...

html5单行文本框属性,文本框list属性和文本框autocomplete属性

文本框list属性&#xff1a;为单行文本框增加了一个list属性&#xff0c;该属性的值为某个datalist元素的id。datalist元素也是HTML5中新增的元素&#xff0c;该元素类似于选择框&#xff0c;但是当用户想要设定的值不在选择列表之内时&#xff0c;允许自行输入。datalist元素本…...

poi 设置文本框

1、pom.xml <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version> </dependency> <dependency><groupId>org.apache.poi</groupId><artifactId&...

JTextField文本框的使用

Java 文本框的使用 import java.awt.; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.; public class Demo extends JFrame{ public Demo() { setBounds(100,100,250,500);//设置窗体坐标和大小 setDefaultCloseOperation(EXI…...

学成在线案例素材及代码

头部标签 顶部一行案例分五个盒子&#xff1a; 顶部居中header大盒子&#xff0c;学成在线图片logo盒子&#xff0c;导航栏nav盒子&#xff0c; 搜索栏search盒子&#xff0c;用户user盒子 <div class"header w"><div class"logo"><img sr…...

php在dw中设置按钮圆角,DW按钮怎么设置?在DW中添加Banner按钮实例

这次给大家带来怎样在DW中添加Banner按钮&#xff0c;在DW中添加Banner按钮的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。1、准备好一张banner素材&#xff0c;如图&#xff0c;放在img图片库中2、打开Dreamweaver软件&#xff0c;ctrln新建一个htm…...

html css 制作网页实列,CSS网页制作布局实例教程

CSS混沌初开V&#xff1a;侧边栏导航菜单的实现首先对教程的第四部分作一点补充。有人建议Blog的标题最好使用H1标签&#xff0c;以文本的形式表现标题内容&#xff0c;原因是不论是在CSS关闭的情况下&#xff0c;还是对于搜索引擎的抓取&#xff0c;H1标签结合文本的形式都具有…...

html控制那些网页元素,使用CSS控制网页元素

※任务分析在项目4中制作网页时&#xff0c;我们通过“属性”面板为页面中的部分文本设置了大小和颜色等属性值。在浏览时&#xff0c;网页内的文本才会显得比较协调。这时我们已经在不知不觉中使用了CSS样式。本任务中我们要对company.html网页的页面、段落和文本等方面进行样…...

安卓案例:利用URLConnection下载网页

文章目录一、安卓网络编程二、运行效果三、涉及知识点四、实现步骤&#xff08;一&#xff09;创建安卓应用&#xff08;二&#xff09;准备图片素材&#xff08;三&#xff09;主布局资源文件&#xff08;四&#xff09;字符串资源文件&#xff08;五&#xff09;授权访问因特…...

网页设计——“说旅游”素材

hello&#xff01;大家好。今天给大家分享一下关于“说旅游”网页设计时的思路和过程。在这个过程中加入了自己的一些小设计和想法。 目录 一、实现效果&#xff1a; 二、设计思路: 1、网页header设计&#xff1a; 2、网页main设计&#xff1a; 3、网页footer设计&#xff1…...

UI素材干货模板|网页“按钮”组件,教你要如何设计!

按钮从现实生活中延续到现代应用&#xff0c;一般情况下&#xff0c;点击之后会做出相应反应的都可称作是按钮。它在界面中出现的频率非常高&#xff0c;导致我在之前就觉得对于这个元素足够熟悉&#xff0c;而忽略了它的一些设计细节。 按钮有常见的面性形式和图文结合形式两…...

网页翻页按钮搜索框PSD素材

2019独角兽企业重金招聘Python工程师标准>>> 网页翻页按钮搜索框PSD素材 转载于:https://my.oschina.net/ajian2014/blog/299778...

汉堡按钮html写法,ProtoPie 详解 — 汉堡按钮制作

原标题&#xff1a;ProtoPie 详解 — 汉堡按钮制作每周一期的 ProtoPie 详解教程又来啦&#xff0c;上期马克笔设计留学的MUzi老师主要介绍了 ProtoPie 的交互动作原理《ProtoPie详解 — 交互动作》&#xff0c;从这期开始MUzi老师将为大家单独介绍具体动效的制作&#xff0c;这…...

【Leetcode】1682. Longest Palindromic Subsequence II

题目地址&#xff1a; https://leetcode.com/problems/longest-palindromic-subsequence-ii/description/ 给定一个长nnn字符串sss&#xff0c;求其长度为偶数的最长回文子序列&#xff0c;要求除了正中间两个字母相等以外&#xff0c;其余位置相邻字母都不相等。题目保证sss…...