首页
关于
友链
留言
Search
1
安装Docker Desktop报错WSL 2 installation is incomplete
76 阅读
2
震惊!杭州应届生工作免费领2w元
31 阅读
3
我的世界紫禁之巅纯净生存服务器
25 阅读
4
python3网络爬虫开发实战pdf
22 阅读
5
火车头采集问题:Void Proc(System.Net.HttpWebRequest)
20 阅读
技术分享
日常学习
我的世界
Search
标签搜索
python
博客
javascript
ce
web
织梦
html
按键精灵
php
游戏
css
typescript
jquery
日常
数据库
vue
ubuntu
Datehoer
累计撰写
178
篇文章
累计收到
10
条评论
首页
栏目
技术分享
日常学习
我的世界
页面
关于
友链
留言
搜索到
138
篇与
技术分享
的结果
2020-12-07
python 百钱百鸡案例以及CRAPS赌博游戏案例讲解
python 百钱百鸡案例以及CRAPS赌博游戏案例讲解。这两个案例其实并没有之前的那个水仙花数出名,哈哈,也可能是我孤陋寡闻了。简单说明一下这两个案例都是什么意思。百钱百鸡说明:百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?其实这个案例让我想到了那个黑球白球红球的问题,跟这个类似,不过那个是一个加一个是多少,这两个虽然题不一样但实际上用到的东西都是一样的。就是首先先循环嵌套,在一个鸡循环的时候另外再循环一个,然后进行判断即可。如公鸡1只,然后母鸡循环,每循环一次进行判断不断循环遍历就行了。简单来说只要满足一个式子就行了,公鸡*5+母鸡*3+小鸡/3等于100即可。不过其实除了这个还有一个式子需要满足,就是有100只鸡,不过这个需要通过循环来实现。简单看一下代码吧。for x in range(0, 20): for y in range(0, 33): z = 100 - x - y if 5 * x + 3 * y + z / 3 == 100: print('公鸡: %d只, 母鸡: %d只, 小鸡: %d只' % (x, y, z))x代表公鸡,y代表母鸡,z代表小鸡,这是因为公鸡和母鸡很好表示,而小鸡因为要除3所以相对难表示一些。然后我们的条件也就是全买公鸡,全买母鸡,100块钱能买几只来作为判断。不得不说计算机其实最擅长的就是这类方法了,穷举法。这个就是一个非常生动的例子,把所有的可能都列出来,然后进行挨个判断,将符合条件的提取出来。CRAPS赌博游戏说明:CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简单的规则是:玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;其他点数玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数,玩家继续要骰子,直到分出胜负。这里我们就需要用到python中一个很常用的库了,random库,随即库。我们要利用里面的randint获取随机值来进行摇点操作,其实这个和我之前一篇文章中所说的猜数游戏非常类似吧,只不过加上了摇点数的判断而已,不过其实猜数也有,只不过稍微简单了一些。注:这篇《python打印简单三角形》中所说的猜数游戏为《python从入门到实践》中作者给家人玩的小游戏,使得作者很有成就感。我们直接先上代码,然后进行讲解。""" Craps赌博游戏 我们设定玩家开始游戏时有1000元的赌注 游戏结束的条件是玩家输光所有的赌注 """ from random import randint money = 1000 while money > 0: print('你的总资产为:', money) needs_go_on = False while True: debt = int(input('请下注: ')) if 0 < debt <= money: break first = randint(1, 6) + randint(1, 6) print('玩家摇出了%d点' % first) if first == 7 or first == 11: print('玩家胜!') money += debt elif first == 2 or first == 3 or first == 12: print('庄家胜!') money -= debt else: needs_go_on = True while needs_go_on: needs_go_on = False current = randint(1, 6) + randint(1, 6) print('玩家摇出了%d点' % current) if current == 7: print('庄家胜') money -= debt elif current == first: print('玩家胜') money += debt else: needs_go_on = True print('你破产了, 游戏结束!')不过还是奉劝各位不要玩这种游戏,只要涉及到钱的东西一律不要参加!也就是通过循环来不断的获取你下注的值,然后判断是否为获胜的点数,之后再进行钱数的判断,只要钱大于0就会一直循环下去,直到破产!其实这里就是利用了一个很常用的知识,就是把一个常用到的值进行True或者False赋值,然后根据条件来进行True和False的转换,以达到一些简单但是复杂的功能。其实这个案例还是很简单的,如果不会的话,推荐看一下猜数的小游戏,虽然复杂程度不一致,但是可以看作是它的进阶版。
2020年12月07日
14 阅读
0 评论
0 点赞
2020-12-07
python 爬虫示例(1)
在研究网页收录的时候,发现其实python爬虫这个东西真的很适合web开发。首先说一下需求,爬取网页然后判断是否收录。目前来说还是只是爬取链接数目,判断是否收录的话水平不够,哈哈。其实这个跟我之前的那篇文章一样的内容,只不过修改了一下代码而已。不过今天之所以要发,就是因为想给大家分析一下为什么这个代码这么改以及如何进行学习。说到爬虫其实我也是一个小白而已,许多的例子都是通过边百度边查询才做出来的。推荐先看一下我之前的文章,《python爬虫之获取标题和链接》然后呢,这次我其实是想查询一下我发过文章的平台上面的文章是否收录,这样的话就需要得到他们的文章链接了,而我人比较懒,我宁愿学习怎么爬取也不愿意去挨个复制。所以就有了这篇文章。简单介绍一下思路,一般来说通过xpath获取地址然后通过requests_html就能爬取了,不过方法比较简单。首先呢,我们先看一下我的个人中心中有多少文章。好吧,先上一下代码吧。from requests_html import HTMLSession session = HTMLSession() url = "https://learnku.com/blog/datehoer" # /html/body/div[2]/div[1]/div/div[1]/div/div/div[2]/div[1]/div[1]/div[1]/a # /html/body/div[2]/div[1]/div/div[1]/div/div/div[2]/div[2]/div[1]/div[1]/a # /html/body/div[2]/div[1]/div/div[1]/div/div/div[2]/div[3]/div[1]/div[1]/a # /html/body/div[2]/div[1]/div/div[1]/div/div/div[2]/div[12]/div[1]/div[1]/a r = session.get(url) for i in range(1, 13): i = str(i) urlxpath = '/html/body/div[2]/div[1]/div/div[1]/div/div/div[2]/div['+i+']/div[1]/div[1]/a' bt = r.html.xpath(urlxpath, first=True).text c = urlxpath+'/@href' link = r.html.xpath(c, first=True) # a = "原" # if bt.find(a) == -1: # print(bt) # print(link) # else: # print(bt.replace(a, "")) # print(link) print(link)我们首先还是要获取一下我们爬取的网页,这里我们通过url来储存了这个网页,里面都是我写的文章。然后呢,我们直接分析一下这个文章的标题里面a标签的xpath。随便复制几个出来,然后看一下相同的部分以及不同的部分,这是为了写循环做遍历的准备。然后呢我们发现倒数第三个div内的[id]里的id应该是标签了,通过这个来获取不同的链接,这样我们只需要看一下第一篇和最后一篇的id就行了。之后通过for循环以及range来进行遍历即可。其实简单的爬取的话,只需要这么写就能完成了,而一些偏难的,还是需要使用线程来进行遍历。如果有什么不懂的可以评论留言,我会在看到的第一时间进行回复的。
2020年12月07日
2 阅读
0 评论
0 点赞
2020-12-06
python 求取水仙花数进而引出/和//的区别
首先解释一下水仙花数是什么意思,这个我当时学的时候,看到这个案例都懵了,这水仙花是什么?解释说明:水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身,例如:1^3 + 5^3+ 3^3=153。用人话说一下就是,一个三位数,然后它的每个数的立方和加起来等于它本身。其实这个例子在很早以前都不常用,最近我发现大多数的教程实例都有求取水仙花数的例子,所以准备写一下这个的案例解析。首先简单的上一下代码。for num in range(100, 1000): low = num % 10 mid = num // 10 % 10 high = num // 100 if num == low ** 3 + mid ** 3 + high ** 3: print(num)可以看到我们的range从100开始到1000结束的,这是因为水仙花数是一个三位数,然后呢其实引出的那个知识点就是//和/的区别了,我们如果只是普通的使用/的话,得到的结果为浮点数,后面会加.0而我们使用//的话,得到的是整数。a = 1000 b = a // 10 c = a / 10 print(b) print(c) #100 #100.0可以得到//和/还是有区别的,这是为什么呢?通常C/C++中,"/ " 算术运算符的计算结果是根据参与运算的两边的数据决定的,比如:6 / 3 = 2 ; 6,3都是整数,那么结果也就是整数2;6.0 / 3.0 = 2.0 ; 6.0,3.0是浮点数,那么结果也是浮点数2.0,跟精确的说,只要" / " 两边有一个数是浮点数,那么结果就是浮点数。在Python2.2版本以前也是这么规定的,但是,Python的设计者认为这么做不符合Python简单明了的特性,于是乎就在Python2.2以及以后的版本中增加了一个算术运算符" // "来表示整数除法,返回不大于结果的一个最大的整数,而" / " 则单纯的表示浮点数除法,但是,为了折中,所有2.X版本中,也是为了向后兼容,如果要使用" // ",就必须加上一条语句:from __future__ import division一看到这句," / "就表示 浮点数除法,返回浮点结果;" // "表示整数除法。但是,预计在Python3.0发布时,就没有这种折中情况了,," / "就一定表示 浮点数除法,返回浮点结果;" // "表示整数除法。也就是说其实一开始区别不大,但是后来为了python的特性,所以做出了区别。然后我们再看水仙花的代码,也就非常明了了。这一篇文章也就是简单的介绍了一下水仙花数怎么求,然后着重说了一下python中/和//的区别。如果有什么不会的,可以在评论区留言,我会在看到的第一时间进行回复的。
2020年12月06日
2 阅读
0 评论
0 点赞
2020-12-06
python 打印简单三角形(3种)循环嵌套的应用
python打印三角形,这个我相信每个编程语言的初学者都会学习到这个案例。然后呢,我其实本来是不想发这个的,因为比较简单,但是我仔细一看,其实虽然它套着简单的外壳,但实际上并不简单。循环嵌套,这个应该非常常见,比如说打印表格,打印乘法表,打印金字塔等等,都需要利用循环嵌套。而python循环常用的非别为for in循环以及while循环,我们简单介绍一下两种循环的区别。如果我们明确知道循环需要执行多少次,或者爹对一个容器进行迭代,那我们最好使用for in 循环比如说:我们要求1-100内数值的和,明确了循环需要执行多少次,那么我们使用forin是最好的选择。sum = 0 for x in range(101): sum += x print(sum)既然知道要执行多少次循环使用forin是最好的选择,那么while就是在不知道循环次数时最好的选择了。举一个很好玩的小例子,这个例子也是在《Python编程:从入门到实践》中,作者最初做出来给家人玩的小游戏-----猜数小游戏。import random answer = random.randint(1, 100) counter = 0 while True: counter += 1 number = int(input('请输入: ')) if number < answer: print('大一点') elif number > answer: print('小一点') else: print('恭喜你猜对了!') break print('你总共猜了%d次' % counter) 可以看出,while真的很适合这种判断条件的循环。下面我们切入正题,输出不同的三角形,直接先上代码吧。row = int(input('请输入行数: ')) for i in range(row): for _ in range(i + 1): print('*', end='') print() for i in range(row): for j in range(row): if j < row - i - 1: print(' ', end='') else: print('*', end='') print() for i in range(row): for _ in range(row - i - 1): print(' ', end='') for _ in range(2 * i + 1): print('*', end='') print()效果图呢?其实看到代码就应该明白,这是一个简单的循环嵌套问题,就是把通过最外层循环的行数来进行内部的循环,输出空格+*号,不过只需要通过调整顺序就能得到第一第二两种效果了,而第三种呢,可以看出,他比其余的要多一半,我们还是通过最外层的数据来进行判断,然后进行*2-1的操作就能得到相应的数据了。是不是很简单呢?如果有什么不懂的可以在评论区留言,我会在看到的第一时间进行回复的。
2020年12月06日
4 阅读
0 评论
0 点赞
2020-12-05
console报错:Access to XMLHttpRequest at 'file:已拦截跨源请求:同源策略禁止读
今天在本地测试网站源代码的时候,发现网页怎么都打不开,然后打开console控制台发现报错提示:Access to XMLHttpRequest at 'file:///xxxxxxx/files/config.xml' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https.然后百度查了一下,发现说使用火狐就能打开,结果没想到:已拦截跨源请求:同源策略禁止读取位于 file:///xxxxx/files/config.xml 的远程资源。(原因:CORS 请求不是 http)。报错提示变成中文了,这点很不错,赞一个。中文的话,就能看懂了,原来是资源调用的时候被浏览器拦截了,这个怎么办呢?因为我用的本地网站的源代码,大佬现在还有demo站,然后我就决定找一下大佬的demo站,看看是否能打得开,没想到大佬的网站就能打开,这是为什么呢?其实一开始报错我就搜索了,不过看第一个回答是csdn的,博主跟写小说一样写的又臭又长,所以没看,后面的也就没点了,之后搜索中文的这个拦截跨源请求,发现结果很简单,我们只需要使用服务器请求这个资源就可以了,然后我们本地开一下服务器,使用phpstudy,之后再通过网页的方式请求这个页面,发现可以打开了,感觉其实就是多此一举啦。不过其实这也是为了本地的安全,所以才拦截一下跨院请求(当然这是我瞎扯的)简单来说,出现Access to XMLHttpRequest at 这个报错就是因为你调用文件的时候被拦截了,所以才没有效果,而我们本地搭建一个服务器的话,就可以使用了。如果有什么问题,可以在评论区留言,我会在看到的第一时间进行回复的。
2020年12月05日
3 阅读
0 评论
0 点赞
2020-12-05
Css :host是什么?
今天想要精进(没事干)一下我的html,css技术,所以准备临摹一下谷歌的首页,也就是那个上面是搜索框,下面是快捷方式的那个页面。也就是这个页面:类似于这张图,不过下面没有Google搜素什么的,只是一个简单的快捷方式,将常用的页面添加成了快捷方式(之所以不上图是因为不想让你们看到我的快捷页面,哈哈)其实这个打眼一看,就感觉很容易就能做出来效果了,唯一难度应该就是在下面快捷方式中的样式了。碰到就会发生一个小变化,这个其实使用:hover即可,但是呢,我在边做的过程中,也在用f12查看它谷歌自身的代码,参考一下宽高之类的,然后就发现了一个小问题,它里面的好多代码我都看不懂啊,什么:host,什么 --ntp-theme-shortcut-background-color: rgba(241, 243, 244, 1);之类的。遇事不要慌,我们先ctrl+u看一下源代码,发现谷歌的源代码很简单,因此我觉得它应该是通过js渲染来维护页面的。然后这个:host是什么还是不清楚,只好请出百度了,一查才知道,原来这是一个伪类。CSS 伪类函数 :host() 选择包含使用这段 CSS 的 Shadow DOM 的影子宿主(这样就可以从 Shadow DOM 中选择包括它的自定义元素)——但前提是该函数的参数与选择的阴影宿主相匹配。最简单的用法是仅将类名放在某些自定义元素实例上,然后将相关的类选择器作为函数参数包含在内。不能将它与后代选择器表达式一起使用,以仅选择特定祖先内部的自定义元素的实例。这是 :host-context() 的作用。简单的举一个例子:/* 选择阴影根元素,仅当它与选择器参数匹配 */ :host(.special-custom-element) { font-weight: bold; }通过host来为选定的元素提供特殊的效果,这就是host的用法了。如果还有不懂的,可以点击阅读最后,简单的看一下我写的Google页面吧。写的很拉跨,哈哈,不过确实有所收获。如果有什么不懂的可以在评论区留言,我会在看到的第一时间进行回复的。
2020年12月05日
11 阅读
0 评论
1 点赞
2020-12-04
php foreach循环,索引数组
php中的索引数组是什么呢?它该如何遍历。php中foreach循环是什么?为何它能够遍历索引数组呢?欢迎收看本期php课程之php中的foreach循环以及索引数组。哈哈,上面的是随便写的啦。我们先回归正常模式,首先呢,我们先了解一下php中的数组吧,数组,其实我觉得一开始应该是没有的,大概率一开始只有数字和字符串,然后再有的别的,当然,我随便瞎扯的。数组我认为其实就是为了方便储存,比如说我们储存一下手机号,如果没有数组的话,那就需要一个变量名后面跟一个手机号吧,总不能我定义一个$shoujihao ='11111,3333,1111,5555,111'吧,是不是总不能这么储存,而我们如果每一个手机号都单独命名一个变量的话,真的是非常麻烦的,特别是我这种没文化的,起名字起的非常的水,只会shoujihao1,shoujihao2来起名。所以数组就出现了,我们只需要把需要储存的同一类型的数据储存到同一个数组就行了,之后利用下标就可以调用了。简单的举一个小例子:<?php $xlz=array("123","456","789"); echo $xlz[0] . ", " . $xlz[1] . " , " . $xlz[2] . "."; ?> //123, 456 , 789.结果其实不用看也知道,我们通过下标就能把数据提取出来了,比之前方便的多很多,毕竟我们这样只需要记一下下标值就行了。然后呢,切入正题,说一下我们的主角,索引数组。这是个什么东西呢?我觉得这就是因为其实这个数组还是不是很明显,想要把数据表现得更加明显一些。不过其实我觉得这个还不如用字典呢,字典这个东西也是很厉害的呢。索引数组 索引数组 索引数组索引数组其实跟字典类似,就是把普通数组中的下标给换成了自定义的下标而已,然后通过自定义下标的值来进行调用。索引数组也简单的举一个小例子,今天上课老师举的,至于为什么不我不自己举一个,是因为水平有限!$color = array('one'=>'red','two'=>'blue','three'=>'black','four'=>'white');这就是一个简单的定义索引数组了,而我们要怎么把数据提取出来呢?当然还是跟前面的一样啦,只不过把数字换成了我们自定义的下标而已。echo $color['one']//red简单的输出一个值,当然,一定要记住,既然你自定义下标了,那么需要加一下引号,当然,你自己定义的时候加的一定要加。接着就说一下我们另一个主角咯,foreach了。我们都知道,既然储存了数据,那么肯定是要提取出来的,而我们之所以用数组我觉得大概率就像上面所说的,储存大量相同类型的数据,所以这就离不开for循环的遍历了,毕竟提取大量数据肯定还是用循环遍历出来舒服啊。而我们普通的遍历,只需要设置初始值为0即可提取所有的数据了,那我们的索引数组呢?foreach foreach foreach我们通过foreach来循环遍历索引数组中的值,就直接使用前面的例子了。$color = array('one'=>'red','two'=>'blue','three'=>'black','four'=>'white'); foreach($color as $key =>$vaule){ echo '$key'.$key.'$vaule'.$vaule.'<br>'; }可以看到,我们的()内的值跟for是不同的,这是必然的,哈哈。简单讲解一下,$color这个是数组名,然后as是必须的,而后面的$key =>$vaule跟我们定义的时候是不是很像,所以其实$key就是前面的下标值(突然想起来这个应该叫键值吧),$vaule这个就是后面的储存的值了,然后我们看下结果再说重点。$keyone$vaulered $keytwo$vauleblue $keythree$vauleblack $keyfour$vaulewhite结果就是像上面这样,一个键跟一个结果。不过不要误会,$key和$vaule不是规定的,这个是随意的,你想叫什么名就叫什么名。然后除了这种,其实还有别的遍历的方法,当然,都是foreach了。还是举我们前面的例子吧,主要是懒得想别的例子了。$color = array('one'=>'red','two'=>'blue','three'=>'black','four'=>'white'); foreach($color as $vaule){ echo $vaule.'<br>'; } //red blue black white很容易理解,就是得到了我们想要的值。最后,再讲一个重点吧,&这个符号相信大家都不陌生,c语言经常要用到,说实在的我一开始确实没想到这个有啥用,为啥子会用在php的foreach循环上。不知道正在阅读的你是否也懵逼了呢?下面让我先上两个小例子,分别是加了&和不加&的同一个遍历。$arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; echo $value; } $arr = array(1, 2, 3, 4); foreach ($arr as $value) { $value = $value * 2; echo $value; }很容易得到结果,都是2,4,6,8。可能有人会问了,既然都是2468,那他们有什么特别之处呢?只需要在后面加上一个简单的数组输出,就能看出区别了。var_dump($arr);我们加上var_dump($arr);这个后,再看结果的话,会发现加了&的数组输出还是2468,而我们不加的,数组又变回原本的了,这是为什么呢?实际上,foreach是不推荐在循环内修改$vaule的值的,这是因为foreach循环依赖内部数值指针,如果修改可能就会发生意外,所以上面就出现意外了。举一个我看到的例子:$x = array("a", "b", "c"); foreach ($x as &$value) { echo $value." "; } echo "<br/>"; foreach ($x as $value) { echo $value." "; } 这一个,理论上都应该输出的是a b c而第二个循环输出的却是a b b这是为什么呢? 还是那句话,因为它依赖他,所以他修改的话,以来他的它就会发生意外。 简单来说,我们如果修改了值,那么实际上应该得到的结果就是我们修改出来的值,而因为foreach就是引用赋值,把值引用了然后再修改,就相当于没修改了,而我们加上了&这个的话,就会使得修改变成真实的了。 其实第一种和第二种还是有区别的,第二种再说一下,就是我们第一个foreache循环的时候,已经把值给修改了,给$vaule修改了,然后我们下面调用的时候会受到影响,也就是说数组最后一个元素的 $value引用在 foreach循环之后仍会保留,所以后面在使用$vaule的话就会受到影响了。 而第一种就是因为引用问题了。 如果想要避免这些意外的话,最好的办法就是不用!其次就是使用foreach循环的时候,不修改其中的值,然后再就是假如说我们要连续用几次foreach循环的话,那么最好把后面的变量名改一下,前面用$vaule的话,后面不要使用$vaule了。 就是这样,简单一说吧。如果有什么不懂的可以在评论区留言,我会在看到的第一时间进行回复的,当然,如果有问题或者不同的见解,也欢迎指出,谢谢。
2020年12月04日
3 阅读
0 评论
0 点赞
2020-12-03
php explode()函数的用法是什么?
心态爆炸,刚才在编辑文章的时候,点了一下x号,白写了。php explode()函数的用法是什么呢?下面让我来讲解一下,之所以发一下php的文章,是因为今天正好学了这方面的内容,然后自己有感觉比较重要,所以记录一下。众所周知,我们php的数据许多都是要通过前台传递的,而我们有时候会一个文本框传递许多的内容,那么我们就要对传递过来的数据进行处理,否则会出现错误。而explode就应命运而生了(我瞎扯的),他的作用是把字符串打散为数组。<?php $str = "zjzdmc.top"; print_r (explode(".",$str)); ?> /* Array ( [0] => zjzdmc [1] => top ) */简简单单发一个示例,我们可以看到,explode函数需要我们传递两个参数(例子中的),分别是"."和$str,后面的$str很好理解,就是前面定义的那一串字符串,前面的"."呢,这是干什么的。这个就是我们的分隔符,通过它我们可以选择想要分隔的内容然后得到我们想要的数据,当然,它分隔出来的内容是由数组构成的。不要看上面的内容就觉得explode只能分隔出两份内容,他是根据你的分隔符来决定的!比如说我换一个网址进行测试。<?php $str = "www.baidu.com"; print_r (explode(".",$str)); ?> /* Array ( [0] => www [1] => baidu [2] => com ) */得到上面的数据了。其实explode不光可以传递两个参数,它还可以传递第三个参数。我们简单来看一个例子:<?php $str = 'one,two,three,four'; // 返回包含一个元素的数组 print_r(explode(',',$str,0)); print "<br>"; // 数组元素为 2 print_r(explode(',',$str,2)); print "<br>"; // 删除最后一个数组元素 print_r(explode(',',$str,-1)); ?> /* Array ( [0] => one,two,three,four ) Array ( [0] => one [1] => two,three,four ) Array ( [0] => one [1] => two [2] => three ) */后面的第三个参数是分隔出来的数组有几个,比如说0的话,就是一整个不分隔,然后2的话就是两个了,以第一个分隔出来的内容为中点,前后各自组成一个内容,我们可以看到它内容是通过","来进行分隔的,而第一个","就在one的后面,所以我们就把one和其余的分隔起来了,而-1呢?这个就是相当于先全部分隔出来,然后我们根据数字来删除内容,之后再把留下的内容输出出来。我们改成-2的话/* Array ( [0] => one [1] => two ) */就只有两个结果了,所以可以侧面证明我们说的是正确的。然后再举一个小例子吧。我们的php总是要与前端进行交互的,而我们就讲一下交互的内容。首先我们需要计算一下1,2,3,4,5,6这6个值的平均值,而我们由于前端偷懒,只写了一个输入框,那么我们就要使用" "来进行分隔之后输入。先上一下html代码,由于篇幅问题,我们只写关键内容。<form action="1.php" method="POST"> <input type="text" name="shuzhi"> <input type="submit" value="计算"> </form>就是一个简单的表单。然后我们看一下php的内容。<?php $a =$_POST['shuzhi']; $c = explode(' ',$a); $r = 0; for($e =0;$e<count($c);$e++){ $r+=$c[$e]; } echo $r/count($c);非常简单易懂,一看就会,哈哈。简单的讲解一下,前面的html就是通过input来进行输入以及提交,后面的php通过$_POST['shuzhi']来获取数据,然后通过explode来进行分隔,最后再用for循环遍历出来数组内容就行了,非常简单。可以看到我php并没有写后缀,这个其实我在之前有说过的,如果只是单一的php文件,没必要添加结束符,不过如果不是单一的php文件,那还是需要添加的。这样我们就完成了简单的交互了。今天舍友过生日,一般文章就更新这一篇了,晚上要一起吃个饭啥的,祝潘维昊生日快乐!如果有什么不懂的,可以在评论区留言,我会在看到的第一时间进行回复的。
2020年12月03日
6 阅读
0 评论
0 点赞
2020-12-02
python is和==的区别是什么?
众所周知,我们的python中有很多的运算符,其中有的是经常使用的有的是不常使用的,其中比较常用的有is和==然后呢,他们其实有的时候是通用的,都是作为相等比值来使用的。但是有的时候,他们并不能划等号。先上一下代码。a = 257 b = 257 print(a is b) print(a == b) #out1: False #out2: True我们可以看到,虽然都定义的是257,但是我们通过print显示的时候,会发现is是false,==是true。这是为什么呢?我们首先要先了解一下python中对象包含的三个基本要素。分别是id(身份标识),type(对象类型),value(对象值)。然后我们再看一下is和==的介绍。is ---- 比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象,是否指向同一个内存地址。== ---- 比较的是两个对象的内容是否相等,默认会调用对象的__eq__()方法。== 是 python中标准操作符的比较操作符,它是用来比较判断两个对象的 value (值) 通过==我们可以得到这两个对象的值是否相等。a = 'cheesezh' b = 'cheesezh' print(a == b) #Trueis 也被称为同一性运算符,它是比较判断对象间的唯一身份标识,也就是 id 是否相同。Python程序是由代码块构成的,其中代码块是作为程序最小的基本单位来执行,代码块是一个模块文件、一个函数体、一个类、交互式命令中的单行代码,Python出于对性能的考虑,但凡是不可变对象,在同一个代码块中的对象,只有是值相同的对象,就不会重复创建,而是直接引用已经存在的对象。通过以上的内容,可以得到的结论是,同一个代码块中的不可变的对象,只要他们的值是相等的就不会重复创建新的对象。而是通过引用等方法来调用同一地址的值。小整数对象[-5,256]是全局解释器范围内可以被重复使用的对象,永远不会被回收。不过今天其实主要是因为在搬宿舍,没什么时间来写文章了,所以发了篇之前的凑付一下。通过以上的内容,不知道你是否还有疑惑,如果有什么不懂的可以在评论区留言,我会在看到的第一时间进行回复的。
2020年12月02日
7 阅读
0 评论
0 点赞
2020-12-01
python collections库
今天在看《流畅的python》的时候,在第一章就遇到了没见过的库了,很尴尬,所以百度查了一下collections库。这个collections库相当于是一个仓库,里面储存了一些常用的集合类,也就是一个集合,把一些本来需要自己定义的类整合到了一起,这样直接使用collections库就行了。其中内置的类有:namedtupledequedefaultdictOrderedDictCounternamedtuple其中namedtuple是一个工厂函数,通过它来构造一个带字段名的元组,比如说坐标,namedtuple的具名元组的实例和普通元组消耗的内存是一样多的,这是因为字段名都被存在了对应的类里面。但是这个类跟普通的对象实例比起来也要小一些的,因为 Python 是不会使用 __dict__ 存存这些实例的属性。我们都知道tuple以表可示不变集合,例如,一个点的二维坐标就可以表示成p = (1, 2),但是我们如果只看(1,2)的话,是和很难感觉出这是坐标的。如果我们定义一个类的话,虽然可以明确的表达出来(1,2)是一个坐标,但是未免有点杀鸡用牛刀了,有点小题大做。这个时候 namedtuple就应命运而生了。from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(1, 2) print(p.x) #1 print(p.y) #2namedtuple是一个定义出来的函数,通过它来创建一个自创的tuple对象,并且规定了tuple元素的数量,而且可以使用属性而不是索引来调用tuple的某个元素,如此,我们使用namedtuple就看可以 非常方便的定义一种数据类型了,它他又tuple的不变性,并且能根据属性来调用 ,所以它的应用非常广泛,使用起来非常的方便。deque在使用list储存数据的时候,发现按照索引访问元素的时候很快,但是如果插入或删除元素的话,就很慢了。这是因为什么呢?因为list是线性存储,所以它在数据量很大的时候,插入或删除的效率都是很低的。deque是一个为了实现插入或删除操作时都很快的函数,它为了高校实现插入和删除操作的双向列表,很适合于队列和栈。deque除了实现你了list的删除和增加,它还支持appendleft()和popleft(),因为前文说过它是为了提高效果,而支持这两个函数的话就会非常高效的操作列表了。 defaultdict在使用dict的时侯,如果我们要引用的Key是不存在的话,那么程序就会抛出异常--KeyError。但是假如我们希望如果key不存在的时候,程序返回的是一个默认值,那我们就可以用defaultdict。from collections import defaultdict dd = defaultdict(lambda: 'N/A') dd['key1'] = 'abc' print(dd['key1']) #'abc' print(dd['key2']) # key2不存在,返回默认值 #'N/A'当然,我们要使用这个函数的时候,记得要在最前面定义一下如果不存在的时候返回什么默认值。CounterCounter它是一个很简单的计数器,功能还挺多,比如说统计字符出现的个数。这个是常规的方法colors = ['red', 'blue', 'red', 'green', 'blue', 'blue'] result = {} for color in colors: if result.get(color)==None: result[color]=1 else: result[color]+=1 print (result) #{'red': 2, 'blue': 3, 'green': 1} 而我们使用counter呢?from collections import Counter colors = ['red', 'blue', 'red', 'green', 'blue', 'blue'] c = Counter(colors) print (dict(c)) #{'red': 2, 'blue': 3, 'green': 1}OrderedDict如果我们想要保持字典的顺序的话,可以使用一下OrderedDict,通过OrderedDict就可以保持字典的顺序。import collections print "Regular dictionary" d={} d['a']='A' d['b']='B' d['c']='C' for k,v in d.items(): print k,v print "\nOrder dictionary" d1 = collections.OrderedDict() d1['a'] = 'A' d1['b'] = 'B' d1['c'] = 'C' d1['1'] = '1' d1['2'] = '2' for k,v in d1.items(): print k,v好了,以上就是一些collections常出现的一些集合类了,其余的还是需要自己查询得,推荐可以通过.py文件来进行阅读。如果有什么不懂的可以在评论区留言,我会在看到的时候进行回复的。推荐阅读官方文档--->https://docs.python.org/zh-cn/3/library/collections.html版权:本文由Datehoer原创,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接本文链接:https://zjzdmc.top/jsfx/73.html。
2020年12月01日
2 阅读
0 评论
0 点赞
2020-12-01
Javascript 箭头函数是什么?
Es6新增了一个新的函数定义方法,Arrow Function箭头函数。为什么它要叫箭头函数呢?是因为它定义就是一个箭头,所以叫做箭头函数。简单的定义一下:var fn1 = (a, b) => { return a + b }而我们常规的定义:var fn1 = function(a, b) { return a + b }这么看其实感觉区别不是很大,我们可以把换行去掉。var fn1 = (a, b) => { return a + b } var fn1 = function(a, b) {return a + b}这样就明显许多,可以看成使用=>取代了function,但是并不能这么简单的说是谁取代了谁。箭头函数简化了函数的定义过程,毕竟省掉了function呢。并且其实箭头函数不光有上面这种方法,还有另外一种,更加简单的方法。var fn1 = (a) => 5简单来说就是这样,然后我们调用fn1的话,会得到5这个值。当然,并非所有的箭头函数都可以省略return,只有满足当箭头函数的箭头后面是一个简单操作时,可以直接去掉“{ }”,进而不使用return 也能返回值。虽然看上去箭头函数就像是匿名函数的一种简写,但实际上,箭头函数和匿名函数还是有着很大的差别的,比如说:箭头函数的内部this是词法作用域,是通过上下文确定的。箭头函数比函数表达式更加简单便捷,并且箭头函数没有属于自己的this,arguments,super以及new.target,箭头函数更适合于那些本身需要匿名函数的地方,而且还不能当作构造函数。(param1, param2, …, paramN) => { statements } (param1, param2, …, paramN) => expression //相当于:(param1, param2, …, paramN) =>{ return expression; }当参数只有一个的时候,外面的圆括号是可以省略的,param => {example}如果说是一个没有函数的箭头函数的话,那么外面的圆括号就不能省略了,应该写成:() => {example}并且箭头函数的参数和箭头是不能换行的。但是,可以通过在=>之后换行,或者用 ()、{}来实现换行var func = (a, b) => 1; var func = (a, b) => ( 1 ); var func = (a, b) => { return 1 }; var func = ( a, b ) => 1;这样子换行是不会有错误提示的。箭头函数的规范-->ECMAScript 2015 (6th Edition, ECMA-262) ECMAScript (ECMA-262) 更多教程-->箭头函数
2020年12月01日
2 阅读
0 评论
0 点赞
2020-11-30
python如何根据条件断句
div class="mainbody"> python该如何断句呢?根据自己的需要,当然其实大部分人只是在爬取数据的时候用到了断句,比如说我之前的那篇 python爬取我的世界id ,就用到了,不过是断的行。更多的其实是练习,下面我们进行一下python断句的联系。需求--将提供的文本进行断句,并储存到excel中。 python断句 From1111To aaa For 444445555 0n dadd From 2.222To bbbb For 66667777 Oneeee From 333To cccc For88889.99 on ffff 上面就是我们的内容了我们想把他们进行分割,那么就需要使用到re这个正则库,接着我们想要储存到excel中,则需要使用openpyx这个库。首先还是先导入数据 import re from openpyxl import load_workbook 然后呢,我们既然要断句,那么就需要储存一下关键字,从哪里开始断。 keywords = ["From", "To", "For", "On"] 接着其实就是需要处理一下数据了,我们这里使用的是re,然后把它储存在一个函数里 def symbol(text): return [item.strip() for item in re.split('|'.join(keywords), text) if item.strip()!=''] 然后再进行调用判断数据即可,最后再写入进去。这里我们就实情模拟一下,将需要断句的文字放到了一个excel文件里,接下来直接上完整的代码。 import re from openpyxl import load_workbook def symbol(text): return [item.strip() for item in re.split('|'.join(keywords), text) if item.strip()!=''] keywords = ["From", "To", "For", "On"] filename = 'lizi.xlsx' wb = load_workbook(filename=filename) ws = wb['Sheet1'] for cell in ws[1:1]: text = cell.value symbols = symbol(text) for i, s in enumerate(symbols): ws[f'{cell.column_letter}{i+2}'] = s wb.save(filename)这样,简简单单的就把句子给拆开了,并且储存在了我们想要的文件里。如果有什么不懂的可以在评论区留言,我会在看到的第一时间回复的。
2020年11月30日
3 阅读
0 评论
0 点赞
1
...
7
8
9
...
12