首页
关于
留言
壁纸
更多
直播
统计
友链
Search
1
好用的软件分享
354 阅读
2
最新Navicat 15 for MySQL破解+教程 正确破解步骤
261 阅读
3
面试常见问题100问
218 阅读
4
一个人要走的时候,千万别问原因
182 阅读
5
直击心灵的唯美句子
144 阅读
日常记录
后端
PHP
NodeJs
Python
Java
前端
JavaScript
数据库
MySQL
服务器
美文
微信开发
微信公众号
微信小程序
编程
登录
Search
标签搜索
mysql
python
django
express
面试
axios
thinkphp
PHP
励志
哲理
九九乘法表
node
cors
跨域
唯美句子
美文
文件上传
ajax
算法
jwt
公子初心
累计撰写
74
篇文章
累计收到
9
条评论
首页
栏目
日常记录
后端
PHP
NodeJs
Python
Java
前端
JavaScript
数据库
MySQL
服务器
美文
微信开发
微信公众号
微信小程序
编程
页面
关于
留言
壁纸
直播
统计
友链
搜索到
74
篇与
的结果
2024-05-16
好用的软件分享
1.全球最好用的浏览器:谷歌浏览器 chrome 市场份额排名第一https://www.google.cn/chrome/index.html2.简单切强大的输入法:搜狗智慧版https://pinyin.sogou.com/zhihui/3.个人杀毒软件:火绒安全软件https://www.huorong.cn/4.电脑最好清理软件,无需安装杀毒软件:ccleaner + 计算机磁盘清理https://www.ccleaner.com/zh-cn/ccleaner5.免费且强大的压缩解压软件:7zip 软件体积小 压缩率更高 支持多种格式https://www.7-zip.org/6.支持所有视频格式,倍速播放,小巧切强大:potplayerhttp://www.potplayercn.com/download7.功能强大录屏软件:ev录屏https://www.ieway.cn/8.小巧切强大的截图软件:Snipaste截图 办公,教学都在使用https://www.snipaste.com/download.html9.比QQ好用的远程控制软件: 向日葵https://sunlogin.oray.com/10.pc端电脑闹钟:梦畅闹钟http://www.naozhong.net/11.磁盘分区,数据恢复等:diskgeniushttps://www.diskgenius.cn/12.正版操作系统,正版软件:iTellYouhttps://next.itellyou.cn/13.屏幕放大软件:zoomit 适合教学https://learn.microsoft.com/zh-cn/sysinternals/downloads/zoomit14.阿里云盘:第三方客户端: 蜗牛云盘 不限速下载,上传https://snail8.cn/html/index.html15.个人导航站:旭辉网址导航https://www.itnan.cc16.音乐播放神器~千千静听链接: https://pan.baidu.com/s/1nnGu0pnvHUUxIQN0Bn6WkA?pwd=yhh7 17.PDF文档编辑神器 PDF-XChange链接: https://pan.baidu.com/s/12wLiadkX0Y7pjPVguKNTQg?pwd=rjhr 18.加密隐藏电脑小秘密神器 ulockhttps://pan.baidu.com/s/1ZVxjVNQXeIaXuEq7BgbeWA?pwd=6rbu 19.飞书注册使用https://accounts.feishu.cn/accounts/page/login?app_id=100&no_trap=1&redirect_uri=https%3A%2F%2Faccounts.feishu.cn%2Faccounts%2Fsecurity%2Fpage%2F
2024年05月16日
354 阅读
0 评论
2 点赞
2024-05-14
JS实现无限级分类
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> let arr = [ { id: 1, 'auth_name': '商品管理', pid: 0 }, { id: 2, 'auth_name': '商品添加', pid: 1 }, { id: 3, 'auth_name': '商品列表', pid: 1 }, { id: 4, 'auth_name': '用户管理', pid: 0 }, { id: 5, 'auth_name': '用户添加', pid: 4 }, { id: 6, 'auth_name': '商品添加1', pid: 2 }, ] function buildTree(items) { // 创建一个空的映射,用于存放每个id对应的节点 const map = new Map(); // 遍历数组,建立id到节点的映射,并为每个节点初始化children数组 items.forEach(item => { map.set(item.id, { ...item, children: [] }); }); // 遍历数组,将每个节点添加到其父节点的children数组中 items.forEach(item => { // 如果当前节点不是根节点(pid不为0) if (item.pid !== 0) { // 从映射中获取父节点 const parent = map.get(item.pid); // 如果父节点存在,将当前节点添加到父节点的children数组中 if (parent) { parent.children.push(map.get(item.id)); } } }); // 过滤出根节点(pid为0)并返回 return Array.from(map.values()).filter(node => node.pid === 0); } const tree = buildTree(arr); console.log(tree); console.log(JSON.stringify(tree, null, 2)) </script> </body> </html>
2024年05月14日
29 阅读
0 评论
0 点赞
2024-04-26
获取豆瓣电影所有分类下的所有电影下的每部电影的前100条好评
# 导入xpath模块 用于解析页面数据 from lxml import etree # 导入系统模块 用于自动创建目录 import os # 导入requests模块用于发送http请求 import requests import json # 发起请求获取数据 def get_content(url,data=[],ispost=0): # user-agent 设置头信息 模拟浏览器访问 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36", } if ispost: response = requests.post(url=url, headers=headers,data=data) else: response = requests.get(url=url, headers=headers) response.encoding = response.apparent_encoding return response.text # 根据电影Id获取电影的评论 def getCommentByMovieId(typeName,movieId,limit=100): try: url = f"https://movie.douban.com/subject/{movieId}/comments?percent_type=h&limit={limit}&status=P&sort=new_score" # 发送请求 获取页面源码 result = get_content(url) # 获取数据 etree1 = etree.HTML(result) # xpath解析 # 标题 title = etree1.xpath("//h1/text()")[0] # 评论人 authors = etree1.xpath("//span[@class='comment-info']/a/text()") # 评论时间 times = etree1.xpath("//span[@class='comment-info']/span[@class='comment-time ']/text()") # 评论内容 contents = etree1.xpath("//span[@class='short']/text()") moviePath = f"./movieCommentData/{typeName}" if not os.path.exists(moviePath): os.makedirs(moviePath) # 依次遍历,输出数据 s = "=" print(f"{s * 30}正在获取电影【{title}】{s * 30}") for i in range(len(authors)): print(f"评论人:'{authors[i]}'---评论内容:'{contents[i]}---评论时间:'{times[i].strip()}''") filename = moviePath + '/' + title + '.txt' with open(filename, 'a+', encoding="utf-8") as f: f.write(f"评论人:'{authors[i]}'---评论内容:'{contents[i]}'---评论时间:'{times[i].strip()}'\n") f.close() print(f"{s * 30}电影【{title}】获取完毕{s * 30}") except: pass url = "https://movie.douban.com/chart" # 发送请求 获取页面源码 result = get_content(url) # 获取数据 etree1 = etree.HTML(result) # xpath解析 typeUrl = etree1.xpath("//div[@class='types']/span/a/@href") typeUrlList = [] for url in typeUrl: typeName = url.split("&")[0].split('=')[1] print(f"正在获取【{typeName}】分类下的电影信息......") typeId = url.split("&")[1].split("=")[1] # 根据电影分类获取此分类下的电影总数 totalUrl = f"https://movie.douban.com/j/chart/top_list_count?type={typeId}&interval_id=100%3A90&action=" # 获取到此分类下的电影总数量 movieTotal = json.loads(get_content(totalUrl))['total'] print(f"{typeName}分类下的电影一共有{movieTotal}部") # 根据电影总数量依次获取这些电影 for i in range(movieTotal+1): baseUrl = f"https://movie.douban.com/j/chart/top_list?type={typeId}&interval_id=100%3A90&action=&start={i}&limit=1" movieInfo = json.loads(get_content(baseUrl))[0] # 获取电影Id movieId = movieInfo['id'] getCommentByMovieId(typeName,movieId)
2024年04月26日
56 阅读
0 评论
1 点赞
2024-04-26
根据电影id获取豆瓣电影下的前100条好评
movies = [1291546,6973376] # 导入xpath模块 用于解析页面数据 from lxml import etree # 导入系统模块 用于自动创建目录 import os # 导入requests模块用于发送http请求 import requests # 发起请求获取数据 def get_content(url,data=[],ispost=0): # user-agent 设置头信息 模拟浏览器访问 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36", } if ispost: response = requests.post(url=url, headers=headers,data=data) else: response = requests.get(url=url, headers=headers) response.encoding = response.apparent_encoding return response.text limit = 100 # 遍历电影列表数据,获取电影id for movieId in movies: url = f"https://movie.douban.com/subject/{movieId}/comments?percent_type=h&limit={limit}&status=P&sort=new_score" # 发送请求 获取页面源码 result = get_content(url) # 获取数据 etree1 = etree.HTML(result) # xpath解析 # 标题 title = etree1.xpath("//h1/text()")[0] # 评论人 authors = etree1.xpath("//span[@class='comment-info']/a/text()") # 评论时间 times = etree1.xpath("//span[@class='comment-info']/span[@class='comment-time ']/text()") print(times) # 评论内容 contents = etree1.xpath("//span[@class='short']/text()") moviePath = "./movieCommentData/" if not os.path.exists(moviePath): os.makedirs(moviePath) # 依次遍历,输出数据 s = "=" print(f"{s*30}正在获取电影【{title}】{s*30}") for i in range(len(authors)): print(f"评论人:'{authors[i]}'---评论内容:'{contents[i]}---评论时间:'{times[i].strip()}''") filename = moviePath+'/'+ title + '.txt' with open(filename, 'a+', encoding="utf-8") as f: f.write(f"评论人:'{authors[i]}'---评论内容:'{contents[i]}'---评论时间:'{times[i].strip()}'\n") f.close() print(f"{s*30}电影【{title}】获取完毕{s*30}")
2024年04月26日
20 阅读
0 评论
0 点赞
2024-04-17
相亲攻略
告别单身是很多人的梦想,不单单是年轻人,很多不年轻的人也开始走向这个单身的行列。在下面的文字里,我们主要讨论的是年轻的单身一族。在开始讨论之前,先有几个关于婚姻的观点和大家分享一下: 第一、难以结婚是目前比较普遍的社会现象,也是一个社会产物,不是个人不好; 第二、结婚不一定会带来幸福,但是不结婚的人幸福指数确实比结婚的人低; 第三、婚姻是与另外一个人互动的过程,需要两个人积极自我成长,相互适应; 第四、爱是婚姻的第一要素,但是是这份爱是原先自己就有的,不是靠对方给你的; 第五、热爱婚姻,就是热爱生活,婚姻是繁琐的,就像生活一样; 第六、婚姻幸福的前提是:女人跟随男人,男人为女人服务; 第七、婚姻是一种生活方式,不结婚也是一种生活方式,只是自己的选择; 第八、婚姻关系是最高级别的人际关系,需要用心耕耘; 第九、女性在婚恋中是推动者,男性是决定者; 第十、婚姻中的性是神圣而美好的。 好了,上面这些基本的观点也许你不一定认同,没有关系,这段文字要和大家分享的只是个人的看法,目标只是提高相亲的成功率,如果你是热爱婚姻的人,不排斥通过相亲这种有点老土的方式来寻找伴侣,那么可以继续和我一起来讨论。 攻略第一步:相亲的心理预备 相亲这种方式诚然是不太舒服的,或多或少让人觉得有点沮丧,仿佛将自己作为一个商品放在被人挑选的位置上,所以我很理解常常被周围的亲戚朋友叫去相亲给年轻优秀的男女带来的不爽。不过,这确实是一个不错的方式,如果你不是那么排斥的话,因为介绍的人多半都是有些社会阅历的,对双方的情况比较了解,所以在相亲中找到合适的终身伴侣并且相濡以沫的人其实是很多的。 但是对于在外地孤身奋斗的人可能就没有那么幸运了,没有人为自己操心,生活节奏很快,接触人又很有限,致使许多优秀的男女失去了相互靠近的机会。从网络征婚,参加青年聚会甚至商业性的集体征婚活动都已经可以被很多人接受。而对于自身条件好的青年男女,尤其是女孩子,要接受这样的方式确实需要做出很多的让步,鼓起很大的勇气。所以,当你迈出征婚的这一步,当你接受别人介绍的走出去约会的时候,也许你心里对自己感到沮丧和对现实有些小小怨气。实际上这个时候,要热烈地表扬自己,因为你是多么勇敢和有信心啊!而且,你已经迈出了通向幸福的第一步,这个时候,你就会从内心向外洋溢着迷人的神采。状态好的时候,就是你去挑别人,状态不好,就是别人挑你了,所以良好的状态是相亲成功的前提。 攻略第二步:相亲的准备 相亲不是去面试,所以准备的时候不需要去展示自己的优势和才华,相亲是去寻找可能和自己过一辈子的人,需要将自己作为一个鲜活的人的状态表达出来,这样便于双方一开始以本色来面对对方。外表的修饰只要是符合自己、能充分体现自己的优点和内在气质就非常有吸引力。有一个信息提供给大家,就是第一印象大部分都取决于外表,这听上去有点残酷,但事实就是这样。当然第一印象是不可靠的,非常不可靠。而且第一印象带有欺骗性,许多给人良好的第一印象的人,到了深入相处时会有“靠不住”的感觉。所以虽然我们注意精致地打扮自己,同时一定要提醒自己,第一印象不可靠。很多人相亲完全靠第一印象来判断对方,以至于最适合你的人可能因此擦肩而过。 关于相亲时的着装,女孩子选择干净、柔媚、不太时髦的、比较女性化又符合自己气质的服装,建议不穿金戴银,因为对方是来找老婆的,男人对妻子的理想要求基本上都是按照传统的标准来衡量的。但是又要在感官上让对方有触动,这本身有一点矛盾。没错,男人挑女人总是很矛盾的,男人永远都会被辣妹吸引,但是想要娶一个辣妹回家的男人是很少的。在初次见面中,女人一定既要唤起男人感官的触动,又要让他有动念头娶回家做老婆,需要女人从内到外“闷骚”一点。 男人相亲时也是要注重着装的,很多适合嫁的男人比较古板,对待相亲十分认真,就像出席重要会议一样隆重,喜欢西装革履,其实这是一个误区。让女人心动的男人是那种比较休闲潇洒的装束,商务休闲装,适度有一点校园风格的打扮,会非常讨女孩子喜欢。女人不管多大年龄,心里都有一个小女孩,揣着对爱情的浪漫幻想。还有一类着装也是比较讨女孩子喜欢的,就是深沉而沧桑的硬汉装束,比如深色的长风衣、质地比较正的深色毛衣等。 虽然不同的男人和女人有不同的品味,但是有几点是比较一致的,尤其在相亲中。女性避免过于奢华和暴露的服装,避免男性化。男性避免陈旧、土气和过于正式。 除了着装,还有随身物品比如提包、车,选择的约会地点等也属于个人形象表达的一个部分,无论男女,即使有车,最好的办法是第一次见面都不要开车去,尽量让两个人关注人本身,而不受财物的影响去判断个人的内在品格。 相亲第三步:初次见面 初次见面最好由男士提出,最佳的地点是咖啡厅,最好由男士付费。那么女士初次见面做什么呢?微笑、礼貌致谢、少说话。女孩子少说话是制胜的重要因素,关键是体态语言。温和、欣赏、又略带期待的眼神、配上温柔的笑容,可以让你很快征服对方。别忘了称赞对方,发自真心的称赞男士现场表现出的让你欣赏的地方,因为男人在面对女人时都是比较没有把握的,需要被赞美、被肯定。 初次见面相互都少问家庭隐私,这样避免像“查户口“。没错,大家都急于嫁娶,但是表现得太过于着急了,将对方的家世、收入、住处、经历都问个遍,下一次交往的机会也随着那么多的问题流走了。本来相亲就不是那么让人开心的,初次见面双方都要像一点办法让约会显得令人难忘一些。哪怕是今后再没有第二次,也要充分享受约会给两个人带来的浪漫和轻松。相互制造一点轻松和愉悦,即可以冲淡相亲见面的俗套氛围,又可能会促成更加意想不到的结局。要相信,关系是一步步互动的结果,没有谁是为你准备好了的好丈夫好妻子,打开心灵,给别人机会就是给自己机会,有缘分见面了,就要珍惜,哪怕只是这一面之缘,让彼此回眸时,可以祝福。 对了,第一印象是极不可靠的,具有欺骗性,不要相信第一印象,不要在心里评判你对面的这个人,一产生评价,我们就会失去真情实感。而很多相亲数十次都没有找到合适另一半的人,多半就是容易评价别人的人,自以为很聪明,很会看人的人,往往都看错了人,并且周围似乎都充满了“不行”的人。 第一次见面,不管双方多么“来电”,谈得多么投机,最好都要在晚上十点前告别,留着双方回味和沉淀的时间。 第四步:第二次约会 进入了第二次约会,双方可以选择的地点就比较多了,最简单的是一起吃饭,这通常也是最好的方式。不要太豪华、避免太嘈杂和低档的环境。在一些茶餐厅是比较理想的。简单吃完可以聊聊天,这次女士最好抢先付账。男人是非常欣赏女人在早期约会时付一些不太高的开销的。 第二次约会谈话就比较容易展开了,大家就像朋友一样,既保持适度的陌生感,又可以尝试一些朋友间那种亲近和自然。讨论各自的经历、兴趣爱好是比较合适的话题,步伐快一点的也可以开始向双方谈论一些自己的家庭、工作等。 第二次约会最重要的目标是双方培养亲密感,类似于朋友间的情感。依然要放慢脚步,不能太过于着急地谈婚论嫁。第一二次是不能发生关系的,即使亲近的身体接触,比如拉手、扶肩都不适合。如果双方是以结婚为目的的话,这样的克制是必要的。 第五步:第三、四、五次约会 这三次约会是两个人更深如了解的机会,双方都可以开始约上朋友,可以到更开放的环境,比如公园、郊外、电影院等地点。最重要的是花心思让约会开心和放松,充满趣味。因为相亲开始的恋爱需要创造情调来中和乏味。从约会中也可以相互观查了解对方待人接物的模式,互相适应和选择。并且将内心的选择结果确定下来并与对方商量。随着亲密感的增加,自然而然的身体接触是适合的,但这期间最要紧的是不要有性行为。 第六步:初试性行为 经过前一个阶段的约会,双方如果都确定了愿意真诚地相处,可以尝试性接触。当然最好是结婚后再有性行为,但是现在这样讲未免太不切实际。只要两个人的目的都是为了结婚,婚前的性生活也是很重要的相处方式。这个过程中双方可能仍然需要一些耐心。尤其对于年龄稍大的年轻男女,性可能对大部分人是一个问题,甚至是比较核心的问题。 为什么呢?长时间的单身生活不单会对男人,也会对女人性能力有影响,比如男人勃起障碍、提前射精、女性性反应不敏感等等。这时候双方一定要相互谅解,慢慢协调和适应,最好的方法就是爱和关心,彼此发自内心的爱能让身体恢复良好的反应。 还有一些情况相互需要说清楚,就是当两个人有了亲密接触之后,会开始询问和在乎对方的旧情缘,会有一种自然而然的反应就是对方是属于自己的了,相互的感情连接更深,同时也会暴露一些缺点,这个时候吵架是免不了的。谈恋爱的人都经历过这个过程,关系深入时会吵架,这是两个人个性与习惯、行为模式与价值观激烈冲突的时候,在寻找一个平衡点。其实是一件好事,既然避免不了吵架,那我们就来学习怎样高效率地吵架,并且在吵吵闹闹中加深了解、增进感情、相互成长。 恋人间高效率地吵架是很难把握的,最重要的原则是:不带评价,不指责,学会表达感受,只讲对方的语言和行为给自己内心带来的感受是什么?是双方的差异性带来争吵,不是对方不好,因为这个时候是最容易导致分手的,会开始很多负面的评价。恋人之间要相互支持、自我突破,挺过这段难熬的时光。 为什么会这样呢?其实越是优秀和能干的人,加上现在社会给我们带来的孤独感,每个人都不容易付出给对方,都是站在自己的立场上去考虑问题的,自己也能够应该生活工作中的很多困难和麻烦,“他人即地狱”,我们要和另一个生命有连接,就要放弃自己的一部分思想,当然是放弃那部分不好的思想,不是要完全改变自己去迎合对方。是要尝试着勇敢去付出,如果选择终身相伴的人我们都不愿意为之付出,去接受和包容与自己有差异的思想和行为。如果不愿意放下一些自我的话,婚姻这种生活方式就完全没有机会存活了。 第七步:见双方的家人 这是走向婚姻的重要步骤。见家人是为了双方社会关系更好地、更宽、更深地融合。得到家人的祝福。对于现代人来讲,见家人已经没有以前那么正式和隆重了,但是内在一些规则依然在悄悄发挥着作用。所以一些必要的原则需要心中有数。 初次见面,在谁家就看谁的眼色行事,另一方少发言、多微笑、勤做事。男方先陪女方见未来的老岳父和老岳母。关键是搞定老岳父,倾听未来老岳父“训话”,真诚回应就好。表现出能干、有主见、关心人家女儿的一面。 女孩子见公婆,打扮端庄淑女,不要表现得和男友关系太亲近,避免亲密的私语及当众使眼色,也不需要表现得太能干,给男友面子,适当可以听话一点。把时间留给男人和他的家人。 到这一步,基本上可以谈婚论嫁了,从相亲到结婚,是一个从一个人到两个人到两家人的过程,是一个从王子、公主降到平民百姓的过程,是一片浮云化为雨点滴落到大地的过程,告别天空的宽广和自在,投入大地的温厚与踏实。 …
2024年04月17日
26 阅读
0 评论
0 点赞
2024-03-21
npm安装webpack时遇到卡顿的情况
npm安装webpack时遇到卡顿的情况idealTree:webpackdemo: sill idealTree buildDeps解决办法:删除npmsrc 清除缓存 命令行找到其所在位置,删除此文件 npm config get userconfig清除缓存 npm cache clear --force有可能是之前的镜像源停止解析了,所有要更换最新的 npm config set registry https://registry.npmmirror.com查看当前镜像源确保更换成功npm config get registry重新安装npm i webpack webpack-cli --sav-dev
2024年03月21日
31 阅读
0 评论
0 点赞
2024-03-17
Python字典列表实现学生信息管理系统
# 需求:学生管理系统 实现 对学生的增删改查 students = [] def getIndexByStuId(stuId): for student in students: if stuId == student['stuId']: # 获取到这个字典对应的索引 return students.index(student) # 欢迎 def welcome(): msg = """ 欢迎使用<学生信息管理系统> 1.查询所有学生信息 2.添加 3.删除 4.修改 5.退出 """ return input(msg) # 查询 def show(): print("----------------正在[查询]--------------------") if students: print("学号\t\t\t名字\t\t\t年龄") for student in students: print(f"{student['stuId']}\t\t{student['name']}\t\t\t{student['age']}") else: print("暂无学生信息,请添加") # 添加 def add(): print("----------------正在[添加]--------------------") # 依次获取用户输入的数据 # 存到字典中 student = {} # 获取用户的学号后,要去查一查此学号是否存在 如果存在则提示用户重新输入 如果不存在 则正常添加 while True: stuId = input("请输入学号:") i = getIndexByStuId(stuId) if i == None: student['stuId'] = stuId student['name'] = input("请输入名字:") student['age'] = int(input("请输入年龄:")) # print(student) # 把字典添加到列表 students.append(student) break else: print("请重新输入新的学号") # 删除 def delete(): print("----------------正在[删除]--------------------") while True: # 接收学号 stuId = input('请输入想要删除的学生的学号') # 获取索引 i = getIndexByStuId(stuId) if i == None: print("学号不存在,请重新输入") else: students.pop(i) print("删除成功") break # for student in students: # if stuId == student['stuId']: # break # # 删除 # students.remove(student) # print(students) # 修改 def update(): print("----------------正在[修改]--------------------") while True: # 接收学号 user_input = input('请输入想要修改的学生的学号(如果想退出请输入"q")') if user_input == 'q': break i = getIndexByStuId(user_input) # None if i == None: print("学号不存在,请重新输入(如果想退出请输入'q')") else: # 根据列表的索引找到列表中的字典 while True: stuId = input(f"请输入新的学号({students[i]['stuId']})[回车表示不修改]") # 根据学号查询索引 index = getIndexByStuId(stuId) if i != index: print("学生id已存在") else: break name = input(f"请输入新的姓名({students[i]['name']})[回车表示不修改]") age = input(f"请输入新的年龄({students[i]['age']})[回车表示不修改]") # # 如果为true说明改了,如果为false说明没改 students[i]['stuId'] = stuId if stuId else students[i]['stuId'] students[i]['name'] = name if name else students[i]['name'] students[i]['age'] = age if age else students[i]['age'] break print(students) pass while True: # 欢迎 num = welcome() match num: case '1': show() case '2': add() case '3': # 查看列表中是否有数据,如果有才往下执行 if students: show() delete() show() else: print("暂无数据,请添加") case '4': # 查看列表中是否有数据,如果有才往下执行 if students: show() update() else: print("暂无数据,请添加") case '5': print("欢迎下次使用") break case _: print("输入有误,请重新输入")
2024年03月17日
31 阅读
0 评论
0 点赞
2024-03-17
PHP实现万年历
<style> * { margin: 0; padding: 0; } .box { display: flex; border: 1px solid red; flex-wrap: wrap; justify-content: center; } table { width: 20%; height: 300px; background: pink; margin: 5px; } td { text-align: center; } .tr1 { font-size: 20px; color: red; } .active { color: blue; } .h1 { text-align: center; font-weight: 100; color: blueviolet; } </style> <?php $year = 2025; // 获取当前的年月 $month = date('n'); $d = date('d'); $html="<h1 class='h1'>{$year}年万年历</h1>"; $html .= "<div class='box'>"; // 1.因为每一年都有12个月,所以要循环12次,每月都是1个table表格 for($m=1;$m<=12;$m++){ $html.= "<table>"; // 输出年月 $html.="<tr class='tr1'><th colspan='7'>{$year} 年 {$m} 月</th></tr>"; // 输出星期几 $html.="<tr><td>日</td><td>一</td><td>二</td><td>三</td> <td>四</td><td>五</td><td>六</td></tr>"; // 每个月开头输出对应的空td 获取指定的年月1号对应是星期几? $week = date("w",strtotime("$year-$m-1")); $html .="<tr>"; for($i=1;$i<=$week;$i++){ $html.= "<td></td>"; } // 根据年月获取对应的这个月的总天数 $days= date("t",strtotime("$year-$m")); for($j=1;$j<=$days;$j++,$i++){ // 如果是7的倍数就该换行了 // 必须是当前这个月的当前这个日 if( $month == $m and $j == $d ){ $html.="<td class='active'>{$j}</td>"; }else{ $html.="<td>{$j}</td>"; } if($i%7==0){ $html.= "</tr>"; } } $html.= "</table>"; } $html .="</div>"; echo $html;
2024年03月17日
22 阅读
0 评论
0 点赞
2024-02-18
使用XMLHttpRequest对象封装自己的axios函数
function myAxios(config){ return new Promise((resolve,reject)=>{ const xhr = new XMLHttpRequest() // 1.判断有params选项,携带查询参数 if(config.params){ // 2.使用URLSearchParams转换,并携带到url上 const paramsObj = new URLSearchParams(config.params) const queryString = paramsObj.toString() // 把查询参数字符串拼接在url?后面 config.url += `?${queryString}` } xhr.open(config.method||'GET',config.url) xhr.addEventListener('loadend',()=>{ if(xhr.status >=200 && xhr.status < 300){ resolve(JSON.parse(xhr.response)) }else{ reject(new Error(xhr.response)) } }) xhr.send() }) } myAxios({ url:'https://api-hmugo-web.itheima.net/api/public/v1/goods/detail', params:{ goods_id:1 } }).then(result=>{ console.log(result); })
2024年02月18日
27 阅读
0 评论
0 点赞
2024-01-19
MySQL外键约束(FOREIGN KEY)
1. 外键概述MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。如果不是特别理解什么是主表,什么是从表 请查看下面2建表中的内容主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。1.1 CASCADE 级联操作ON DELETE CASCADE 删除时级联 ,删除主表 从表对应记录随之删除ON UPDATE CASCADE 修改时级联 , 修改主表 从表对应记录随之修改1.2 RESTRICT 严格模式ON DELETE RESTRICT 删除时严格 ,删除主表 从表对应记录存在则主表不允许删除ON UPDATE RESTRICT 修改时严格 , 修改主表 从表有对应记录则主表不允许修改1.3 常规操作ON DELETE RESTRICT 删除时严格 ,删除主表 从表对应记录存在则主表不允许删除ON UPDATE CASCADE 修改时级联 , 修改主表 从表对应记录随之修改1.4 定义外键时,需要遵守下列规则:主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。必须为主表定义主键。主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。外键中列的数目必须和主表的主键中列的数目相同。外键中列的数据类型必须和主表主键中对应列的数据类型相同。2. 建表一张专业表,一张学生表,如下图所示专业表为主表(父表)学生表为从表(子表),学生表的mid为外键关联专业表的id从以上截图大家不难看出,想要实现外键约束必须要求这两张表的引擎为 innodb2.1 使用sql语句建表时设置表引擎为innodb create table major( id int primary key auto_increment, major_name varchar(20) )engine=innodb;2.2 使用navicat for mysql建表时候设置表引擎为innodb3. SQL添加外键3.1 在创建表时设置外键约束CREATE TABLE student( id INT(11) PRIMARY KEY AUTO_INCREMENT, name VARCHAR(25), mid INT(11), CONSTRAINT f1 FOREIGN KEY(mid) REFERENCES major(id) ON DELETE CASCADE ON UPDATE CASCADE )ENGINE=INNODB3.2 表创建成功后添加外键约束ALTER TABLE <数据表名> ADD CONSTRAINT <外键名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>); ALTER TABLE student ADD CONSTRAINT f1 FOREIGN KEY(mid) REFERENCES major (id) ON DELETE RESTRICT ON UPDATE CASCADE;4. Navicat for MySQL 添加外键5. 删除外键5.1 sql命令删除ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>; ALTER TABLE student DROP FOREIGN KEY f1;5.2 Navicat for MySQL 删除外键
2024年01月19日
106 阅读
2 评论
2 点赞
1
2
3
...
8