1.7调试

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

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

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

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

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

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

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

1.9练习

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

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

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

少写1个引号:

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

两个引号都不写

 In [2]: print(hello world)
File "<ipython-input-2-6135c6da936c>", line 1
print(hello world)
^
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

练习1-1

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.在42分42秒中,一共有多少秒?

In [23]: 42*60+42

Out[23]: 2562

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

In [31]: 10/1.61

Out[31]: 6.211180124223602

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

计算公式:

1千米=1000米

时间=距离/速度

速度=距离/时间

距离=距离*时间

首先42分42秒是2562秒

是42.7分

约等于0.71小时

每分钟的平均速度是:0.23

In [36]: 10/42.7

Out[36]:
0.23419203747072598

跑1千米需要的分钟是:

跑1千米需要的秒数:

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

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

像计算机科学家一样思考python-第1章 程序之道的更多相关文章

  1. 像计算机科学家一样思考Python(第2版)|百度网盘免费下载|Python新手入门资料

    像计算机科学家一样思考Python(第2版)|百度网盘免费下载 提取码:01ou 内容简介  · · · · · · 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程.贯穿全书的主 ...

  2. 像计算机科学家一样思考python-第4章 案例研究:接口设计

    系统环境 ubuntu18 4.1turtle模块 模块一开始导入turtle模块就报错了 Python ( , ::) [GCC ] on linux Type "help", ...

  3. 像计算机科学家一样思考python-第3章 函数

    在程序设计中,函数是指用于进行某种计算的一系列语句的有名称的组合.定义一个函数时,需要指定函数的名称并写下一系列程序语句.之后,就可以使用名称来“调用”这个函数 3.1函数调用 一个函数调用的例子 & ...

  4. 《像计算机科学家一样思考Python》-递归

    斐波那契数列 使用递归定义的最常见数学函数是 fibonacci (斐波那契数列),见其 定义 fibonacci(0) = 0 fibonacci(1) = 1 fibonacci(n) = fib ...

  5. 读《像计算机科学家一样思考python》——笔记

    这本书,完全是入门级的,特别简单,一天多就看完. 目录: 第二章 变量.表达式和语句 第三章: 函数调用 第四章: 案例研究:接口设计 第五章 条件与递归 第六章:有返回值的函数 第七章 迭代 第八章 ...

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

    感想: 1.程序出现语义错误时,画状态图是一个很好的调试办法.打印出关键变量在不同代码处理后值的变化,就能发现问题的蛛丝马迹. 2.每当学习新语言特性时,都应当在交互模式中进行尝试,并故意犯下错误,看 ...

  7. 《像计算机科学家一样思考Java》—— 读后总结

    本书属于入门级的Java书籍,与其他的向编程思想.核心技术不同的是,这本书不是按部就班的讲解java变成知识,而是随着语言的深入慢慢增加知识点. 这本书以一个语言开发者的角度,深入浅出的讲解了Java ...

  8. python第五章程序练习题

    5.2 def isOdd(a): if a%2!=0: return True else: a=eval(input()) print(isOdd(a)) 5.3 def isNum(x): try ...

  9. 一文总结数据科学家常用的Python库(下)

    用于建模的Python库 我们已经到达了本文最受期待的部分 - 构建模型!这就是我们大多数人首先进入数据科学领域的原因,不是吗? 让我们通过这三个Python库探索模型构建. Scikit-learn ...

随机推荐

  1. python 操作ssh登录

    import paramiko #创建SSH对象 ssh = paramiko.SSHClient() #把要连接的机器添加到known_hosts文件中 ssh.set_missing_host_k ...

  2. Redis--小小总结

    1.基本定义 memcached是纯粹的key-value内存数据库,也可能不应该叫数据库,应该叫另类缓存技术: Redis是一个基于内存的高性能key-value数据库:将数据全部加载到内存中,并定 ...

  3. 什么是 Java 对象深拷贝?面试必问!

    点击上方蓝色链接,关注并"设为星标" Java干货,每天及时推送 介绍 在Java语言里,当我们需要拷贝一个对象时,有两种类型的拷贝:浅拷贝与深拷贝. 浅拷贝只是拷贝了源对象的地址 ...

  4. 【洛谷p1981】表达式求值

    题前废话: 咱也不知道咱写了个什么神奇的代码导致_rqy都看不明白它是怎么re掉的, 代码的大致思路是这样的:对于这样一个中缀表达式,先转化成它的后缀表达式的形式,然后利用P1449 后缀表达式 这道 ...

  5. Neo4j 不区分大小写的模糊查询匹配

    问题:当图数据库中存储的节点的名字为英文时,就会遇到大小写不匹配问题. 使用不区分大小写的正则表示式可以解决以上问题. Cpyher的where语法里支持正则表达式 ,其语法为 :   =~ &quo ...

  6. ES6——面向对象-基础

    面向对象原来写法 类和构造函数一样 属性和方法分开写的 // 老版本 function User(name, pass) { this.name = name this.pass = pass } U ...

  7. android中两个不同名称的app不能同时安装

    ---恢复内容开始--- 两个app,第一个安装后,再安装第二个,会提示安装包损坏或者一切其他问题,但是这个安装包在别的手机可以正常安装,可以是因为以下问题 两个app中,包含有相同名称的provid ...

  8. left join on and和left join on where条件的困惑[转]

    外连接:left join(左联接) left outer join 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) right outer join返回包括右表中的 ...

  9. 在数据库中分析sql执行性能

    SET STATISTICS PROFILE ON SET STATISTICS IO ON SET STATISTICS TIME ON GO /*--SQL脚本开始*/ SELECT * FROM ...

  10. Oracle11gR2 64bit+Oracle11gR2Client32bit+pl/sql 9

    安装Oracle数据库,费了老一番折腾准备软件:1. Oracle 11g R2 64bit2. Oracle 11g R2 Client 32bit3. PLSQL Developer V9 逐个安 ...