python表达式的正确表达_Python编程第二课 基础语法篇:初探Python表达式 上篇

开始我们先思考这样一个问题:

我们现在编写的程序,如果用语言说出来的话会有多少句?

一个程序,使用几行Python代码就可以精确的描述,它是如何做到的?

为了学习编程,我们需要学习新的语言,一门计算机能懂的语言。它比我们平时说话表达,会更加精准,并且这种计算机语言会用Python解释器翻译给计算机听,让计算机为我们工作。

假想一下,你现在根本不需要雇佣任何人,把你的指令告诉计算机,连上网,它就能无休止的为你工作,再配合现在很多人工智能工具,你就相当于零成本雇佣了一大批24小时不休息的员工。

这也是这两年为什么python那么火的原因。投入一些时间来学习,太太值得了。

虽然你目前还不知道怎么让这些机器为你工作,去链接更多的人和资源。

相信我,未来有一天你会知道的。

只是现在需要你懂一门和计算机交流的语言。我们从原理开始吧!

Python解释器(如Jupyter Notebook),只会翻译属于Python语言的代码,如果你尝试翻译不属于 Python语言的一些内容,就会产生错误。

每次输入的内容报错会让初学者有点沮丧,但是产生错误并没有坏处。再厉害的程序员写的代码也会产生错误。

写的每一句python报错,并且找到错误,调整修改,这就是学习编程的正确方式。

我们经常看到的错误称为语法错误(syntax error),这表示我们要翻译的内容不属于Python语言的一部分。

与中文的主谓宾类似,Python也有定义字符串的语法。

在我们说话表达的时候,我们可以造出很多语法上并非完全正确的句子,但别人仍然可以理解。

如:“不带就是没做!”

这句话,不用加任何背景,大家就知道这是老师对学生说的一句话。

这个句子背后隐含着很多信息。

有着相同成长背景的人可能都曾经有过没做作业撒谎说没带的经历。

而那些学习中文的老外,他们可能没有这些经历,但他们可以通过中国朋友的解释,学习到这个句子后面的背景信息。

我们上小学学习造句,就规定了造句规则,主语加上谓语动词,后面跟着宾语。

几乎所有语言都有类似的规则,主谓宾的顺序可能不同,但是都有将三者组合成一个句子的方法。

主语可以是名词,宾语也可以是名词。

我们可以使用很多不同的内容作为句子成分,所以动词可以使用 “吃” ,也可以使用 “喜欢”。

能够作为动词的词语还有很多,主语可以是名词 “我” ,也可以是 "Python",或者 “饼干”。

当然,语法实际上比这里讲的庞大且复杂得多,但是我们仍然可以理解为,一个词就是一种成分,再由这些成分拼接构成句子。

下面我们讲讲巴克斯范式语法。它对我们理解python基础原理非常有用。

python本质是一门消除歧义的人类语言,再由解释器翻译给计算机听。

巴克斯范式的注释法,由John Backus发明。

二十世纪五十年代,John Backus在IBM是Fortran语言的首席设计师。

Fortran是最早被广泛使用的编程语言之一,他们描述Fortran语言的方法是,使用大量的例子和文字进行解释。

这是首个 Fortran 版本的用户手册中的一张截图:

这种方法很有效,很多程序员能够理解并猜测出正确的含义。但离足够精确还有很大差距。

再后来在设计一种称为ALGOL的新语言的时候,这种非正式的描述方法不够精确的缺点逐渐凸显。

于是John Backus就发明了我们现在在编程语言里面加“#”这种注释法,加“#”的计算机会忽略,但是人类不会忽略。

巴科斯范式的目的是为了用一种简明而扼要的方式,来精确地描述语言。

这种语法的表达像左边这个非终止符,非终止符表示我们还没完成,就跟“,”含义一样。

所有蓝色的字符都是非终止符。有时候他们用方括号[ ]括起来的。

我们用蓝色来表示非终止符,一个箭头指向右边,右边就是可替换的词(replacement)。这个可以是任何东西,也可以是一系列非终止符。

这就和句子里面的主谓宾一样了。

图片里面所有黑色的字符代表终止符,和“。”含义一样。

终止符一定不能放在左边,遇到终止符我们就要停止,而且还不能用别的来替换。

所有的语法都是这个形式。我们可以用一些非终止符开始写句子,一般是从左上角开始。然后我们可以随意替换这些非终止符,直到遇到终止符。

举一个语法句子的例子,我们从句子开始,只要从左边找出合适的词类来组成句子,我们要用主语,谓语,宾语来替换句子。

现在我们有很多选择,我们可以用任何非终止符,从左边的非终止符中寻找合适的词类,我们可以选择左边的任何词类做替代。

让我从左边开始,我们先选择主语,如“你、我、他”。

此外我们还要有动词和宾语,动词可以用“喜欢、不喜欢、讨厌”。

宾语可以用名词结束,如“python、作业”。

我们这里所做的叫推导(Derivation)。

一个推导意味着从非终止符开始 按照词类来构成,当只剩终止符时,说明我们完成了,用语法构成了一个句子 。

这里我们的句子是“我爱 Python”,我们还可以造很多句,一样从非终止符开始,用不同的词类来替换。

替换语法的重要之处在于我们可以使用它创造一门大型语言,事实上,几个简单规则就可以描述一种无限大的语言。

这种语言规则很少,但是我们很快就知道,即使使用少量规则也能创造非常精确的大型语言来描述和表达。

仅仅通过替换这些规则,我们就可以创造出很多计算机编程语言。

所以Python的语法比大多数自然语言的语法更加严格。

在日常生活中,如果我讲了一句含义模糊的话,比如 “饭吃你了吗?” 另一个说中文的人可能会笑话我,但是他们可以理解我想表达什么。

在Python中,代码必须严格符合语法。

下面我们来学习一下Python中算术表达式(Python Grammar for Arithmetic Expressions)的相关语法。

1+-:

2*: 乘法

3/: 除法

4%: 取余(取模)

5//:取整

6**: 取幂

7+=:复合赋值运算符 如a += 1 #等价于 a = a + 1

8> < >= <= == !=:关系(比较,条件,判断)运算符

9判断语句三种格式:

10 1.基本格式:

11 2.if...else...格式

12 3.if...elif...else...语句格式

这里我们不会教Python的全部语法,但是对于理解表达式(Expression)这个概念,以及它为什么是合法的,python算术表达式这个例子已经足够了。

首先,表达式有自己的值。我们从一个非终止符表达式开始,我们可以用运算符把两个表达式结合起来得到一个表达式:

Expression → Expression Operator Expression

表达式 表达式 运算符 表达式

这与我们在表达中,把主谓宾结合成一个句子的规则有些类似。

这里的语法更有趣一些,因为在左右两侧都有表达式,这貌似有点循环,不过因为我们还有别的规则,所以并不是彻底的循环,计算机语言里被称作为递归(recursive definition)。

我们在后面的文章中,大概是第六篇文章,会进一步讨论,但是现在我们先来看一下,如何利用递归来构成Python的语法。要构建一个合格的递归,我们至少需要两条规则:

第一是继续运行的规则——把右边的内容指定给左边

第二是停止的规则——另一种可作为表达式的内容是数字

其中表达式A可以被替换成数字,这个数字又被替换成1,然后运算符被替换成加号+ ,另一个表达式也被替换成数字1。所以这就是为什么我们可以创建类似 1 +1 这样的表达式。

我们再写一些规则 看看它是如何工作的。我们既可以把运算符替换成加号+ ,也可以把运算符替换成乘号* :

Operator → +

Operator → *

Python中还有几种运算符,不过这两种对于目前来说足够了。我们还可以指定数字,对于数字的完整规则指定比较复杂,但是现在我们假设这些数字已知,我们可以指定不同位数的数字,尽管指定这些数字有不同的规则,但是我们知道这些数字是什么:

Number → 0,1,……

这看上去是一个非常简单的语法,虽然很短,却能表达无穷无尽的内容——原因就是两侧都有表达式,我们可以用一个衍生的表达式,来替换另一个表达式,并且可以这样不断重复下去。下面是一个衍生的例子,我们从表达式开始:

根据规则,把它替换成表达式(Expression),运算符(Operator),和表达式(Expression)。然后,我们再次使用规则,把第一个表达式替换成数字,然后把数字替换成实际的数字1。我们注意到实际的数字是一个终止符,所以 一旦出现数字,我们的任务就完成了,不需要进行更多的替换。接下来,我们可以把运算符替换成 + 加号,+ 加号也是一个终止符。然后我们把下一个表达式也替换成数字,然后再把数字替换成实际数字1,这就是我们通过 Python语法生成 1 + 1 的过程。这个表达式是有效的。

我们还能做得更复杂些,我们把第一个表达式替换成另一个:

表达式 + 运算符 + 表达式

而不是只替换成数字。这里我们使用了第一条规则,把表达式替换成表达式+ 运算符 +表达式。下面我将使用缩写Expr,这是表达式的缩写。使用Op,这是运算符的缩写,然后再用一个Expr。我们用的还是这条规则。

现在我们还是像刚才那样,把表达式替换成数字,然后再用实际数字2替换数字。我们可以把这里的运算符替换成乘法运算符*,然后可以把后一个表达式也替换成数字,或者,再替换成表达式 +运算符 +表达式的形式。就这样一步步把这个表达式写得更加复杂,我们可以一直重复下去,到所有元素最后都变成终止符。我省略了一些步骤,这里可以是3 + 3。这就是如何通过非常简单的规则来构造复杂的表达式。

下面我会在我们的Python语法中,增加一条规则,这样我们的语法就足够生成目前我们用到的全部表达式了。我们需要的这条规则是使用圆括号()

Expression → ( Expression )

表达式 ( 表达式 )

这实际上也是一个非常简单的规则,它所表达的是我们可以把一个已知的表达式,用圆括号括起来作为一个新表达式。

这是一个很短的语法,但实际上它已经强大到足够生成目前我们所见过的所有Python表达式了。

同样还有非常多的不同的各种表达式,我们用这种方式无法涵盖所有的Python语法,但是这会使你理解这样书写语法的强大之处。

作业就是在你anaconda里面找到Jupyter Notebook,并且创建一个python文件。

在python文件里,输入:

1print('我'+'喜欢'+'python')

2print(2*2+(7+8))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值