Python分支和循环结构及其应用(文末送书)
一、分支结构
应用场景
我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题。
if语句的使用
在Python中,要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的单词,像if和else就是专门用于构造分支结构的关键字,很显然你不能够使用它作为变量名。下面的例子中演示了如何构造一个分支结构。
username = input('请输入用户名: ')
password = input('请输入口令: ')
# 用户名是admin且密码是123456则身份验证成功否则身份验证失败
if username == 'admin' and password == '123456':print('身份验证成功!')
else:print('身份验证失败!')
需要说明的是,不同于C++、Java等编程语言,Python中没有用花括号来构造代码块而是使用了缩进的方式来表示代码的层次结构,如果if条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了。换句话说连续的代码如果又保持了相同的缩进那么它们属于同一个代码块,相当于是一个执行的整体。缩进可以使用任意数量的空格,但通常使用4个空格,强烈建议大家不要使用制表键来缩进代码,如果你已经习惯了这么做,可以设置代码编辑工具将1个制表键自动变成4个空格,很多的代码编辑工具都支持这项功能。
提示:
if和else的最后面有一个:,它是用英文输入法输入的冒号;程序中输入的'、"、=、(、)等特殊字符,都是在英文输入法状态下输入的。有很多初学者经常不注意这一点,结果运行代码的时候就会遇到很多莫名其妙的错误提示。强烈建议大家在写代码的时候都打开英文输入法(注意是英文输入法而不是中文输入法的英文输入模式),这样可以避免很多不必要的麻烦。
如果要构造出更多的分支,可以使用if...elif...else...结构或者嵌套的if...else...结构,下面的代码演示了如何利用多分支结构实现分段函数求值。
f ( x ) = { 3 x − 5 , ( x > 1 ) x + 2 , ( − 1 ≤ x ≤ 1 ) 5 x + 3 , ( x < − 1 ) f(x) = \begin{cases} 3x - 5, & (x \gt 1) \\ x + 2, & (-1 \le x \le 1) \\ 5x + 3, & (x \lt -1) \end{cases} f(x)=⎩ ⎨ ⎧3x−5,x+2,5x+3,(x>1)(−1≤x≤1)(x<−1)
"""
分段函数求值
"""
x = float(input('x = '))
if x > 1:y = 3 * x - 5
elif x >= -1:y = x + 2
else:y = 5 * x + 3
print(f'f({x}) = {y}')
当然根据实际开发的需要,分支结构是可以嵌套的,例如判断是否通关以后还要根据你获得的宝物或者道具的数量对你的表现给出等级(比如点亮两颗或三颗星星),那么我们就需要在if的内部构造出一个新的分支结构,同理elif和else中也可以再构造新的分支,我们称之为嵌套的分支结构,也就是说上面的代码也可以写成下面的样子。
"""
分段函数求值
"""
x = float(input('x = '))
if x > 1:y = 3 * x - 5
else:if x >= -1:y = x + 2else:y = 5 * x + 3
print(f'f({x}) = {y}')
说明: 大家可以自己感受和评判一下这两种写法到底是哪一种更好。在Python之禅中有这么一句话:“Flat is better than nested”,之所以提倡代码“扁平化”,是因为代码嵌套的层次如果很多,会严重的影响代码的可读性,所以使用更为扁平化的结构在很多场景下都是较好的选择。
一些例子
例子1:英制单位英寸与公制单位厘米互换。
"""
英制单位英寸和公制单位厘米互换
"""
value = float(input('请输入长度: '))
unit = input('请输入单位: ')
if unit == 'in' or unit == '英寸':print('%f英寸 = %f厘米' % (value, value * 2.54))
elif unit == 'cm' or unit == '厘米':print('%f厘米 = %f英寸' % (value, value / 2.54))
else:print('请输入有效的单位')
例子2:百分制成绩转换为等级制成绩。
要求:如果输入的成绩在90分以上(含90分)输出A;80分-90分(不含90分)输出B;70分-80分(不含80分)输出C;60分-70分(不含70分)输出D;60分以下输出E。
"""
百分制成绩转换为等级制成绩
"""
score = float(input('请输入成绩: '))
if score >= 90:grade = 'A'
elif score >= 80:grade = 'B'
elif score >= 70:grade = 'C'
elif score >= 60:grade = 'D'
else:grade = 'E'
print('对应的等级是:', grade)
例子3:输入三条边长,如果能构成三角形就计算周长和面积。
"""
判断输入的边长能否构成三角形,如果能则计算出三角形的周长和面积
"""
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:peri = a + b + cprint(f'周长: {peri}')half = peri / 2area = (half * (half - a) * (half - b) * (half - c)) ** 0.5print(f'面积: {area}')
else:print('不能构成三角形')
说明: 上面通过边长计算三角形面积的公式叫做海伦公式。
二、循环结构
应用场景
我们在写程序的时候,一定会遇到需要重复执行某条指令或某些指令的场景。例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令。在这个场景中,让机器人向球门方向移动就是一个需要重复的动作,当然这里还会用到上一课讲的分支结构来判断机器人是否持球以及是否进入射门范围。再举一个简单的例子,如果要实现每隔1秒中在屏幕上打印一次“hello, world”并持续打印一个小时,我们肯定不能够直接把print('hello, world')这句代码写3600遍,这里我们需要构造循环结构。
所谓循环结构,就是程序中控制某条或某些指令重复执行的结构。在Python中构造循环结构有两种做法,一种是for-in循环,另一种是while循环。
for-in循环
如果明确的知道循环执行的次数,我们推荐使用for-in循环,例如输出100行的”hello, world“。 被for-in循环控制的语句块也是通过缩进的方式来构造的,这一点跟分支结构完全相同,大家看看下面的代码就明白了。
"""
用for循环实现1~100求和
"""
total = 0
for x in range(1, 101):total += x
print(total)
需要说明的是上面代码中的range(1, 101)可以用来构造一个从1到100的范围,当我们把这样一个范围放到for-in循环中,就可以通过前面的循环变量x依次取出从1到100的整数。当然,range的用法非常灵活,下面给出了一个例子:
range(101):可以用来产生0到100范围的整数,需要注意的是取不到101。range(1, 101):可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。range(1, 101, 2):可以用来产生1到100的奇数,其中2是步长,即每次递增的值。range(100, 0, -2):可以用来产生100到1的偶数,其中-2是步长,即每次递减的值。
知道了这一点,我们可以用下面的代码来实现1~100之间的偶数求和。
"""
用for循环实现1~100之间的偶数求和
"""
total = 0
for x in range(2, 101, 2):total += x
print(total)
while循环
如果要构造不知道具体循环次数的循环结构,我们推荐使用while循环。while循环通过一个能够产生bool值的表达式来控制循环,当表达式的值为True时则继续循环,当表达式的值为False时则结束循环。
下面我们通过一个“猜数字”的小游戏来看看如何使用while循环。猜数字游戏的规则是:计算机出一个1到100之间的随机数,玩家输入自己猜的数字,计算机给出对应的提示信息(大一点、小一点或猜对了),如果玩家猜中了数字,计算机提示用户一共猜了多少次,游戏结束,否则游戏继续。
"""
猜数字游戏
"""
import random# 产生一个1-100范围的随机数
answer = random.randint(1, 100)
counter = 0
while True:counter += 1number = int(input('请输入: '))if number < answer:print('大一点')elif number > answer:print('小一点')else:print('恭喜你猜对了!')break
# 当退出while循环的时候显示用户一共猜了多少次
print(f'你总共猜了{counter}次')
break和continue
上面的代码中使用while True构造了一个条件恒成立的循环,也就意味着如果不做特殊处理,循环是不会结束的,这也就是常说的“死循环”。为了在用户猜中数字时能够退出循环结构,我们使用了break关键字,它的作用是提前结束循环。需要注意的是,break只能终止它所在的那个循环,这一点在使用嵌套循环结构时需要引起注意,下面的例子我们会讲到什么是嵌套的循环结构。除了break之外,还有另一个关键字是continue,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。
嵌套的循环结构
和分支结构一样,循环结构也是可以嵌套的,也就是说在循环中还可以构造循环结构。下面的例子演示了如何通过嵌套的循环来输出一个乘法口诀表(九九表)。
"""
打印乘法口诀表
"""
for i in range(1, 10):for j in range(1, i + 1):print(f'{i}*{j}={i * j}', end='\t')print()
很显然,在上面的代码中,外层循环用来控制一共会产生9行的输出,而内层循环用来控制每一行会输出多少列。内层循环中的输出就是九九表一行中的所有列,所以在内层循环完成时,有一个print()来实现换行输出的效果。
循环的例子
例子1:输入一个正整数判断它是不是素数。
提示:素数指的是只能被1和自身整除的大于1的整数。
"""
输入一个正整数判断它是不是素数
"""
num = int(input('请输入一个正整数: '))
end = int(num ** 0.5)
is_prime = True
for x in range(2, end + 1):if num % x == 0:is_prime = Falsebreak
if is_prime and num != 1:print(f'{num}是素数')
else:print(f'{num}不是素数')
例子2:输入两个正整数,计算它们的最大公约数和最小公倍数。
提示:两个数的最大公约数是两个数的公共因子中最大的那个数;两个数的最小公倍数则是能够同时被两个数整除的最小的那个数。
"""
输入两个正整数计算它们的最大公约数和最小公倍数
"""x = int(input('x = '))
y = int(input('y = '))
for factor in range(x, 0, -1):if x % factor == 0 and y % factor == 0:print(f'{x}和{y}的最大公约数是{factor}')print(f'{x}和{y}的最小公倍数是{x * y // factor}')break
如果知道循环的次数,我们通常使用for循环;如果循环次数不能确定,可以用while循环。在循环中还可以使用break来提前结束循环。
三、分支和循环结构的应用
分支和循环结构的重要性不言而喻,它是构造程序逻辑的基础,对于初学者来说也是比较困难的部分。大部分初学者在学习了分支和循环结构后都能理解它们的用途和用法,但是遇到实际问题的时候又无法下手。
经典小案例
例子1:寻找水仙花数。
说明:水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身。
这个题目的关键是将一个三位数拆分为个位、十位、百位,这一点利用Python中的//(整除)和%(求模)运算符其实很容易做到,代码如下所示。
"""
找出所有水仙花数
"""
for num in range(100, 1000):low = num % 10mid = num // 10 % 10high = num // 100if num == low ** 3 + mid ** 3 + high ** 3:print(num)
上面利用//和%拆分一个数的小技巧在写代码的时候还是很常用的。我们要将一个不知道有多少位的正整数进行反转,例如将12345变成54321,也可以利用这两个运算来实现,代码如下所示。
"""
正整数的反转
"""
num = int(input('num = '))
reversed_num = 0
while num > 0:reversed_num = reversed_num * 10 + num % 10num //= 10
print(reversed_num)
例子2:百钱百鸡问题。
说明:百钱百鸡是我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?翻译成现代文是:公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
"""
《百钱百鸡》问题
"""
# 假设公鸡的数量为x,x的取值范围是0到20
for x in range(0, 21):# 假设母鸡的数量为y,y的取值范围是0到33for y in range(0, 34):z = 100 - x - yif 5 * x + 3 * y + z // 3 == 100 and z % 3 == 0:print(f'公鸡: {x}只, 母鸡: {y}只, 小鸡: {z}只')
上面使用的方法叫做穷举法,也称为暴力搜索法,这种方法通过一项一项的列举备选解决方案中所有可能的候选项并检查每个候选项是否符合问题的描述,最终得到问题的解。这种方法看起来比较笨拙,但对于运算能力非常强大的计算机来说,通常都是一个可行的甚至是不错的选择,只要问题的解存在就能够找到它。
例子3:CRAPS赌博游戏。
说明:CRAPS又称花旗骰,是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子,玩家通过摇两粒骰子获得点数进行游戏。简化后的规则是:玩家第一次摇骰子如果摇出了7点或11点,玩家胜;玩家第一次如果摇出2点、3点或12点,庄家胜;玩家如果摇出其他点数则玩家继续摇骰子,如果玩家摇出了7点,庄家胜;如果玩家摇出了第一次摇的点数,玩家胜;其他点数玩家继续摇骰子,直到分出胜负。
"""
Craps赌博游戏
我们设定游戏开始时玩家有1000元的赌注
游戏结束的条件是玩家破产(输光所有的赌注)
"""
from random import randintmoney = 1000
while money > 0:print(f'你的总资产为: {money}元')go_on = False# 下注金额必须大于0小于等于玩家总资产while True:debt = int(input('请下注: '))if 0 < debt <= money:break# 第一次摇色子# 用1到6均匀分布的随机数模拟摇色子得到的点数first = randint(1, 6) + randint(1, 6)print(f'\n玩家摇出了{first}点')if first == 7 or first == 11:print('玩家胜!\n')money += debtelif first == 2 or first == 3 or first == 12:print('庄家胜!\n')money -= debtelse:go_on = True# 第一次摇色子没有分出胜负游戏继续while go_on:go_on = Falsecurrent = randint(1, 6) + randint(1, 6)print(f'玩家摇出了{current}点')if current == 7:print('庄家胜!\n')money -= debtelif current == first:print('玩家胜!\n')money += debtelse:go_on = True
print('你破产了, 游戏结束!')
例子4:斐波那契数列。
说明:斐波那契数列(Fibonacci sequence),通常也被称作黄金分割数列,是意大利数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)在《计算之书》中研究在理想假设条件下兔子成长率问题而引入的数列,因此这个数列也常被戏称为“兔子数列”。斐波那契数列的特点是数列的前两个数都是1,从第三个数开始,每个数都是它前面两个数的和,按照这个规律,斐波那契数列的前10个数是:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55。斐波那契数列在现代物理、准晶体结构、化学等领域都有直接的应用。
"""
输出斐波那契数列前20个数
"""a, b = 0, 1
for _ in range(20):a, b = b, a + bprint(a)
例子5:打印100以内的素数。
说明:素数指的是只能被1和自身整除的正整数(不包括1)。
"""
输出100以内的素数
"""
for num in range(2, 100):# 假设num是素数is_prime = True# 在2到num-1之间找num的因子for factor in range(2, num):# 如果找到了num的因子,num就不是素数if num % factor == 0:is_prime = Falsebreak# 如果布尔值为True在num是素数if is_prime:print(num)
文末免费送书:Python从入门到精通
《Python从入门到精通(微课精编版)》使用通俗易懂的语言、丰富的案例,详细介绍了Python语言的编程知识和应用技巧。全书共24章,内容包括Python开发环境、变量和数据类型、表达式、程序结构、序列、字典和集合、字符串、正则表达式、函数、类、模块、异常处理和程序调试、进程和线程、文件操作、数据库操作、图形界面编程、网络编程、Web编程、网络爬虫、数据处理等,还详细介绍了多个综合实战项目。其中,第24章为扩展项目在线开发,是一章纯线上内容。全书结构完整,知识点与示例相结合,并配有案例实战,可操作性强,示例源代码大都给出详细注释,读者可轻松学习,快速上手。本书采用O2O教学模式,线下与线上协同,以纸质内容为基础,同时拓展更多超值的线上内容,读者使用手机微信扫一扫即可快速阅读,拓展知识,开阔视野,获取超额实战体验。

抽奖方式: 评论区随机抽取3位小伙伴免费送出!
参与方式: 关注博主、点赞、收藏、评论区评论“人生苦短,我用Python!”(切记要点赞+收藏,否则抽奖无效,每个人最多评论三次!)
活动截止时间: 2024-3-04 20:00:00
当当: 购买链接传送门
京东: 购买链接传送门
😄😄😄名单公布方式: 下期活动开始将在评论区和私信一并公布,中奖者请三天内提供信息😄😄😄
前言
随着人工智能、大数据处理和区块链等新技术的流行,Python语言也开始受人关注并不断被普及。Python语言自诞生至今经历了近30年时间,最近十年发展比较迅猛。一方面是因为Python语言的优点吸引了大量编程人员,另一方面是因为当下科学计算、人工智能需求与Python语言特色相契合。
Python语言简单易学,具有开放特性,并拥有成熟而丰富的第三方库,因此适用于新兴技术领域的开发。Python能够很轻松地把用其他语言设计的各种模块(尤其是C/C++)连接在一起,这大大拓展了Python的应用范畴。现在很多学校都开设了Python编程课程,甚至连小学生都开始学习Python语言。本书从初学者的角度出发,循序渐进地讲解使用Python语言进行编程和应用开发的各项技术。
本书内容
本书分为四大部分,共24章,具体结构划分如下。
第1部分:语法基础(第1~7章)。内容包括Python开发环境、Python开发工具、变量和数据类型、运算符和表达式、语句和程序结构、序列、列表、元组、字典与集合、字符串等知识。使读者能快速掌握Python语言的基本语法,为以后编程奠定坚实的基础。
第2部分:开发进阶(第8~17章)。内容包括正则表达式、函数、类及面向对象程序设计、模块、异常处理和程序调试、进程和线程、文件操作、数据库操作、图形界面编程、网络编程等。学习完该部分,读者可以掌握Python核心开发技术。
第3部分:项目应用(第18~23章)。面向Web开发、网络爬虫、大数据开发3个热门应用方向展开,讲解这3个应用方向的核心技术,并分类提供了这3个方向的常用开发项目。学习完该部分,读者能够开发简单的应用程序,解决实际问题。
第4部分:扩展项目在线开发(第24章)。该部分是纯线上内容,涉及界面设计、人工智能、游戏开发、自动化运维和API应用,通过5大类、29个热门的完整项目引导读者学习如何使用Python进行项目开发,带领读者亲身体验使用Python开发实际应用程序的全过程。
本书特色
400万+读者体验,畅销丛书新增精品;14年开发教学经验,一线讲师半生心血。
内容全面:本书由浅入深,循序渐进地讲解了Python语言的核心基础知识,并且适度地与当今热门的Python开发方向对接,知识点布局合理、结构匀称,全书内容完整、前面、详尽,适合相关院校选作教学参考用书,也适合相关培训机构用作教材。
体验超好:配套同步视频讲解,微信扫一扫,随时随地看视频;配套在线支持,知识拓展,专项练习,更多案例,同样微信扫一扫即可学习。适应移动互联网时代的学习习惯,全面提升读者体验。
语言简练:本书语言通俗易懂,知识讲解简洁明了,重难点突出,避免专业式说教,适合初学者自学阅读。
入门容易:本书遵循学习规律,入门和实战相结合。采用“基础知识+中小案例+实战案例”的编写模式,内容由浅入深、循序渐进,从入门中学习实战应用,从实战应用中激发学习兴趣。
案例超多:通过例子学习是最好的学习方式,本书通过一个知识点、一个例子、一个结果、一段评析的模式,透彻详尽地讲述了Python开发的各类主流应用知识,并且几乎每一章都配有综合应用的实战案例。实例、案例丰富详尽,跟着大量案例去学习,边学边做,从做中学,学习可以更深入、更高效。
栏目贴心:本书根据需要在各章使用了很多“注意”“提示”等小栏目,让读者可以在学习过程中更轻松地理解相关知识点及概念,扫除盲点,并轻松地掌握个别技术的应用技巧。
资源丰富:本书配套Python学习人员(尤其是零基础学员)最需要的13大资源库,包括计算机基础知识库、Python基础工具库、正则表达式工具库、数据库编程工具库、网络编程工具库、前端开发工具库、Web开发工具库、网络爬虫工具库、界面编程工具库、大数据处理工具库、人工智能编程工具库、游戏编程工具库、Python面试题库。这些资源,不仅学习中需要,工作中更有用。另外,本书还配有307集同步讲解视频和示例源码库。
在线支持:顺应移动互联网时代知识获取途径变化的潮流,本书每一章均配有在线支持,提供与本章知识相关的知识拓展、专项练习、更多案例等优质在线学习资源,并且新知识、新题目、新案例不断更新中。这样一来,在有限的纸质图书中承载了更丰富的学习内容,让读者真实体验到以一倍的价格购买两倍的学习内容,更便捷,更超值。

相关文章:
Python分支和循环结构及其应用(文末送书)
一、分支结构 应用场景 我们写的Python代码都是一条一条语句顺序执行,这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题。 if语句的使用 在Python中,要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的…...
机器学习——线性代数中矩阵和向量的基本介绍
矩阵和向量的基本概念 矩阵的基本概念(这里不多说,应该都知道) 而向量就是一个特殊的矩阵,即向量只有一列,是个n*1的矩阵 注:一般矩阵用大写字母表示,向量用小写字母表示 矩阵的加减运算 两个…...
基于R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用
Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…...
蜘蛛蜂优化算法SWO求解不闭合MD-MTSP,可以修改旅行商个数及起点(提供MATLAB代码)
1、蜘蛛蜂优化算法SWO 蜘蛛蜂优化算法(Spider wasp optimizer,SWO)由Mohamed Abdel-Basset等人于2023年提出,该算法模型雌性蜘蛛蜂的狩猎、筑巢和交配行为,具有搜索速度快,求解精度高的优势。VRPTW&#x…...
Java架构师之路六、高并发与性能优化:高并发编程、性能调优、线程池、NIO、Netty、高性能数据库等。
目录 高并发编程: 性能调优: 线程池: NIO: Netty: 高性能数据库: 上篇:Java架构师之路五、微服务:微服务架构、服务注册与发现、服务治理、服务监控、容器化等。-CSDN博客 下篇…...
MySQL-行转列,链接查询
1. 行转列 1.1 示例数据准备 create table test_9(id int,name varchar(22),course varchar(22),score decimal(18,2) ); insert into test_9 (id,name,course,score)values(1,小王,java,99); insert into test_9 (id,name,course,score)values(2,小张,java,89.2); inse…...
Linux之安装jdk,tomcat,mysql,部署项目
目录 一、操作流程 1.1安装jdk 1.2安装tomcat(加创建自启动脚本) 1.3 安装mysql 1.4部署项目 一、操作流程 首先把需要用的包放进opt文件下 1.1安装jdk 把jdk解压到/usr/local/java里 在刚刚放解压包的文件夹打开vim /etc/profile编辑器,…...
HTMLElement.click()的回调触发踩坑
先看看以下代码 const el document.getElementById("btn") el.addEventListener("click", () > {Promise.resolve().then(() > console.log("microtask 1"));console.log("1"); }); el.addEventListener("click", (…...
mysql锁-这条sql加了哪些锁
文章目录 1、 InnoDB的三种行锁2、常见的加锁语句2.1、常见隐式加锁语句2.1、常见显示加锁语句 3、加锁的2条规则4、案例4.1、唯一索引等值查询4.2、唯一索引范围查询4.3、非唯一索引等值查询4.4、非唯一索引范围查询 InnoDB 存储引擎中的行锁的加锁规则。 1、 InnoDB的三种行锁…...
Docusaurus框架——快速搭建markdown文档站点介绍sora
文章目录 ⭐前言⭐初始化项目💖 创建项目(react-js)💖 运行项目💖 目录文件💖 创建一个jsx页面💖 创建一个md文档💖 创建一个介绍sora的文档 ⭐总结⭐结束 ⭐前言 大家好࿰…...
Prompt 编程的优化技巧
一、为什么要优化 一)上下文限制 目前 GPT-3.5 以及 GPT-4最大支持 16K 上下文,比如你输入超过 16k 的长文本,ChatGPT 会提示文本过大,为了避免 GPT 无法回复,需要限制 上下文在16k 以内 上下文对于 GPT 来说是非常重…...
React PureComponent 和 React.memo()区别
1 注意 ● PureComponent和memo仅作为性能优化的方式存在 ● 不要依赖它来阻止渲染,会产生BUG ● PureComponnet 和memo 都是通过对 props 值的浅比较来决定该组件是否需要更新的。 2 PureComponent 和React.memo() 区别 PureComponent 和React.memo()都是React优化…...
CentOS 7全系列免费
CentOS 7 全系列免费:桌面版、工作站版、服务器版等等………… 上文,关于CentOS 7这句话,被忽略了。 注意版本:知识产权、网络安全。...
【Spring连载】使用Spring Data访问 MongoDB----Aggregation Framework支持
【Spring连载】使用Spring Data访问 MongoDB----聚合框架支持 一、基础槪念二、投影表达式Projection Expressions三、分面分类法Faceted Classification3.1 桶Buckets3.2 多方面的聚合Multi-faceted Aggregation3.3 按计数排序Sort By Count3.4 投影表达式中的Spring表达式支持…...
【深入理解设计模式】适配器设计模式
适配器设计模式 适配器设计模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口,从而使得原本由于接口不兼容而不能一起工作的类能够一起工作。适配器模式通常用于以下场景: 现有接口与需求不匹配:当需要…...
ASP.NET-实现图形验证码
ASP.NET 实现图形验证码能够增强网站安全性,防止机器人攻击。通过生成随机验证码并将其绘制成图像,用户在输入验证码时增加了人机交互的难度。本文介绍了如何使用 C# 和 ASP.NET 创建一个简单而有效的图形验证码系统,包括生成随机验证码、绘制…...
解决Maven爆红以及解决 Idea 卡在 Resolving问题
关于 Idea 卡在 Resolving(前提是Maven的setting.xml中配置好了阿里云和仓库) 参考文章https://blog.csdn.net/jiangyu1013/article/details/95042611 解决Maven爆红参考文章https://devpress.csdn.net/beijing/656d993b76f0791b6eca7bb0.html?dp_toke…...
MySQL集群 双主架构(配置命令)
CSDN 成就一亿技术人! 今天刚开学第一天给大家分享一期:MySQL集群双主的配置需求和命令 CSDN 成就一亿技术人! 神秘泣男子主页:作者首页 <———— MySQL专栏 :MySQL数据库专栏<———— MySQL双主是一…...
网络安全之安全事件监测
随着人们对技术和智能互联网设备依赖程度的提高,网络安全的重要性也在不断提升。因此,我们需要不断加强网络安全意识和措施,确保网络环境的安全和稳定。 网络安全的重要性包含以下几点: 1、保护数据安全:数据是组织和…...
【BUG 记录】MyBatis-Plus 处理枚举字段和 JSON 字段
【BUG 记录】MyBatis-Plus 处理枚举字段和JSON字段 一、枚举字段(mysql环境已测、postgresql环境已测)1.1 场景1.2 定义枚举常量1.3 配置枚举处理器1.4 测试 二、JSON字段(mysql环境已测)2.1 导包2.2 使用对象接受2.3 测试 三、JS…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
