感想:

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

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

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

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

In []: n = 

In []: 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呢?
 In []: =n

 File "<ipython-input-4-7a69874ac013>", line 

 =n

 ^

 SyntaxError: can't assign to literal
  • 那么x=y=1呢

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

    ;作为连接符

 In []: a=;b=

 In []: a

 Out[]: 

 In []: b

 Out[]: 
  • 如果在语句结尾放的是句号呢?
 In []: a=.b=

 File "<ipython-input-11-00f212b8143d>", line 

 a=.b=

 ^

 SyntaxError: invalid syntax

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

 In []: a=;

 In []: a

 Out[]: 

 #值是整型
In []: a=. In []: a Out[]: 1.0

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

 #值是字符型
In []: x*y
Out[]: In []: a="bb".
File "<ipython-input-19-35d6cdca8521>", line
a="bb".
^
SyntaxError: invalid syntax #值是浮点型
In []: a = 1.9.
File "<ipython-input-20-d03258cd8a31>", line
a = 1.9.
^
SyntaxError: invalid syntax
  • 在数学标记中,对于x乖以y,可以这么表达:xy。
    在Python中这样尝试会有什么结果?
 In []: x=;y=

 In []: xy

 ---------------------------------------------------------------------------

 NameError Traceback (most recent call last)

 <ipython-input--f3603995b6f3> in <module>

 ---->  xy

 NameError: name 'xy' is not defined

 #正确示例

 In []: x*y

 Out[]: 

最新文章

  1. Swift 2.2发布
  2. NYOJ题目809摸底
  3. [Java] java.util.Arrays 中使用的 sort 采用的算法 (转)
  4. 严格遵守“第一级DOM”能够让你避免与兼容性有关的任何问题
  5. flst与fitem命令是这么用的
  6. WordPress 去除图片img标签的高度与宽度
  7. 【不积跬步,无以致千里】Linux下启动Oracle服务和监听程序
  8. 模拟实现C库的atoi、atof和itoa
  9. RT5350的uvc驱动支持yuv格式摄像头成功
  10. 从数据恢复角度解析RAID6结构原理
  11. Vim和Neovim安装YouCompleteMe
  12. Linux yum源
  13. CCPC-Wannafly Winter Camp Day4 Div1 - 置置置换 - [DP]
  14. ab压力测试工具的使用
  15. [openjudge-搜索]广度优先搜索之鸣人和佐助
  16. cxgrid强大用法
  17. Python之并发编程-concurrent
  18. gym 100531 三维几何+搜索
  19. php5.6安装gd库
  20. HDOJ(HDU).1015 Safecracker (DFS)

热门文章

  1. node.js—创建、删除、追加文件等方法汇总
  2. [Python3 填坑] 006 “杠零”,空字符的使用
  3. [19/05/17-星期五] HTML_body标签(内嵌标签)和框架标签
  4. instanceof和getClass的区别
  5. IIS环境下PHP版本过低无法Sql查询的解决
  6. jQuery中$.get()和$.post()的异同点
  7. Spark2.0集成Hive操作的相关配置与注意事项
  8. 2019-3-9-通过-frp-开启服务器打开本地的-ZeroNet-服务器外网访问
  9. Linux系统启动过程浅析
  10. Jmeter接口测试---加解密