zoukankan      html  css  js  c++  java
  • 像计算机科学家一样思考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千米需要的秒数:


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


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



     

  • 相关阅读:
    Adding a prefix header to an iOS project
    DZ论坛常见基本设置问题
    DZ论坛如何去掉“今日”“昨日”发帖数显示?
    Discuz源码
    怎样使Firefox的新建标签页为空白页
    discuz论坛
    TK域名首次注册教程(咸干花生)
    氪星年货 #1:那些来自大牛的真知灼见
    慢性子
    life and penis
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/11335859.html
Copyright © 2011-2022 走看看