像计算机科学家一样思考python-第2章 变量、表达式和语句

为君一笑 提交于 2019-11-27 03:48:54

感想:

1.程序出现语义错误时,画状态图是一个很好的调试办法。打印出关键变量在不同代码处理后值的变化,就能发现问题的蛛丝马迹。

2.每当学习新语言特性时,都应当在交互模式中进行尝试,并故意犯下错误,看会有哪些问题--这是很好的学习思路。这样子学习不但能对知识掌握的更扎实,还让学习变得充满乐趣,像是一种游戏一样。

 

 

  赋值语句可以建立新的变量,并给它们赋值


In [1]: message = 'And now for somthing completely different'


In [2]: n = 17


In [3]: pi = 3.1415926535897932 

 

  这个例子有3个赋值。第一个将一个字符串赋给叫做message的变量; 第个将17赋值给n,第三个将π的(近似)值赋给变量pi


  在纸上表达变量的一个常见方式是写下名称,将用箭头指向其值。这种图称为状态图,因为它显示了每个变量所在的状态(请将它看作变量的心理状态)。下图显示了前面例子的状态图。

 




2.8调试

一个程序中可能出现3种错误:语法错误、运行时错误和语义错误。对它们加以区分,可以更快的找到错误。


语法错误

  语法指的是程序的结构以及此结构的规则。例如,括号必须前后匹配,所以(1+2)是合法的,而8)就是一个语法错误。


  程序中只要出现一处语法错误,Python就会显示出错消息并退出,你的程序就无法运行了。在编程生涯的最初几周中,可能会需要花费大量时间来查找语法错误。但随着经验的增加,犯错会越来越少,查找起来也会越来越快。


运行时错误

  第二类错误是运行时错误,这样称呼是因为这种错误只有程序运行后才会出现。这些错误也被称为异常(exception),因为它们常常表示某些异常的(而且不好的)事情发生了。


  运行时错误在开头几章的简单示例里很少会出现,所以可能要过一段时间你才会遇到。


语义错误

  第三类错误是语义错误,意思是错误与含义有关。如果你的程序中有一个语义错误,程序仍会成功运行,而不会产生任何出错消息,但是它不会执行正确的逻辑。它会做其它的事情。特别需要注意的是,它所做的正是你的代码所告诉它的。


  查找语义错误会比较麻烦,因为需要反向查找,查看程序输出并尝试弄明白它到底做了什么。

 

2.9术语表

  变量(variable):引用一个值的名字。

  赋值语句(assignment statement):将一个值赋值给变量的语句。

  状态图(state diagram):用来展示一些变量以及其值的图示。--调试的好帮手

  关键字(keyword):编译器或解释器保留的词,用于解析程序;变量名不能使用关键字,如if,def,while等。

  操作数(operand):操作符所操作的值

  表达式(expression):变量、操作符和值的组合,可以表示一个单独的结果值。

  求值(evaluate):对表达式按照操作的顺序进行计算,求得其结果值。

  语句(statement):表示一个命令或动作的一段代码。至今我们见过赋值语句和打印语句。

  执行(execute):运行一条语句,看它说的是什么

  交互模式(interactive mode):使用Python解释器的一种方式,从脚本中读入代码并运行它。

  脚本(script):保存在文件中的程序

  操作顺序(order of operations):当表达式中有多个操作符和操作对象要求值时,用于指导求值顺序的规则。

  拼接(concatenate):将两个操作数首尾相联。

  注释(comment):代码中附加的注解信息,用于帮助其他程序员阅读代码,并不影响程序的运行。

  语法错误(syntax error):程序中的一种错误,导致它无法进行语法解析(因此也无法被解释器执行)

  异常(exception):程序运行中发现的错误

  语义(semantics):程序表达的含义。

  语义错误(semantic error):程序中的一种错误,导致程序所做的事情不是程序员设想的。



2.10练习

  重申上一章的建议,每当你学习新语言特性时,都应当在交互模式中进行尝试,并故意犯下错误,看会有哪些问题


  • 我们已经见过n=42是合法的。那么42=n呢?
1 In [4]: 43=n
2 
3 File "<ipython-input-4-7a69874ac013>", line 1
4 
5 43=n
6 
7 ^
8 
9 SyntaxError: can't assign to literal

 

  • 那么x=y=1
     1 In [5]: x=y=1
     2 
     3 
     4 In [6]: x
     5 
     6 Out[6]: 1
     7 
     8 
     9 In [7]: y
    10 
    11 Out[7]: 1

     

  • 有些语言中,每个语句都需要以分号(;)结尾。如果你在Python语句的结尾放一个分号,会有什么情况?

    ;作为连接符

 

 1 In [8]: a=1;b=2
 2 
 3 
 4 In [9]: a
 5 
 6 Out[9]: 1
 7 
 8 
 9 In [10]: b
10 
11 Out[10]: 2

 

  • 如果在语句结尾放的是句号呢?
1 In [11]: a=3.b=2
2 
3 File "<ipython-input-11-00f212b8143d>", line 1
4 
5 a=3.b=2
6 
7 ^
8 
9 SyntaxError: invalid syntax

 


其它情况。.放在赋值语句后面,且值是整数,则Python认为你输入的是浮点型数据(小数)

 

 1 In [12]: a=1;
 2 
 3 
 4 In [13]: a
 5 
 6 Out[13]: 1
 7 
 8 #值是整型
 9 In [14]: a=1.
10 
11 
12 In [15]: a
13 
14 Out[15]: 1.0

 

如果.是放在赋值语句后面,且值是非整数,就会报错

 1 #值是字符型
 2 In [18]: x*y                                                                    
 3 Out[18]: 2
 4 
 5 In [19]: a="bb".                                                                
 6   File "<ipython-input-19-35d6cdca8521>", line 1
 7     a="bb".
 8            ^
 9 SyntaxError: invalid syntax
10 
11 #值是浮点型
12 In [20]: a = 1.9.                                                               
13   File "<ipython-input-20-d03258cd8a31>", line 1
14     a = 1.9.
15             ^
16 SyntaxError: invalid syntax

 

 

  • 在数学标记中,对于x乖以y,可以这么表达:xy。 在Python中这样尝试会有什么结果?
 1 In [16]: x=1;y=2
 2 
 3 
 4 In [17]: xy
 5 
 6 ---------------------------------------------------------------------------
 7 
 8 NameError Traceback (most recent call last)
 9 
10 <ipython-input-17-f3603995b6f3> in <module>
11 
12 ----> 1 xy
13 
14 
15 NameError: name 'xy' is not defined
16 
17 #正确示例
18 
19 In [18]: x*y
20 
21 Out[18]: 2
22 
23  

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!