热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从零开始学习PYTHON3讲义(七)条件分支和哥德巴赫猜想

《从零开始PYTHON3》第七讲人生是由无数个选择组成,每个选择都有不同的限定条件。现在来说人生有点早是吧:)不过事实的确是这样的。程序也充满着选择,满

timg?image&quality=80&size=b9999_10000&sec=1545112916052&di=d2428f9e946cda2d7df3f0ca9ff3def8&imgtype=0&src=http%3A%2F%2Finsights.thoughtworkers.org%2Fwp-content%2Fuploads%2F2015%2F07%2F718-%25E4%25BD%259F%25E8%25BE%25BE-%25E5%2585%25A8%25E6%25A0%2588%25E5%25BC%2580%25E5%258F%2591%25E8%25AF%25AD%25E8%25A8%2580Python-1024x724.png

《从零开始PYTHON3》第七讲

人生是由无数个选择组成,每个选择都有不同的限定条件。现在来说人生有点早是吧:)不过事实的确是这样的。

程序也充满着选择,满足不同的条件,则运行不同的运算。这些对不同运算的选择,则被称为分支,或者叫“条件分支”。

在Python中,最简单的条件分支是这个样子(伪代码):

if 条件:满足条件时执行的分支
条件不满足时,或者条件满足、执行完分支之后,会继续从这里开始执行

用真实的代码来看个例子:

#当a的值大于3的时候,显示a的值
if a > 3:print(a)

以上是if分支最简单的形式,完整的if分支使用伪代码表示是这样:

if 条件一:条件一满足时执行
elif 条件二:条件二满足(条件一不满足)时执行
elif 条件三:条件三满足(条件一、二不满足)时执行
...
else:所有分支条件均不满足时执行

在其它的编程语言中,if分支通常最多只处理两种分支条件,更多的分支要使用if语句的嵌套,或者switch等命令。在python中这些不同的处理方式都被合并到了if分支语句。其中主要的体现就是elif子句,elif实际是“else if"的缩写,这非常像if的嵌套使用,但又更简单易用。
if语句完整的语法包含很多个部分,elif只是其中的一个部分,所以叫“子句”。每个elif子句对应一个分支条件和吻合条件后的分支。在一个if分支结构中,elif子句可以有很多个,这样就可以用于对应很多种不同的分支条件。但是最初的if和最后的else只能有一个。

除了伪代码,我们还可以用流程图来描述if语句的执行走向,从而加深印象:

if-flowchart1
相信你已经有了概念了。下面是一个真实代码的例子:

#条件分支示例
#作者:Andrew#输入
wallet=float(input("请输入钱包里的现金总数:"))if wallet > 1000.0:print("今晚去吃大餐.")
elif wallet > 500.0:print("简单吃一顿,然后去迪厅.")
elif wallet > 100.0:print("去吃个快餐,然后看场电影.")
else:print("回家看看有没有剩饭,然后看电视吧.")

上面程序中,首先请用户输入一个数字,代表钱包中的现金总数,然后使用float函数把输入变换为浮点数。使用float类型是因为,表达的是现金的总数,当然可能包含小数部分。如果不使用float函数,输入的数据默认是字符串类型,这个我们前面已经讲过了。

随后根据现金的数额,显示不同的提示。提示信息仅供娱乐,这里是为了说明if语句的基本使用方式。你主要需要理解的部分就是,这些不同信息,是根据不同的分支条件决定的。

在if语句中,真正控制程序走向的正是程序中所给出的条件,通常以条件表达式的方式存在。表达式的运算结果只有“真”、“假”两种形式。这是逻辑类型,或称bool(布尔)类型,属于数字类型的子类型,我们在第五章中讲过了。
我们当时还讲过,采用bool类型的原因之一是因为现代数学体系上完备的概念和体系。今天我们就在这个基础上再进一步讲述逻辑运算,或称bool(布尔)运算。


逻辑运算(布尔运算)

bool类型只有两个可能值,所以常见的bool运算方式也并不多,最常用的就是下面三种:

  • not 否定操作,比如下面两条语句,从逻辑上是相同的:

    if not 性别=="女":if 性别=="男":

  • and 逻辑“与”操作:and操作符两边的条件,必须都为真,结果才是“真”,否则结果是“假”,例如:

    if 性别&#61;&#61;"男" and 16<年龄<25&#xff1a;
    #当性别为男&#xff0c;同时年龄在16到25岁之间(不包含16岁和25岁)时&#xff0c;执行

  • or 逻辑“或”操作&#xff1a;or操作符两边的条件&#xff0c;只要有一个是“真”&#xff0c;则结果就是“真”&#xff0c;全部为“假”&#xff0c;结果才是假&#xff0c;例如&#xff1a;

    if 年龄<&#61;16 or 年龄>&#61;25:print("条件不符")
    #当年龄小于等于16岁&#xff0c;或者大于等于25岁&#xff0c;则显示“条件不符“

条件判断本来挺好用&#xff0c;为什么学这么复杂的布尔运算呢&#xff1f;我们来看一个例子你就会理解了&#xff1a;

假设某个男篮选秀&#xff0c;教练组提出了录取的三个基本条件&#xff1a;

  • 男性
  • 年龄大于16岁&#xff0c;小于25岁
  • 身高超过2.1米

如果只使用逻辑判断&#xff0c;不使用逻辑运算表达式&#xff0c;我们可能得到这样的程序代码(伪代码)&#xff1a;

if 性别&#61;&#61;"男":if 16<年龄<25: #注意这里使用了连续判断(if语句嵌套)if 身高>2.1:print("符合条件&#xff01;")else:print("不符合条件&#xff01;")else:print("不符合条件&#xff01;")
else:print("不符合条件&#xff01;")

对比如果使用逻辑运算的代码&#xff1a;

if 性别&#61;&#61;"男" and 16<年龄<25 and 身高>2.1:print("条件符合!")
else:print("条件不符合!")

使用逻辑运算的代码干净、清晰&#xff0c;不易出错。不过在初学的时候&#xff0c;你会感觉有点“烧脑” :)


循环中的分支

我们已经基本了解了分支语句的功能&#xff0c;上面举的例子&#xff0c;基本都是通用程序中的分支处理。在常用的循环中&#xff0c;分支的处理又略有不同。

这些不同不是来自于分支语句本身&#xff0c;而往往是分支条件满足之后&#xff0c;所要达到的效果。通常在循环语句块中&#xff0c;我们常用到两种特殊的处理&#xff1a;

  • 中断循环的继续&#xff0c;退出循环&#xff0c;从循环语句块之后的第一条语句继续执行程序的后续部分。这种情况下&#xff0c;使用break语句。
  • 继续循环&#xff0c;但跳过本次循环的后续部分&#xff0c;从循环块开始的部分执行下一次循环。这种情况下&#xff0c;使用continue语句。

    来看一个例子&#xff1a;

#循环显示数字1-11&#xff0c;其中数字3、5跳过不显示i&#61;0
#启动一个无限循环
while True:i &#43;&#61; 1#因题意&#xff0c;跳过数字3、5if i &#61;&#61; 3 or i &#61;&#61; 5:continueprint(i)#因题意&#xff0c;超过数字11退出循环if i >&#61; 11:break

因为我们的好习惯&#xff0c;大多需要解释的内容&#xff0c;都已经在程序的给出注释了。当然仍有几点需要注意&#xff1a;

  • while True:语句&#xff0c;进入循环的条件和继续循环的条件是True,这是一个立即数&#xff0c;也是常数。这使得循环成为一个永远不停止的循环。
  • 当i的值是3或者5的时候&#xff0c;执行continue命令,这将跳过后面的显示i值部分&#xff0c;从循环一开始重新执行。
  • 当i>&#61;11的时候&#xff0c;break语句导致循环终止。
  • 注意i &#43;&#61; 1这是我们在前面演示的时候&#xff0c;都放到循环块最后部分的循环条件变量&#xff0c;当然这里i已经不是循环的条件变量了&#xff0c;但仍然对于退出循环起着很关键的作用。

这里放到循环一开始&#xff0c;是为了防止continue语句跳过循环剩余部分的时候&#xff0c;把这一句也跳过去&#xff0c;从而导致i的值不再变化&#xff0c;最终导致循环无法停止的情况。

根据上面这段示例代码&#xff0c;我们出几道思考题作为今天练习的一部分&#xff1a;

  • 如果没有break语句&#xff0c;本程序会出现什么情况&#xff1f;
  • 跟i &#61;&#61; 3 or i &#61;&#61; 5 对比
    (i &#61;&#61; 3) or (i &#61;&#61; 5) 功能是否一样&#xff1f;哪个更好&#xff1f;
  • 本程序中&#xff0c; i >&#61; 11 和
    i &#61;&#61; 11功能是否一样&#xff1f;
    哪个更好&#xff1f;
  • 本例中&#xff0c;如果使用i&#61;&#61;11,跟换用for循环模式&#xff0c;然后使用range(12)含义一样吗&#xff1f;

挑战

今天的挑战内容是编程来证明《哥德巴赫猜想》&#xff0c;这个话题比较大&#xff0c;所以理所当然我们只是来证明简化版的《哥德巴赫猜想》。

哥德巴赫是德国一位中学教师&#xff0c;也是一位著名的数学家&#xff0c;生于 1690 年&#xff0c;1725 年当选为俄国彼得堡科学院院士。1742年&#xff0c;哥德巴赫在教学中发现&#xff0c;每个不小于 6 的偶数都是两个素数&#xff08;只能被 1 和它本身整除的数&#xff09;之和。如 6&#xff1d;3&#xff0b;3&#xff0c;12&#xff1d;5&#xff0b;7 等。
哥德巴赫 1742 年给欧拉的信中哥德巴赫提出了以下猜想&#xff1a;任一大于 2 的偶数都可写成两个质数之和。但是哥德巴赫自己无法证明它&#xff0c;于是就写信请教赫赫有名的大数学家欧拉帮忙证明&#xff0c;但是一直到死&#xff0c;欧拉也无法证明。因现今数学界已经不使用“1 也是质数”这个约定&#xff0c;原初猜想的现代陈述为&#xff1a;任一大于 5 的偶数都可写成两个质数之和。

编写程序&#xff0c;输入任意一个大于5的偶数&#xff0c;证明这个偶数符合哥德巴赫猜想&#xff0c;并显示是哪两个质数。

我们前面就讲过&#xff0c;如果一个问题太复杂&#xff0c;我们难以实现。那就要对问题进行拆分&#xff0c;使得每个小的部分&#xff0c;都能够清晰、容易的完成&#xff0c;最后把所有小程序“组装”在一起。

现在我们就把今天的挑战内容分拆一下&#xff0c;分解成几个容易完成的小问题。

奇数、偶数判断

输入一个整数&#xff0c;判断这个数字是奇数还是偶数&#xff1f;我们直接来用代码讲解&#xff1a;

#输入一个正整数n,判断n是奇数还是偶数#定义一个的函数&#xff0c;
#输入参数n
#当n为偶数时返回True,否则返回False
def isEven(n):return not (n % 2)#输入
n&#61;int(input("请输入一个正整数&#xff1a;"))
#判断
if isEven(n):print(n,"是偶数.")
else:print(n,"是奇数.")

我们在程序中定义了一个函数来判断参数是奇数还是偶数。判断的原理&#xff0c;是使用整数运算中的求余数办法&#xff0c;求参数除以2之后&#xff0c;是否有余数。如果有余数&#xff0c;则参数肯定是奇数&#xff1b;如果没有余数&#xff0c;刚好除尽了&#xff0c;则参数当然是偶数。

判断的时候还使用了小技巧&#xff0c;就是not (n % 2)这一句。
有余数的话&#xff0c;整数值表示为非0&#xff0c;当然这里因为求除以2的余数&#xff0c;所以这个值要么是1&#xff0c;要么是0&#xff0c;不可能是其它的值。前面我们已经讲过了&#xff0c;1代表“真”&#xff0c;True。没有余数是0的话&#xff0c;0代表“假”&#xff0c;False。所以这个整数的结果&#xff0c;我们是可以直接当做bool值来使用的。
唯一要处理的&#xff0c;是我们的函数判断如果是偶数才返回True&#xff0c;所以在取余数运算的前面增加了not逻辑运算&#xff0c;也就是取反&#xff0c;来得到我们需要的bool值。也既&#xff1a;参数是偶数&#xff0c;返回真值True。

输入整数之后&#xff0c;使用int()函数把输入的字符串内容转换为整数数字。因为我们定义的函数返回实际是bool值&#xff0c;所以使用if分支来打印判断的结果&#xff0c;而不是显示返回值本身&#xff0c;那样只能显示出来“True”或者“False”。

用户输入是否满足条件&#xff1f;

因为我们的程序对用户的输入值有约束条件&#xff0c;1、偶数&#xff0c;2、大于5&#xff0c;所以我们要对用户输入的数字先进行判断是否条件吻合&#xff0c;如果不符合约束条件&#xff0c;要请用户重新输入。我们以前提过&#xff0c;为了简化问题&#xff0c;在我们涉及的编程概念中&#xff0c;暂不考虑用户输入根本不是数字这种错误。

#接受一个大于5的偶数输入
#不符合条件则循环重新输入#判断是否为偶数
def isEven(n):return not (n % 2)
#判断输入数字是否符合条件
def isValid(n):if n <&#61; 5 or not isEven(n):return Falsereturn True
#循环输入&#xff0c;直到得到吻合条件的输入
def inputNumber():while True:n&#61;int(input("请输入一个大于5的偶数&#xff1a;"))if isValid(n):breakelse:print("输入不符合条件&#xff0c;请重新输入&#xff01;")return n#调用输入函数
print("输入为&#xff1a;",inputNumber())

程序上来先是上一节定义的isEven函数&#xff0c;用来判断输入是否为偶数。

接着是新定义的函数isValid(n)&#xff0c;用来判断参数是否大于5&#xff0c;并且是偶数。判断的方法使用or逻辑运算&#xff0c;用以在一个if分支判断中&#xff0c;同时判断两个约束条件。
逻辑运算中的or跟后面的not有点容易混淆。区分的方法也很容易&#xff0c;not运算符是单操作数的&#xff0c;只对其后面的表达式有效&#xff0c;or则是对两边的两个操作数有效。所以or后面一定要有一个操作数&#xff0c;这里显然只能是not的结果。而not操作符必须有其后面的唯一操作数。说了这么多&#xff0c;都是为了解释给“阅读”程序的人&#xff0c;所以其实编写程序的时候&#xff0c;写成&#xff1a;if (n<&#61;5) or (not isEven(n)):这样更清楚&#xff0c;你说对吗&#xff1f;

再下面的inputNumber()函数&#xff0c;重点是使用了while循环&#xff0c;并且用True作while的条件&#xff0c;形成一个永远的循环。在循环中&#xff0c;只要用户输入的数字不符合规定条件&#xff0c;就让用户重新输入。只有当用户输入了满足条件的数字的时候&#xff0c;才会退出循环&#xff0c;并由函数返回值返回用户符合条件的输入。

质数的判断

质数是数学上的定义&#xff0c;指的是只能被1和它本身整除的数字。因为要求整除&#xff0c;所以这个数字本身首先要是整数。

判断质数很适合使用循环&#xff0c;假设我们需要对数字n判断是否为质数。循环从2开始&#xff0c;一直循环到这个n-1。用n除以这个循环变量后&#xff0c;如果没有余数&#xff0c;表示整除了。那当然这个数字就不是质数。如果所有的循环结束&#xff0c;也没有整除的现象&#xff0c;这个数字就是质数。来看程序代码&#xff1a;

#接受一个正整数输入&#xff0c;判断该数字是否为质数def isPrime(n):#从2开始循环到n-1for i in range(2,n):#如果有可以被整除的(无余数),#则数字不是质数if (n % i &#61;&#61; 0):return Falsereturn True#输入
n&#61;int(input("请输入一个正整数&#xff1a;"))
#判断是否为质数并显示
if isPrime(n):print(n,"是质数")
else:print(n,"不是质数")

好了&#xff0c;至此我们所有用到的小功能都已经实现了&#xff0c;后续需要把所有代码拼装到一起&#xff0c;成为一个完整的程序。拼装工作我们当做今天的练习请你自己完成&#xff0c;一定要完成之后再看答案。

拼装提示&#xff1a;在刚才的几个小程序中&#xff0c;因为每个小程序都是一个完整的程序&#xff0c;都有输入、显示等功能&#xff0c;核心的功能当然已经完成了函数化。所以拼装重要的工作是拼装这些函数。主要的程序流程&#xff0c;则需要根据前面《哥德巴赫猜想》的题面来自己编写。这个主流程的大致工作应当是&#xff1a;

  • 输入数字&#xff0c;判断数字是否合规&#xff0c;否则重新输入
  • 假设输入的数字是n&#xff0c;我们用i变量循环从3到n-1
  • 如果存在i和n-i两个数字都是质数的情况&#xff0c;则猜想成立
  • 猜想成立把i和n-i都显示出来就好了

我相信你一定能完成的&#xff0c;加油吧。


练习时间

  1. 循环中的分支一节中的思考题。

  2. 循环显示数字1-11&#xff0c;其中数字3、5跳过不显示&#xff0c;要求使用for循环实现。&#xff08;我们前面已经有了while循环的例子&#xff0c;可以参考完成&#xff09;

  3. 完成上一节中的《哥德巴赫猜想》完整程序。这里有一个提示&#xff0c;在调试程序的时候&#xff0c;不要输入太大的数字&#xff0c;否则计算机可能需要运行上几天甚至更多&#xff0c;这让你完全无法验证程序和找出程序中的问题。


本讲小结

  • 本讲重点讲述了条件分支&#xff0c;但实际上逻辑运算及其各种应用是重点。因为分支的条件&#xff0c;是使用逻辑运算表达的。
  • 有逻辑处理能力是计算机区别于其它计算设备&#xff08;比如传统计算器&#xff09;的重要特征。
  • 多项条件通过逻辑运算组合在一起&#xff0c;可以让代码更简洁。并且能完成很多复杂的工作。这个工作的难度&#xff0c;在于你如果想让计算机执行的正确&#xff0c;你自己必须使用自己的大脑完全的模拟正确。

练习参考答案

  • 程序请参考源码&#xff1a;code2a.py 及 goldbach.py。

  • 如果没有break语句&#xff0c;本程序会出现什么情况&#xff1f;

    没有break语句&#xff0c;本程序会陷入死循环&#xff0c;无法停止。

  • i &#61;&#61; 3 or i &#61;&#61; 5 对比(i &#61;&#61; 3) or (i &#61;&#61; 5) 功能是否一样&#xff1f;哪个更好&#xff1f;

    功能都一样&#xff0c;但后者更好&#xff0c;因为更直观更容易理解。
    延伸一个解释。加上小括号之后&#xff0c;比不加&#xff0c;代码速度回略微受一点影响。但这个影响非常小&#xff0c;可以忽略不计&#xff0c;所以看上去更清晰就成了优选。

  • 本程序中&#xff0c; i >&#61; 11 和i &#61;&#61; 11功能是否一样&#xff1f;哪个更好&#xff1f;

    功能是一样的&#xff0c;但i>&#61;11容错性更好。

  • 本例中&#xff0c;如果换用i&#61;&#61;11,跟for循环中使用range(12)含义一样吗&#xff1f;

    功能可能一样&#xff0c;但含义完全不一样。i&#61;&#61;11是本例中的结束条件&#xff0c;是相等的判断。而range(12)表示生成的列表<12&#xff0c;使用了小于判断。


转:https://www.cnblogs.com/andrewwang/p/10167630.html



推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了一个编程问题,要求求解一个给定n阶方阵的鞍点个数。通过输入格式的描述,可以了解到输入的是一个n阶方阵,每个元素都是整数。通过输出格式的描述,可以了解到输出的是鞍点的个数。通过题目集全集传送门,可以了解到提供了两个函数is_line_max和is_rank_min,用于判断一个元素是否为鞍点。本文还提供了三个样例,分别展示了不同情况下的输入和输出。 ... [详细]
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
author-avatar
jgfujfuf
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有