我们首先来思考一下这个问题:
我们现在写的程序如果用文字来表达的话会有多少句话呢?
如何用几行代码准确描述一个程序?
为了学习编程,我们需要学习一门新的语言,一种计算机可以理解的语言。它比我们平常说的更精确,而且这种计算机语言会用解释器翻译给计算机,这样计算机就可以为我们工作了。
想象一下,你根本不需要雇佣任何人。只要告诉计算机你的指令,将它连接到互联网,它就会无休止地为你工作。再加上现在可用的许多人工智能工具,这相当于零成本雇佣了一大批每天 24 小时工作的员工。
这就是它在过去两年如此受欢迎的原因。值得花些时间去学习它。
虽然你目前还不知道如何让这些机器为你工作,以便与更多的人和资源建立联系。
相信我,将来的某一天你会知道的。
只不过要和电脑沟通,需要懂一门语言而已,我们从原理开始吧!
解释器()只会翻译属于该语言的代码。如果你尝试翻译不属于该语言的内容,就会发生错误。
对于初学者来说,每次输入内容时都会出现错误,这可能会有点令人沮丧,但犯错也无妨。即使是最好的程序员也会在代码中犯错。
每写一句话都要报告错误,找出错误,然后进行调整,这才是学习编程的正确方法。
我们经常看到的错误被称为语法错误,这意味着我们试图翻译的内容不是语言的一部分。
与汉语的主谓宾语法类似,也有定义字符串的语法。
当我们说话时,我们会创建许多语法不完全正确的句子,但别人仍然可以理解它们。
如:“你不带,就等于没做过!”
不用任何背景,大家都知道这是老师对学生说的话。
这句话的背后隐藏着很多信息。
在相同背景下长大的人可能都有过不做作业并谎称没有带作业的经历。
正在学习中文的外国人可能没有这些经历,但他们可以通过中国朋友的解释了解句子背后的背景信息。
我们在小学学造句的时候,学过造句的规则:主语加谓语动词,后面跟着宾语。
几乎所有语言都有类似的规则。主语、谓语和宾语的顺序可能不同,但有一种方法可以将三者组合成一个句子。
主语可以是名词,宾语也可以是名词。
我们可以使用许多不同的东西作为句子成分,所以动词可以是“吃”或“喜欢”。
有很多词可以用作动词。主语可以是名词“I”,也可以是“”,也可以是“”。
当然,语法实际上比这里讨论的要大得多,也复杂得多,但我们仍然可以理解,单词是一个组成部分,这些组成部分拼接在一起就形成了句子。
接下来我们来谈谈-Naur Form语法。它对于我们理解基本原理非常有用。
它本质上是一种消除歧义的人类语言,然后由解释器翻译给计算机。
巴科斯范式注释方法,由约翰发明。
约翰是 20 世纪 50 年代 IBM 的首席语言设计师。
它是最早被广泛使用的编程语言之一。他们描述该语言的方式是使用大量的例子和文本来解释它。
这是用户手册第一版的截图:
这种方法效果很好,很多程序员都能理解并猜出正确的含义,但还远远不够准确。
后来,在设计一种名为ALGOL的新语言时,这种非形式化描述方法的缺乏精确性的缺陷逐渐显现出来。
于是 John 发明了我们现在在编程语言中使用的注释方法,就是在注释后面加上“#”。计算机会忽略“#”,但人类不会。
-Naur 范式的目的是以简洁、凝练的方式准确描述语言。
这个文法的表达就像左边的非终结符号,非终结符号的意思是还没有结束,和“,”含义相同。
所有蓝色字符都是非终结字符。有时它们被括在方括号 [ ] 中。
我们用蓝色表示非终结符,箭头指向右侧,可替换的单词是 ()。这可以是任何东西,也可以是非终结符序列。
这与句子中的主语、谓语和宾语相同。
图中所有黑色字符代表终止符,与“ ”含义相同。
终结符不能放在左边,遇到终结符就必须停下,不能用别的东西代替。
所有语法都是这种形式。我们可以开始用一些非终结符来写句子,通常从左上角开始。然后我们可以随意替换这些非终结符,直到遇到终结符。
举一个符合语法的句子的例子,我们从句子开始,只要从左边找到适当的词性来组成句子,并且要替换句子中的主语、谓语和宾语。
现在我们有很多选择,我们可以使用任意非终端,从左边的非终端中找到合适的词性,并且我们可以选择左边的任意词性作为替换。
让我从左边开始,我们将选择主题,例如“你、我、他”。
此外,我们还需要动词和宾语。动词可以是“喜欢、不喜欢、讨厌”。
宾语可以以名词结尾,例如“,家庭作业”。
我们在这里所做的称为派生()。
派生是指从非终结符开始,按照词类建立起来。当只剩下终结符时,我们就完成了,并且已经用语法形成了一个句子。
这里我们的句子是“我爱”,我们可以造出更多的句子,从非终端符号开始,用不同的词性替换它们。
替换语法的重要之处在于我们可以用它们来创建非常大的语言;事实上,一些简单的规则就可以描述一种无限大的语言。
这种语言的规则很少,但我们很快就了解到,即使只使用少量的规则,我们也可以创建非常精确和庞大的语言来描述和表达事物。
只需替换这些规则,我们就可以创建许多计算机编程语言。
因此,其语法比大多数自然语言的语法更为严格。
在日常生活中,如果我说一些模棱两可的话,例如“你吃饭了吗?”另一个中文使用者可能会嘲笑我,但他们能明白我的意思。
在 中,代码必须严格符合语法。
接下来我们来学习算术表达式(for)的语法。
+-:
*: 乘法
/: 除法
%: 取余(取模)
//:取整
**: 取幂
+=:复合赋值运算符 如a += 1 #等价于 a = a + 1
> < >= <= == !=:关系(比较,条件,判断)运算符
判断语句三种格式:
1.基本格式:
2.if...else...格式
3.if...elif...else...语句格式
我们不会在这里教授完整的语法,但是算术表达式的例子足以理解表达式()的概念以及它们为什么合法。
首先,表达式有自己的值。我们从一个非终结符表达式开始,然后使用运算符将两个表达式组合起来得到一个表达式:
这跟我们表达中把主语、谓语、宾语组合成一个句子的规则有点类似。
这里的语法有点意思,因为左边和右边都有表达式,看起来有点循环,但是因为我们有其他规则,所以它不是一个完整的循环。在计算机语言中,这称为递归()。
我们将在下一篇文章(可能是第六篇文章)中进一步讨论这个问题,但现在我们先来看看如何使用递归来构造语法。要构造一个合格的递归,我们至少需要两个规则:
表达式A可以用一个数字来代替,也就是用1来代替,然后运算符用加号+来代替,另一个表达式也用数字1来代替。所以这就是为什么我们可以创建1+1这样的表达式。
让我们写一些规则来看看它是如何工作的。我们可以用加号 + 或乘号 * 替换运算符:
中还有其他几个运算符,但目前这两个就足够了。我们还可以指定数字。数字的完整规则更复杂,但现在我们假设这些数字是已知的。我们可以指定具有不同数字的数字,尽管指定这些数字的规则不同,但我们知道这些数字是什么:
这看上去是个很简单的语法,虽然很短,却能表达无穷无尽的内容——原因就在于两边都有表达式。我们可以用一个派生表达式来替换另一个表达式,并且可以重复这个过程。下面是一个派生的例子。我们从一个表达式开始:
根据规则,用表达式()、运算符()、表达式() 替换它。然后,我们再次使用规则,将第一个表达式替换为数字,然后将数字替换为实际数字 1。我们注意到实际数字是一个终结符,因此一旦数字出现,我们的任务就完成了,不需要再进行替换。接下来,我们可以用 + 加号替换运算符,它也是一个终结符。然后我们用数字替换下一个表达式,然后将数字替换为实际数字 1,这就是我们通过语法生成 1 + 1 的方式。这个表达式是有效的。
我们可以用这个表达式替换第一个表达式,使它变得更加复杂:
而不是直接用数字代替。这里我们使用第一条规则,用表达式+运算符+表达式代替表达式。下面我将使用缩写 Expr,它是表达式的缩写。使用 Op,它是运算符的缩写,然后使用 Expr。我们仍然使用这个规则。
现在我们像之前一样把表达式替换成数字,再把数字替换成实际的数字 2。我们可以把这里的运算符替换成乘法运算符 *,然后我们可以把后面的表达式替换成数字,或者替换成表达式 + 运算符 + 表达式的形式。这样,我们可以一步一步地把这个表达式写得越来越复杂,一直重复,直到所有元素都变成终结符。我省略了一些步骤,这里可以是 3 + 3。这就是如何用非常简单的规则构造复杂的表达式。
接下来,我将为我们的语法添加一条规则,以便我们的语法足以生成迄今为止我们使用的所有表达式。我们需要的规则是使用括号 ()
表达式(表达式)
这其实是一个非常简单的规则。这意味着我们可以取一个已知的表达式,并将其括在括号中,以创建一个新的表达式。
这是一个简短的语法,但实际上它足够强大,可以生成我们迄今为止看到的所有表达式。
还有许多不同类型的表达式,我们无法通过这种方式全部涵盖它们,但这可以让您了解以这种方式编写语法的强大功能。
这项工作是查找并创建一个你内部的文件。
在文件中输入:
print('我'+'喜欢'+'python')
print(2*2+(7+8))
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。