快乐学Python,Python基础之代码复用?

上一篇文章中,我们了解了代码的分支结构(if 家族语句)和循环结构(for 循环和 while 循环)。通过了解这些结构,我们已经能够写出稍微复杂一些的代码。但当代码一多,就会遇到一些问题。

上一篇文章中有个案例:根据考试分数打印安全意识分级(优秀、及格和不及格)的代码,如下所示:

a = 75

if a > 80:

    print("优秀")

elif a > 60:

    print("及格")

else:

    print("不及格")

如果我们现在需要一次性看三位同学的分级结果,比如 a 75 分,b 90 分,c 66 分,然后打印出每个人的分级信息。根据我们之前的知识,很自然就想到,针对每个变量都执行一次上面的 if-elif-else 语句即可,完整的代码是这样的:

a = 75

b = 90

c = 66

if a > 80:

    print("优秀")

elif a > 60:

    print("及格")

else:

    print("不及格")

if b > 80:

    print("优秀")

elif b > 60:

    print("及格")

else:

    print("不及格")

if c > 80:

    print("优秀")

elif c > 60:

    print("及格")

else:

    print("不及格")

最终输出是及格、优秀、及格,分别代表 a、b、c 三位同学的分级结果。

及格

优秀

及格

结果是计算出来了,但回过头去看会发现明明看着很像,却愣是重复写了三次。有没有更好的方式来避免重复写多次结构类似的代码呢?而且这个例子,重复的部分还只有 6 行,要是一个计算过程有 50 行,然后要针对一个班级 50 个同学都执行一次,难道我们需要写 50 x 50 = 2500 行代码吗?

答案是肯定的,在 Python 中相似结构的代码复用通过函数来实现。了解了函数,我们才能真正意义上编写复杂的代码。

1、什么是函数

看到函数,可能你首先会条件反射地想到数学中的“函数”,但 Python 中的函数和数学中的不是一回事,不需要联合起来理解。

Python 中的函数简单来说就是一段有名字的代码块。通过函数的机制,我们可以给我们希望重复使用的代码块起个名字,这样我们之后要用这个代码块的时候,就不需要重新写一遍一模一样的代码块,而只需要简单写一次之前给代码块起的名字即可。普通函数的形式如下所示:

def 函数名():

    代码块

其中的关键要素是:

  • def, Python 的关键字,代表我们接下来要创建一个函数;
  • 函数名,顾名思义,函数的名字,名字需要符合变量起名的定义;
  • 冒号,大家应该很熟悉了,这代表冒号后面的代码块的名字是冒号前面的【函数名】;
  • 代码块,也就是我们想起名字来指代的代码块,这种函数对应的代码块,我们也叫函数体。注意这里的代码块和 if 语句的代码块一样,需要缩进。按照 Python 的规则,在冒号后面的代码块都需要相对于冒号所在的行缩进。

当我们创建完函数之后,要实际执行函数中的代码块,还需要执行该函数。函数执行的形式比较简单:函数名之后加一个括号即可。形式如下:

函数名()

(1)小实战:打印字符三角形

现在我们用一个简单的例子来感受函数的用处。假设我们需要使用字符 A 打印一个简单的三角形。

print("  A")

print(" AAA")

print("AAAAA")

输出:

  A

 AAA

AAAAA

现在我们想打印三个,虽然我们可以用类似本文开头的方式,把上面的代码复制出三份。但现在我们用函数的方式来解决。新建 Cell ,输入如下代码:

def print_triangle():

    print("  A")

    print(" AAA")

    print("AAAAA")

执行上述代码,发现并没有任何内容输出。原因就是目前我们只是创建了函数(给代码块起了名字),但还没有实际执行它。

现在我们来执行一下,新建 Cell,输入以下代码:

print_triangle()

执行代码,输出结果就可以看到我们的代码块被成功执行了。

  A

 AAA

AAAAA

说到这里,相信你已经知道怎么用更方便的方式打印三个三角形了,答案就是执行三次 print_triangle 函数。

print_triangle()

print_triangle()

print_triangle()

输出是这样的:

  A

 AAA

AAAAA

  A

 AAA

AAAAA

  A

 AAA

AAAAA

通过上述例子可以看到,我们可以通过函数的形式给代码块起一个名字,之后只需要在代码中执行这个函数就可以起到和执行代码块一样的效果。这样的实现方式可以减少整体的代码量,也能够让代码整体更加清晰。

2、函数的参数

(1)有“变化”的变量

现在我们回过头去看开篇遇到的给三个同学的分数分级的问题。我们之前通过三个 if-elif-else 语句来实现,现在尝试使用函数来优化这个代码。初步形式如下所示:

def print_level():

    if a > 80:

        print("优秀")

    elif a > 60:

        print("及格")

    else:

        print("不及格")

细心的你很快就发现了问题……这个函数每次都只检查了 a 同事的分数,但我们的任务是要分别检查 a、b、c 三个同事的分数,怎么办?

换句话说,我们希望打印 a 同学分级时,这段代码的 if 语句 判断的是 a,打印 b 同学的分级时,这段代码的 if 语句判断的是 b。简单来说, if 语句判断的这个变量,不能在代码块中把他写死,而是应该在执行函数的时候传进来。

在 Python 中,我们可以使用函数的参数来解决这个问题。我们可以把需要执行阶段传入的变量写在函数名后面的括号中,需要几个写几个。这样的变量就被称为参数。形式如下:

def 函数名(参数1, 参数2, ...):

    代码块

老规矩,我们举一个非常简单的例子加深理解。假设我们编写一个函数:打印某个数 +3 的结果。这里的“某个数”,我们用参数传入。

函数定义

def print_out(a):

    print(a + 3)

print_out(3)

输出

6

我们来剖析这里面发生了什么:

  • 当函数执行到 print_out(3),发现这里是执行了一个函数,并且要把 3 传给这个函数;
  • 下一步,找到 print_out 函数的定义(第一行),把数字 3 赋值给参数列表的 a;
  • 下一步,执行函数里的代码块,也就是 print(a + 3), 此时 a 已经等于外部传入的 3,所以输出 6。

(2)使用函数参数改造分级函数

我们还是通过例子来理解,我们希望 print_level 函数能够根据需要处理不同的分数,比如第一次执行,处理的是 a 同学的分数,第二次是 b 同学。那么我们可以把对应代码块中的变量变成参数,假设取名为 score。

新的函数代码如下:

 def print_level(score):

    if score > 80:

        print("优秀")

    elif score > 60:

        print("及格")

    else:

        print("不及格")

与之前实现的主要区别就是,我们不再直接判断某个同学的分数(比如之前的变量 a)。而是在函数名的括号中声明了一个参数 score,之后在函数体中就直接针对 score 进行判断。

然后执行上述代码,确保函数创建成功。

接下来就到了函数执行的环节,我们希望可以用该函数分别处理三个同学的分数,那是不是就是执行三次函数,然后每次的参数就写对应 a、b、c 同事的分数就可以了呢?你可以先思考一下,然后再看实现的代码。

a = 75

b = 90

c = 66

print_level(a)

print_level(b)

print_level(c)

输出可以看到,执行的结果和我们写三个很长的 if-elif-else 语句是一样的。

及格

优秀

及格

上例中的 score,我们称之为形式参数,也叫形参。形式参数顾名思义,是声明了一个变量,给函数体中写逻辑用的,上例中我们的逻辑就是通过对形式参数 score 进行判断写的。

上例中的 a、b、c,我们称之为实际参数,也叫实参。实际参数就是指函数实际执行的时候,函数的形式参数的值。比如当执行 print_level(a) 时,这个时候执行到函数里面,形式参数 score 的值就等于 a ,也就是 75。

(3)小实战:打印学生信息

我们再通过一个例子加深印象。假设我们需要编写一个函数,实现打印学生的基本信息。格式如下:

姓名:小明

年龄:12

班级:九年一班

通过分析可以发现,打印前缀的提示,比如“姓名”“年龄”这些是不变的,而具体每个学生的姓名、年龄以及班级信息都是会随着学生而变化的。那显而易见,这里我们需要三个参数。

def print_info(name, age, title):

    print("姓名:" + name)

    print("年龄:" + str(age))

    print("班级:" + title)

上述代码有几个注意的点。

  • 参数的类型,name、title 是字符串类型,age 是整数类型,还记得我们在变量与数据类型一章学过,不同类型的变量做运算的时候需要先进行类型转换。这里也一样,整数和字符串不能直接拼接,需要先将整数通过 str 函数转换为字符串。
  • 我们不能直接让字符串和整型相加,所以我们通过 str 函数来将整型 age 转换为字符串再相加

执行上述代码,并新建 cell,添加下面的代码测试一下。

print_info("小明",11, "九年一班")

print_info("小红",12, "九年二班”)

输出如下:

姓名:小明

年龄:11

编制:九年一班

姓名:小红

年龄:12

编制:九年二班

可以看到我们通过两次调用 print_info 函数,并传入不同的信息,实现了打印不同学生信息的功能。 总结一下,当函数的代码需要处理每次执行都可能会变化的变量时,可以将这些变量声明为形参,放在函数名后面的括号里。然后在函数实际执行的时候,根据我们希望函数处理的变量以实参的形式传递给函数。

3、函数的返回值

通过函数的参数机制,本质上我们实现了可以向函数发送信息的本事(函数参数其实就是在函数在执行的时候,外部代码发送给函数内部代码的值)。另一方面,函数内部是否可以向外部代码发送信息呢?

从一个具体的例子来说,刚才我们打印了 a、b、c 三个同事的分级结果。现在需要编写函数,统计三个 t 同学的考试分数的平均值。

问题分析:计算三个同学分数的平均值,本质上就是计算三个数字的平均值。那代表这个函数需要接受 3 个参数(因为可能换另外三个人,那三个成绩就都不一样了,所以在这里会有变化的变量有 3 个)。

另外,因为是求三个数字的平均值,我们就起个函数名叫:three_average。基于此,我们可以编写如下的函数:

def three_average(score1, score2, score3):

    result = (score1 + score2 + score3) / 3

代码也比较容易理解,我们声明了三个参数:score1、score2、score3 。然后在函数中我们计算了他们的均值并存储在变量 result 中。

老规矩,执行上面的 cell,并新建 Cell 输入以下的测试代码。

three_average(a, b, c)

print(result)

我们执行了 three_avarage 函数,并将 a、b、c 三名同事的成绩作为实参传递给它,之后我们尝试打印出 result 变量的值。

运行代码,报了如下的错误:

---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-36-e489956d03fc> in <module>

      1 three_average(a, b, c)

----> 2 print(result)

NameError: name 'result' is not defined

错误提示说的是:变量名 result 未定义。

回过头去看 three_average 函数,我们的 result 变量是在函数内部被赋值的。所以在函数外面是用不了了。这里涉及一个新的知识点:在 Python 中,函数内部创建、赋值的变量,仅在函数内部有效。

那现在问题来了,我们计算的 result 如何告诉给调用 three_average 的代码?这个问题如下所示

three_average(a, b, c)

print(???)  <---------这里该 print 什么?怎么拿到函数内部计算的均值?

(1)return 语句

Python 中,通过 return 关键字来实现将函数内部的值返回给调用函数的代码。形式如下:

def 函数名(参数1, 参数2, ...):

    代码块

    return 返回值

新增了以下要素。

  • return,是一个 Python 的关键字,代表将后面的值作为该函数的返回值返回给调用方。另外,return 语句一般写在最后,因为 return 除了返回值之外,还会终止当前函数的执行。类似 for 循环中的 block。简单来说,在函数体中所有在执行 return 之后的语句都不会被执行。
  • 返回值,在 return 语句后面,代表函数需要返回给外部的值,返回值可以是变量,比如上面例子的 result,也可以是一个常量,比如数字 3、字符串 “Hello” 等。

函数内部通过 return 语句返回了内容,执行函数的时候怎么拿到呢?我们可以在执行函数的时候,将执行函数的代码放在等号的左边,右边是一个变量,这样就实现了把函数的结果,赋值给了一个变量。

形式像这样:

变量 = 函数名(参数1, 参数2,...)

现在,我们使用 return 语句来解决我们在本章开头的问题,重写 three_average 函数。

def three_average(score1, score2, score3):

    result = (score1 + score2 + score3) / 3

    return result

final_score = three_average(a, b, c)

print(final_score)

新版本主要有以下改动点:

  • 通过 return 语句,把 result 变量返回给外部;
  • 外部调用的时候,我们把函数返回的结果赋值给变量 final_score;
  • 打印出 final_score 的值。

输出结果为 77。

77.0

大功告成,我们的 three_average 函数在得到 return 语句的加持之后,才能变成真正意义上好用的函数。

(2)小实战:编写获取学生分级的函数

在思考一个函数该如何实现的时候,我们可以遵循以下的三段论。

  • 明确需求:就是函数具体要做一个什么事情,这就要求我们理解任务/需求的描述。
  • 明确输入:就是想清楚函数有哪些参数,扩展来说就是函数要完成上面的任务,哪些变量是需要从外部传入的。
  • 明确输出:就是函数需不需要返回值,以及返回值是什么,这同样取决于第一步,需求是什么。比如我们只是想让函数内部打印一些内容,那一般不需要返回值。而如果我们希望函数能够做一些计算,并将结果告诉调用方时,则需要返回值。

现在我们用三段论来思考一下这个实战。

  • 明确需求:把学生的分数转换为分级,并将分级返回给外部,不用打印。
  • 明确输入:学生的分数。
  • 明确输出:分级的结果。

根据上面的分析,以及 return 语句的配合,很容易想出我们只需要将最开始的 print_level 的实现中,打印的代码换成 return 语句即可实现将分级结果返回给外部。另外,由于我们并不会打印分级信息而是返回,所以我们新的函数取名为 get_level。实现如下:

def get_level(score):

    if score > 80:

        return "优秀"

    elif score > 60:

        return "及格"

    else:

        return "不及格"

接下来编写代码来调用 get_level,测试一下功能是否正常

a = get_level(50)

b = get_level(65)

c = get_level(90)

print(a,b,c)

输出

不及格 及格 优秀

说明我们 get_level 函数被成功执行,并返回了分级的结果,分别存储在了 a,b,c 三个变量上。

4、Python 的库函数

关于 Python 函数的关键特性在上面已经基本介绍完毕了。Python 代码中,我们一般主要打交道的函数有两种类型:

  • 库函数,已经由 Python 的维护人员创建好的,我们可以直接使用的函数;
  • 用户自定义函数,由我们自己创建的函数。

很明显,我们在这一课中定义的 print_level、print_info 以及 three_average,list_average 函数都属于用户自定义函数。而我们一直以来使用的:

  • 打印信息倒屏幕的 print 语句;
  • 计算字符串和列表长度的 len 语句。

本质都是 Python 的库函数。

现在我们就用函数的视角,来分析一下 len 和 print 的功能

  • len 函数:接收一个参数,类型是列表或者字符串,返回值为列表和字符串的长度。
  • print 函数:接收一个或多个字符串,把他们打印在屏幕上,没有返回值。

Python 的库函数非常多,感兴趣的可以到 Python 的官方文档库浏览学习。

如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓

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

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

相关文章

文件上传靶场实战:upload-labs第1-3关

0、环境准备 0.1、安装靶场 由于自己的电脑是win10系统&#xff0c;上传一句话木马被系统自动拦截删除&#xff0c;文件上传的靶场安装在win7虚拟机。把upload-labs安装包复制到老版小皮的C:\phpstudy\PHPTutorial\WWW\目录下解压&#xff0c;然后启用小皮&#xff0c;启用服…

连接两个路由器的有线连法,关键时候可能会发挥不小的作用

路由器网桥连接两个或多个路由器&#xff0c;以扩展网络范围&#xff0c;提供额外的以太网端口和无线接入点。但在开始之前&#xff0c;你必须首先决定如何使用每个路由器。因此&#xff0c;你需要知道你想要实现什么&#xff0c;并清楚地了解你对每台设备的期望。 例如你想扩…

前端入门教程:学完即可单独完成前端项目

目录 目录 1.HTML: 1.1概念 1.2结构 1.3常见的标签使用分类&#xff1a; 2.CSS: 2.1概念 2.2样式实践&#xff1a; 以下的举例都来自于博客&#xff1a; 2.3css选择器&#xff1a; 什么是css选择器&#xff1a; 举例如下&#xff1a; 2.4Demo 3.JavaScript&#…

Go语言为什么建议少用数组,多使用切片?

01 介绍 在 Go 语言中&#xff0c;数组固定长度&#xff0c;切片可变长度&#xff1b;数组和切片都是值传递&#xff0c;因为切片传递的是指针&#xff0c;所以切片也被称为“引用传递”。 读者朋友们在使用 Go 语言开发项目时&#xff0c;或者在阅读 Go 开源项目源码时&…

代码随想录算法训练营第二十二天| 回溯 93.复原IP地址 78.子集 90.子集II

93. 复原 IP 地址 递归参数&#xff1a;index一定是需要的&#xff0c;记录下一层递归分割的起始位置。还需要一个变量pointNum&#xff0c;记录添加逗点的数量。 递归终止条件&#xff1a;明确要求只会分成4段&#xff0c;所以不能用切割线切到最后作为终止条件&#xff0c;…

Speech | 人工智能中语音质量评估方法详解及代码

本文主要讲解人工智能中语音合成&#xff0c;语音转换&#xff0c;语音克隆等生成语音的一些质量评估方法~ 目录 1.语音质量评测方法 主观评价方法 1.1.MOS 1.2.CMOS 1.3.ABX Test 1.4.MUSHRA&#xff08;MUltiple Stimuli with Hidden Reference and Anchor&#xff0…

Python爬虫-爬取豆瓣Top250电影信息

&#x1f388; 博主&#xff1a;一只程序猿子 &#x1f388; 博客主页&#xff1a;一只程序猿子 博客主页 &#x1f388; 个人介绍&#xff1a;爱好(bushi)编程&#xff01; &#x1f388; 创作不易&#xff1a;喜欢的话麻烦您点个&#x1f44d;和⭐&#xff01; &#x1f388;…

003集Class类应用实例—python基础入门实例

面向对象编程是一种编程方式&#xff0c;此编程方式的落地需要使用 “类” 和 “对象” 来实现&#xff0c;所以&#xff0c;面向对象编程其实就是对 “类” 和 “对象” 的使用。 类就是一个模板&#xff0c;模板里可以包含多个函数&#xff0c;函数里实现一些功能 对象则是根…

Hyperledger Fabric 自动发现网络信息 discover 工具使用

客户端要往 Fabric 网络中发送请求&#xff0c;首先需要知道网络的相关信息&#xff0c;如网络中成员组织信息、背书节点的地址、链码安装信息等。 在 Fabric v1.2.0 版本之前&#xff0c;这些信息需要调用者手动指定&#xff0c;容易出错&#xff1b;另外&#xff0c;当网络中…

2024.1.8 关于 Redis 数据类型 Zset 集合命令、编码方式、应用场景

目录 引言 Zset 集合命令 ZINTERSTORE ZUNIONSTORE Zset 编码方式 Zset 应用场景 排行榜系统 引言 在 Redis 中集合间操作无非就是 交集、并集、差集 Set 类型与之相对应的操作命令为 sinter、sunion、sdiff 注意&#xff1a; 从 Redis 6.2 版本开始&#xff0c;Zset 命…

可充电助听器有哪些优势?

可充电助听器有哪些优势 01 无需频繁更换电池&#xff0c;对于手指不灵活、眼神不好的老年用户以及无法自行更换电池的儿童用户&#xff0c;使用更为方便。 02 可充电助听器的电池一般密封在助听器内部&#xff0c;机身的防水防尘性能更强。 03 部分充电盒具有快充、储电、…

SNP分享:企业并购与拆分的关键成功因素

成功执行并购或拆分需要考虑的关键因素 合并、收购和资产剥离对CIO和CFO来说都是一项艰巨的任务&#xff1b;它们在业务和技术方面都具有很大影响力&#xff0c;企业并购或拆分在数据迁移方面需要考虑哪些关键因素&#xff1f; 一、在迁移中构建自动化 先确定要迁移、集成或剥离…

计算机体系结构流水线学习记录

一、知识点汇总 1.理想情况下&#xff0c;流水线能够实现 n 倍的吞吐率加速比&#xff08;n为流水线深度&#xff09;&#xff0c;但是流水线深度并非越大越好&#xff0c;因为流水线的深度会影响到性能和功耗之间的平衡。 2.RISC&#xff1a;Reduced Instruction Set Comput…

NetCore使用SixLabors组件生成图片

主要用到SixLabors.Fonts(2.1.0)和SixLabors.ImageSharp.Drawing(2.1.0)组件 这里我把组件创建成一个单独的类库&#xff0c;供其他模块来同意调用 ISixLaborsExtensions.cs using SixLabors.Fonts; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Drawing.Processi…

【算法Hot100系列】搜索旋转排序数组

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

[AutoSar]基础部分 RTE 05 Port的实例化和初始化

目录 关键词平台说明一、端口类型二、端口的实例化2.1 创建application port2.2 实例化 三、初始化 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、端口类型 如下图所示&am…

一种DevOpts的实现方式:基于gitlab的CICD(一)

写在之前 笔者最近准备开始入坑CNCF毕业的开源项目&#xff0c;看到其中有一组开源项目的分类就是DevOpts。这个领域内比较出名的项目是Argocd&#xff0c;Argo CD 是一个用于 Kubernetes 的持续交付 (Continuous Delivery) 工具&#xff0c;它以声明式的方式实现了应用程序的…

scipy-interpolate整理

文章目录 scipy-interpolate整理Univariate interpolation 单变量插值Multivariate interpolation 多元插值Unstructured data 非结构化数据&#xff1a;:For data on a grid 对于网格上的数据&#xff1a;:Tensor product polynomials 张量积多项式&#xff1a;: 1-D Splines …

Windows更新 遇到错误 你的设备中缺少重要的安全和质量修复 0x80070643问题解决

一、原因 日常Windows更新时&#xff0c;突然出现以下错误&#xff1a; 二、最简单的方法 官方网址windows10升级工具进行更新&#xff1a;https://www.microsoft.com/zh-cn/software-download/windows10/   更新助手可以帮助你更新到 Windows 10 的最新版本&#xff0c…

【刷题日记】青少年CTF-Misc(三)A1-Misc部分完结!撒花!

StegoTXT 题目难度&#xff1a;★ 题目编号&#xff1a;QSNCTF-2023-T-MISC-20230228003 题目描述&#xff1a;今天维护网站的时候出了一道这样的题目&#xff0c;上传上来看看大家怎么解&#xff0c;flag格式为&#xff1a;qsnctf{xxx}。 下载解压文件&#xff0c;得到一个…