像计算机科学家一样思考python-第1章 程序之道

1.7调试

  程序是很容易出错的。因为某种古怪的原因,程序错误被称为bug,而查捕bug的过程称为调试(debugging)。

 

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

 

  编程,特别是调试,有时候会引发强烈的情绪。如果你挣扎于一个困难的bug,可能会感到愤怒、沮丧以及窘迫。

 

  有证据表明,人们会像对待人一样对待电脑。当电脑良好完成工作时,我们会把它们当作队友,而当他们难以控制、粗暴无礼的时候,我们会按照对待那些粗暴固执的人一样对待它们。

 

  对这些反应行为有所准备,可能会帮助你更好地对待电脑。一种方法是把它当作你的雇员,它有一定的长处,如速度和精度,也有特定的弱点,如没有同情心和无法顾全大局。

 

  你的任务是做一好经理:设法扬长避短,并找到方法控制你的情绪去面对问题,而不是让你的反应影响工作效率。

 

  学习调试可能会带来挫折感,但它是一个有价值的技能,并在编程之外还有很多用途。

1.9练习

  在计算机前阅读本书是一个好主意,因为你可以边看边试验书中的示例。

 

  每当你试验新的语言特性时,应当试着故意犯错。例如,在”hello,world”程序中,如果少写一个引号,会发生什么?如果两个引号都不写,会怎么样?如果把print拼写错了,会如何?

 

  这种试验会帮你记住所读的内容,也能帮你学会调试,因为这样能看到不同的出错消息代表着什么。现在故意犯错总比今后在编码中意外出错好


少写1个引号:

1 In [1]: print("hello world)                                                     
2   File "<ipython-input-1-1ec64a806ae8>", line 1
3     print("hello world)
4                        ^
5 SyntaxError: EOL while scanning string literal

两个引号都不写

1 In [2]: print(hello world)                                                      
2   File "<ipython-input-2-6135c6da936c>", line 1
3     print(hello world)
4                     ^
5 SyntaxError: invalid syntax

print拼写错了

In [3]: printt("hello world")                                                   
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-3-98dec9cc814c> in <module>
----> 1 printt("hello world")

NameError: name 'printt' is not defined


练习11

1.print语句中,如果漏掉一个括号,或者两个都漏掉,会发生什么?

猜测:会发生语法错误--猜错了

实际结果:

漏掉一个括号:

程序会认为输入没有结束


漏掉两个括号:

语法错误,并给出正确输入提示



2.如果正尝试打印一个字符串,那么若漏掉一个或所有的引号,会发生什么?

漏掉1个引号:语法错误


In [11]: print("hello)

File "<ipython-input-11-2fadf01e7f7a>", line 1

print("hello)

^

SyntaxError: EOL while scanning string literal


漏掉所有的引号:

程序把hello当作是一个变量名,但是这个变量事先没有定义,所以会报nameError

In [12]: print(hello)

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

NameError Traceback (most recent call last)

<ipython-input-12-1cd80308eb4c> in <module>

----> 1 print(hello)


NameError: name 'hello' is not defined

3.可以使用一个负号来表示负数,如-2。如果在数字之前放一个正号,会发生什么?如果是2++2呢?

放一个正号:

In [14]: +2

Out[14]: 2


2++2

进行了加法计算,但无论中间放几个+号,都视作1+

In [16]: 2++2

Out[16]: 4

 #论中间放几个+号,都视作1个+
In [18]: 2++++++2

Out[18]: 4


4.在数学标记里,前置0是没有问题的,如02.Python中也这么做会发生什么?


In [19]: 02

File "<ipython-input-19-0908cbeb2fbd>", line 1

02

^

SyntaxError: invalid token

 #正确示例

In [20]: 2

Out[20]: 2

5.如果在两个值之间不放任任何操作符,会发生什么?


In [21]: 2 3

File "<ipython-input-21-4142a0c1dd52>", line 1

2 3

^

SyntaxError: invalid syntax


#正确示例

In [22]: 23

Out[22]: 23

练习12

启动python解释器,把它当作计算器使用

1.4242秒中,一共有多少秒?


In [23]: 42*60+42

Out[23]: 2562


2.10千米相当于多少英里?提示:1英里相当于1.61千米

In [31]: 10/1.61

Out[31]: 6.211180124223602


3.如果你用4242秒跑完10千米,那么你的平均速度(跑1千米需要的分钟和秒数)是多少?平均速度是多少千米每小时?



计算公式:

1千米=1000


时间=距离/速度

速度=距离/时间

距离=距离*时间


首先4242秒是2562

42.7

约等于0.71小时


每分钟的平均速度是:0.23

In [36]: 10/42.7

Out[36]: 0.23419203747072598

1千米需要的分钟是:


1千米需要的秒数:


平均速度是多少千米每小时?(以小时为单位)


数学计算头疼-晕~! 也许我先在纸上把公式写下来,然后把数字往公式中套会容易的多



 

原文地址:https://www.cnblogs.com/kaerxifa/p/11335859.html