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


    感想:

    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  

     

  • 相关阅读:
    JDK8中的 Lambda 表达式
    IDEA导入新项目jar包以及项目依赖tomcat设置
    idea导入项目,类为灰色,左下角有个红圈
    mysql服务忽然挂了,出现错误信息: Can’t connect to MySQL server on ‘localhost’ (10061)
    mysql、oracle、sql server连接信息
    mybatis中select * 中有字段,自己在起一个别名,然后实体类会使用哪个?
    pymongo的操作
    mongodb备份恢复
    mongodb建立索引
    mongodb聚合命令
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/11342810.html
Copyright © 2020-2023  润新知