- 博客(72)
- 收藏
- 关注
原创 python做题小记(八)
自我感觉题目给的回文日期的定义有些抽象,这里直接给出题目解题的关键函数:其实这个解题代码是很简单的,但是长时间没敲,有点忘了。
2025-12-20 16:22:37
596
原创 练习python题目小记(七)
题目要求是编写一串代码,将输入的字符串中的字母改成它在字母表中的下一个解题的代码是:next_ch = chr(ord(ch) + 1)解释一下这串代码,ord是将括号中的东西转化成它相应的Unicode 码,然后加一,就是变成下一个,最后使用chr再将Unicode 码变成对应的字母。
2025-12-03 22:41:48
792
1
原创 python学习之路(十三)[闭包,装饰器,函数式编程,生成器]
说的直白一点,语法糖没有任何功能性的作用,它是用于让整个代码看上去更加美观和便于理解的。上述代码我i们使用语法糖之后就会变成这样:(虽然感觉并没有便于理解)
2025-12-03 21:52:03
683
原创 nginx学习笔记
正向代理的话,是客户端向目标服务器发起请求,并将响应返回给客户端。正向代理隐藏了客户端的真实身份,对目标服务器来说,它只知道代理服务器的存在,而不知道真正的客户端是谁。它的特点如下:反向代理就是站在服务器前面的中间人:客户端以为自己访问的是“真实服务器”,实际上只是一台代理服务器,它再把请求转发给背后真正的服务器(们),并把结果返回给客户端。他的核心作用是:简单来说,正向代理和反向代理都是用户和服务器不直接进行交互,而是通过中间的代理。只不过一个是将用户隐藏起来,一个是把服务器其隐藏起来。
2025-11-30 21:18:13
352
原创 Qwen3企业级微调实战[B站九天Hector]
我们看看AI给的形象皆是以帮助理解数据集是由大量结构化的数据组成的集合,专门用于分析和研究。提示词模板就是给定一个框架,我们只需要输入可变的内容,这个框架就可以生成AI能够完美理解的一个提示。这个可变内容可以是一个具体的问题,也可以是别的:这里AI给出了一个例子总结一下:提示词模板就是基于这些特殊字符构建的、可复用的“脚手架”或“填空题”。它确保了每次与模型交互时,指令和上下文都是以一种模型最熟悉、最易理解的方式呈现的。
2025-11-30 19:05:17
523
原创 python学习之路(十二)[函数]
使用def来定义一个函数,使用return来确定函数输出的东西,要注意的是如果函数中我们没有写return,那么在调用函数进行输出时,会输出None。
2025-11-27 11:12:02
353
原创 练习python题目小记(六)
第一行:dict_obj.keys()是提取字典中所有的键,然后使用sort将所有的键从小到大进行排列(数字的话,就比大小,字母的话,比较ASCII码),最终赋值给等号前面的玩意(是个列表)。第二行:dict_obj[k] for k in sorted_keys是利用列表推导式,将键所对应的值全部提取出来。第三行:将键和值排列好以后,以列表的形式输出。
2025-11-25 22:38:30
255
原创 讲解一下代码
<title>登录</title><style>body {margin: 0;no-repeath2 {button {</style>
2025-11-23 18:03:23
576
原创 python学习之路(十一)[集合]
首先我们可以直接使用花括号将他们括起来例子:s = {1,2,3,4,5,6}其次我们可以使用set函数例子:set ([1,2,3,4,5,6])
2025-11-22 13:50:15
281
原创 python学习之路(十)[字典和集合]
如果没有要查找的这个键,就会给要查找的这个键赋值为default,然后存在字典中,default的默认值是none,如果我们没有特殊进行赋值的话,就会把查不到的键赋值为none。d.pop("压力")如果字典中有这个键,那么会先返回这个键对应的值,然后将这个键和他对应的值给删了,如果没有的话,python会直接红温(报错)。我们可以拿这个字典和不同的字典进行类比。我么可以使用get方法,来查找字典中是否有某个键,这个方法也是可以输入参数default的,会在字典中没有相应的键时返回default的值。
2025-11-19 20:30:03
317
原创 python学习之路(九)
像我们之前学过的列表,元组,字符串都属于是序列的范畴。三者的相似之处:都可以通过索引得到每一个元素,默认索引值总是从零开始的,可以通过切片的方法得到一个范围内的元素的集合,有很多共同的操作符。
2025-11-18 20:58:35
511
原创 anaconda的使用
conda activate py39,在成功激活后,最前面的那个括号里会显示虚拟环境的名字。安装依赖的核心流程:首先需要激活目标环境,然后搜索包查看版本,然后安装,安装完后检查。以创建一个3.9版本的python为例,-n后面是虚拟环境的名字。conda remove -n 名字 --all。在删除虚拟环境之前,记得先退出要删除的虚拟环境。六,如何在虚拟环境中安装依赖包。三,查找已经存在的虚拟环境。四,退出当前的虚拟环境。五,删除当前的虚拟环境。一,创建一个虚拟环境。
2025-11-17 12:05:41
193
原创 linux(一)
rm适用于删除文件和文件夹的,语法:rm [-r] [-f] 路径1 路径2 .... 路径n,-r是在删除文件夹的时候需要加上的,-f是我们处于root用户(超级管理员用户)时可以使用的强制删除,后面的路径是可以有无限多个的。mv适用于文件和文件夹的移动的。-r是我们复制文件夹的时候需要加上的,然后路径1是我们要复制的文件的路径,路径2是我们要把文件和文件夹复制到的地方。ls命令,这个命令的作用是列出目录下的内容,它的语法细节是这样的:ls [-a -l -h] [Linux路径]
2025-11-16 16:06:54
722
原创 练习python题目小记(五)
这里我们使用到了bin方法,它会将数据转化成二进制的形式,并在前面加上0b的前缀,我们可以使用字符串切片的方法是他输出的结果不含前缀(bin(6)[2:] 的输出结果就是:110)。set表示的是集合,集合具有自动去重的特点,set(word)就是将word中的重复字符给除去,如果除去重复字符后的字符串的长度和原来的相同,那么它就是一个同源词。/是真除法返回的是float类型的数据,//是整数除法,返回的是int类型的数据。解题代码:return len(word) == len(set(word))
2025-11-15 18:59:08
402
原创 python 学习之路(八)
将前面旧的字符串中的元素(old)替换成新的元素(new)并且可以通过设置count来看控制替换的次数,在没有说明count的情况下,python会替换所有的old。lower和casefold的区别是什么:在英语中两者是一样的,但是在其他语言中lower是无法使用的,但是casefold可以。1.center:这个的作用是将原字符串放在中间,然后有指定的字符填充原字符串左右两边的地方,如果无法均分的话,则在右边加一个。2.find:从左向右找某个元素,并且返回该元素最左边的东西的下标,找不到是返回-1。
2025-11-13 18:20:02
296
原创 python学习之路(七)
2.使用切片遍历元组中的部分元素:a[0]:查找元组A中的第一个元素,a[-1]:查找元组的最后一个元素,a[:2]:第一个元素到第三个元素(不含第三个元素),a[2:]:表示从第三个元素到最后一个元素,我们也可以增加跨度:当a=(1 , 2 , 3 , 4 , 5 ,6),a[ : :2]就是(1,3,5)在元组中,我们也可以使用+来完成两个或者多个元组的拼接:s = (1,2,3) t = (4,5,6) s+t = (1,2,3,4,5,6)。我们发现直接使用等号,是不行的。
2025-11-12 22:31:04
318
原创 从零开始的web开发(一)
src表示的是图片的来源(存在哪个文件夹中),alt表示的是如果没有图片,那么在图片的位置填写什么文本,width是对图片宽度的定义,height是对图片高度的定义。是指超链接,其中有两个参数,一个是href,表示的是目标地址,一个是target,定义的是网页的打开方式(_blank表示的是新建标签页,_self表示的是在当前页打开)第一句话:<meta charset="utf-8">,是告诉浏览器这是用utf-8编码的,防止出现中文乱码,放在html的第一行,由此可以防止黑客做utf-7的攻击。
2025-11-10 22:19:51
325
原创 大语言模型学习之路(一)
我们举一个不是很精确的例子:我们给AI一张图片,并告诉它这是一张猫的图片,让AI通过分析图片的各种参数,从而使其达到可以识别图片是不是一只猫的效果。(这里的参数并不是常规意义上理解的参数,它是一种模型内部的参数,比如神经网络的权重啥的。其中的生成指的是AI通过对大量数据的内在规律进行学习,从而自主创造出一个与训练内容类似的但是从未存在过的内容的内容。也可以理解为AI通过调整内部函数,生成一个可以将像素模式映射到类别标签的抽象数学函数,训练完成后,就可以通过这个新的函数对用户输入的图片进行预测。
2025-11-09 19:01:23
369
原创 python学习之路(六)
我们图省事,用了一个自认为简单的算法来输出一个二位的数组,但是在改变其中某项的数值时,遇到了上述问题。通过上面的学习我们发现,列表推导式其中的for循环是可以嵌套很多的,所以在平时编写时,我们要注意嵌套的多少从而降低代码的维护成本以及运行成本。这里我们需要注意到一个细节,就是在传统代码中在外层的for循环,在列表推导式中是靠前的,而在内层的for循环是靠后的。tips:如果变量是无关紧要的,或者是一个临时的变量,那么他的变量名是可以用下划线代替的。在列表推导式中,作用的元素可以不止一个。
2025-11-05 20:32:04
312
原创 练习python题目小记(四)
我们来看主要的代码:while b:意思就是只要B不是0,就执行循环内的代码。a,b = b,a%b这是一个并行赋值的式子,其实就等价于temp = a % b a = b b = temp。return abs(a)这里的abs时取绝对值的意思,这个东西其实就是去掉负号,对复数来讲,会对其求模。辗转相除法又称欧几里得算法,A和B的最小公因数等于B和 A除B 的余的最小公因数。其实说白了,就是辗转相除法的运用。但是许久没敲代码有些生疏了,在这里记录一下。
2025-10-21 18:00:47
216
原创 练习python题目小记(三)
我们来看一下这道题(其中出现了一些我还没有学到的东西,但是今天不想听课,所以就边做题边学习吧),原本看到这道题是想用FOR循环来尝试一下的,但是感觉既然是python应该会有更加方便的解法,所以去搜了一下AI(搜AI也是状况百出,搜的时候发现python是不会自动忽略掉空格的,他会把空格当成一个普通的字符来记录,所以我们需要通过命令将他除去).split():他其实是这么个东西:字符串.split(sep=None, maxsplit=-1),括号中有两个参数,一个是分隔符,一个是分割的次数。
2025-10-20 21:25:02
260
原创 python学习之路(五)
字符串是不变的,所以python只会为其开辟一个空间,而列表是会变化的,python不清楚用户什么时候会对列表的元素进行增删改查的操作,所以python会给x和y分配不同的空间,所以他们的地址是不同的。那么,就会有一个问题,我们既然可以通过[0]*3来生成一个元素全部为0的数组,那我们是不是也可以用同样的方法生成一个二维数组,实际操作一下发现确实是可以的,但是实际上是不行的,这是一个不易被察觉的错误,为了说明这错误,我们引入一下is运算符。去拍个短片,下一篇博客记录一下列表推导式,下篇见!
2025-10-19 15:39:06
437
原创 python学习之路(四)
我们可以通过count来查找某个元素在列表中的个数,我们也可以通过index来查找某个元素的索引,从而可以对这个元素进行增删改的操作。如果我们需要在列表中增添东西,可以用到append,但是他只能在列表的末尾,增添一个元素。列表的改,可以使用=对某个元素进行直接的替换,也可以使用切片对某个区域的元素进行整个的改动。图中的前几行代码,是对列表的乘和加的操作,下面是列表的嵌套。添加多个元素可以用到extend这个方法,但是他也有局限性!列表内容尚未结束,同志们仍需努力啊!列表内容尚未结束,同志们仍需努力啊!
2025-10-18 21:02:25
454
原创 练习python题目小记(二)
len()是求字符串长度的玩意,len(str1) == len(str2)判断俩个字符串的长度是否相等,如果相等则返回true,否则返回false。因为python中是可以返回布尔值的,我们就可以用上述代码直接判断两个字符串的长度是否相等。input_str[0]表示的是字符串input_str的第一个字符,input_str[-1]表示的是字符串input_str[-1]的最后一个字符。
2025-10-17 14:20:55
200
原创 python学习之路(三)
尤其说明一下第三种用法,for i in range(a,b,c),其中C如果是负数,那么就会往A的左侧以C的跨度去寻找整数,在A小于B,并且C是负数的情况下,如果我们打印I,那个输出的结果将是空白。比如说上述代码,break只会跳出第二个while 循环,执行该代码"今天,我一定要坚持学习八个小时!这是一串找2~9中的素数的代码,我们看第二行,最开始n是等于2的,而stop的值也是2,所以不会返回任何东西,因此结果是输出"2是一个素数"。今天就到此为止吧,bro要燃尽了,明天见!
2025-10-16 19:10:57
542
原创 练习python题目小记
学习python这种编程语言,当然是需要实践的,当然刚开始学,练习的题目比较基础,所以记录的一些东西也比较基础,大佬勿喷。这里推荐一个练习python的网站,名字是python.tip。关于这串代码一些具体的东西感觉以后会学到,这里就先不进行更加详细的研究。return my_list[-1]这个是我没有见到过的,含义就是获取列表的最后一位。这串代码的含义是将用户输入的转化为int 型,并赋值给input_minutes。计算最大值和最小值的差值的地方,忘记了这种写法,这里记录一下防止下次再忘。
2025-10-15 22:05:48
323
原创 python学习之路(二)
(举个栗子:3and4,and是两边同为真,才返回真,3时true,那么python会计算4的值,所以返回的是4:如果是 3 or 4,由于or是只要有一个是真,那么返回的就是真,所以直接就返回3了。abs函数适用于求数字的绝对值的,如果我们输入一个复数,那么我们得到的结果就是这个复数的模(根号下实部的平方加上虚部的平方)。在布尔函数中,会返回false的东西:none和false,值为0的数字类型,以及空的序列和集合。今天的学习之旅到此结束,要去猛攻高数了,明天见!其中,优先级的数字越大其优先级越高。
2025-10-15 20:37:51
319
原创 python学习之路(一)
而函数random.getstate可以理解为用于“记录”的,使用该函数时,会记录下当前生成的随机数,再次调用可以是随机生成的整数和该函数记录的整数是一样的。我们看上面的代码,counts = counts - 1的缩进形式是和print("大啦~")是一样的,所以这条代码只有在guess大于8的时候才会被执行,而显然这不是这串代码所要达到的效果,所以在编写python代码时我们要尤其注意缩进形式。在字符串结尾的\,表示的是续行符,表示这一行还没结束,可以将物理意义上的两行转化为逻辑上的一行。
2025-10-14 21:18:41
580
原创 逆向代码(六) & buuctf 刮开有奖
这个的用途就是:假设有顾客订了一间房子,WM_INITDIALOG负责的最开始对房间的布置,而WM_COMMAND则是用于表示顾客使用了哪些家具(WM_COMMAND 是 Windows 用来通知“用户点了某个菜单项或控件”的消息。其中,v7[0]其实就是3,其ASCII码为51,加上34后,表示的字母是U,这也就是flag的第一个字母。其中a1是数组的首地址,a2是排序区间的左边界,a3为排序区的右边界。先取其中间值作为基准,然后将小于等于的放在基准的左边,大于的放在右边,result为基准的最终位置。
2025-09-13 20:36:55
257
原创 逆向代码(五) & buuctf luck_guy
函数原型:void *memset(void *ptr, int value, size_t num)ptr是一个指向内存块的指针,value是要赋予的值,num要赋予的字节数。# 手动转换一下,因为本身是小端序储存,转到python顺序需要更改。函数就是用于将ptr指向的内存块中的num个字节设置为value。
2025-09-09 20:52:53
203
原创 逆向代码(四)& buuctf SimpleRev
(比如说ABCDEF,如果是小端序的话,实际存储时就是正常的ABCDEF,如果是大端序,那么存储时就是FEDCBA)与putchar函数是类似的,它用于从标准输入流(即键盘中读取一个字符,是一种比较低级的读取输入的函数)putchar 是 C 语言标准库中的一个函数,用于向标准输出(通常是终端或控制台)写入一个字符。函数原型为:char *strcpy(char *dest, const char *src);函数原型为:char *strcat(char *dest, const char *src);
2025-09-09 17:49:48
416
原创 逆向代码三&buuctf -- reverse3
也就是说,我们输入了flag(即str),先对其进行了一部操作,然后把操作后的值赋给了v4,再将v4赋值给des,对des操作后将其与str2作比较,如果相等就输出正确。第二行明显是一个输入的函数,输入的是str,并将它的长度赋值给了v3,第四行是一个函数,下面在解释,我们先往后看。把v4的前四十位复制给了destination,然后将destination的长度赋值给了v11。搜到了标准的base64编码的代码,比较后发现第四行是用于进行base64编码的。由此,我们就得到了整串代码的大致含义。
2025-09-08 19:43:46
168
原创 逆向代码(二)&buuctf xor
`c` | 要设置的值(以 `int` 形式传入,但实际会被转换为 `unsigned char`)。| `s` | 指向要填充的内存块的指针。| `< 0` | `s1` 的前 n 个字符 **小于** `s2` 的前 n 个字符。| `== 0` | `s1` 的前 n 个字符 **等于** `s2` 的前 n 个字符。| `> 0` | `s1` 的前 n 个字符 **大于** `s2` 的前 n 个字符。是 C/C++ 标准库中非常常用的一个函数,用于将某一块内存中的内容设置为指定的值。
2025-09-07 15:35:20
310
原创 simple-check-100
后面的是一个类似于加密的东西(没太看懂,呜呜呜~)(查了一下AI ,意思就是:倒序取 4 字节,逐字节与密钥异或,逐字节输出明文。按F5后先点进main函数中,感觉跟secret-galaxy-300这道题的main函数差不多,暂时先不管他。第一行的就是定义了一个指向没有符号的整数的指针和一个指向字符的指针(只能读,不能修改,常用于字符串常量。v3+=那一行没看懂,搜了一下AI ,这一行的意思就是V3是一个数组前五项的和。(还剩一下东西,明天再研究,哥们要燃尽了)先点开check_key这个函数看一眼。
2025-09-04 21:45:17
861
原创 攻防世界secret-galaxy-300
这里发现等号后面的地址跟前几个星球名字的地址是一致的,也就是说题目从前几个星球的名字中提取出字母并进行组合得到了flag,提取的字母以及组合方式已给出,编写出脚本运行即可。对照前面的输出结果,这里出现了一个新的名字adarksecretgala,并且这个名字和题目有一定关联。我们放在这里,回去分析一下函数,先点开main发现了一些奇奇怪怪的东西(没看懂)。下载题目后,我们会得到三个文件,本质上没有区别,将exe文件拖入ida中。他的下一个函数中有print的字样,猜测这个函数是输入用的。
2025-09-03 16:28:59
338
原创 C语言指针
指针的类型:尤其需要注意的是一下三个问题,这是关键指针变量本身的地址是什么?指针指向的数据类型是什么?指针指向的内容是什么?这既是指针的三要素也是我们遇到指针时需要问自己的三个重要的问题。声明阅读法(螺旋法则 / 右左法则)口诀:从标识符开始,先右后左,遇到( )或[ ]读完再掉头。pp[5]→ 数组有 5 个元素*p[5]→ 元素是指针→ 这些指针是函数指针,形参为char→ 函数返回int *未完待续..........
2025-08-29 18:05:17
226
原创 Malloc函数
sizeof(int) 返回一个 int 在当前平台占用的字节数(32 位系统通常是 4 字节,64 位系统一般也是 4 字节)。函数原型:void*malloc(size_t_Size);* 10 表示“要 10 个这样的字节块”,即总字节数 = 4 × 10 = 40 字节。malloc(sizeof(int)*10)(相当于int a[10])该函数的作用就是申请一段空间,然后返回这段空间的首地址。
2025-08-29 12:44:45
341
原创 简单说说RC4
首先,先进行初始化S表(先对S表进行线性填充,一般为256个字,然后用种子密钥填充另一个表K表(若种子密钥的长度不够256,则重复填充),然后对S表和K表进行初始置换)属于一种对称密码(明文与密文使用同一个密钥),也是一种流密码(诸字节进行加密)然后,进行密钥流的生成(为每一个没有加密的字节生成一个伪随机数,用于异或)以一个足够大的S表为基础,对其进行非线性变换,从而得到一个密钥流。最后,将明文与密钥流进行异或即可。
2025-08-26 17:54:43
167
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅