---恢复内容开始---
1、IPO结构
一个程序的最基本,也是最重要的结构,便是IPO结构。它由
Input→Process→Output
三个流程组成。一切的人机交互程序,都是自输入开始,输出为止。
2、对象的基本类型
什么叫做对象的基本类型?作为“面向对象”的语言,Python所有的数据都是一个个的对象。而一个对象应该具有三个东西:
一个身份、一个类型和一个值
因此,我们先从类型来理清楚,python中有哪些类型的对象来组成我们的程序。
数字:int,float,complex,bool
序列:str,list,tuple
集合:set
映射:dict
2.1 帮助函数
字符串对象应该是我们平时最为常见的对象之一。字符串对象在《达人迷》中被形象的称为“文字常量”,即一个想用就用,呼之即来的常量。但是身为一个常量,它是不可修改的。每一个常量在Python中都有一个固定储存的地址。我们可以通过以下指令来获取常量的地址:
1 #id()的使用
2 >>> id("Hello Python")3 2953861085040
类似的,当我们并不清楚一个对象的类型时,我们可以对这些对象进行“查水表”。
我喜欢叫这些帮助我们查询获取各种信息的函数叫做“帮助函数”。常用的帮助函数有:
dir( )、help( )、type( )、id( )
1 >>>dir(math)2 ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']3 >>>help(math.sin)4 Help on built-in function sin in module math:5 sin(x, /)6 Return the sine of x (measured in radians).7 >>>id(math)8 2953858855064
9 >>> type(2)10
11 >>>type(int)12
图:PYTHON语言的数据类型
那么,就从对象类型的分类开始吧!我们先来谈谈有哪些种类。
2.2 数字类型 Numbers
数学中,我们通常称为一个数域它是属于复数域的。但是在Python中,复数域和浮点数被区分的明明白白。
准确的说,实数中包含了整数与含有小数点的数(注意,含有小数点即为浮点数),故int和float属于实数类型。而复数用单独的complex(实数,虚数)来表示,注意它在计算时会自动给你加上i,所以描写成complex(1,2i)的形式是函数错误的使用方式。
布尔值只含有0或1,即false和true。这个在我的世界红石系统里面,用红石的开与关可以模拟布尔值。
2.3 序列类型 Sequences
序列分为三类:字符串、元组和列表。元组是我最为陌生的一个称呼,所以我百度了元组的由来。
——“元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。”
通俗的来讲,假如这里有一个表格:
那么,(1,小刘)就是这张表格中的元组之一。ID1,对应着小刘,即表示了两个变量之间的对应关系。可是,如果这个表是三维的呢?我们不难想象,对于三维表格,假如我们固定其中的一个变量,那么剩下的表格就是相对于三位表格的元组。
序列的可修改性
人们通常认为我们是电脑的使用者,便能自由的控制序列该填入那些东西。是的,作为程序设计者,当然可以自由的修改序列,但对于程序的使用者来说呢?
因此,设计一个不可修改的序列是有必要的。为了防止程序被使用者有意无意地修改其中的数据,从而导致程序功能异常,序列是有其可修改性的。通过观察上一张图片,我们不难知道目前我们唯一可修改的序列叫做List。List,中文名又叫“列表”,是所有序列想要修改的必经之处。假如我们想要修改字符串和元组,那么我们就可以巧妙地将他们转化为序列,然后通过修改序列的方式间接修改字符串和元组。
但是,当字符串使用如上操作时,会出现意想不到的bug。
1 >>> str_="I love this doctor!"
2 >>>list(str_)3 ['I', ' ', 'l', 'o', 'v', 'e', ' ', 't', 'h', 'i', 's', ' ', 'd', 'o', 'c', 't', 'o', 'r', '!']4 >>>str_5 'I love this doctor!' #这段代码说明,仅仅使用list()函数而不赋值是不会修改原对象的类型的
6 >>> str_=list(str_)7 >>>str_8 ['I', ' ', 'l', 'o', 'v', 'e', ' ', 't', 'h', 'i', 's', ' ', 'd', 'o', 'c', 't', 'o', 'r', '!']9 >>>str(str_)10 "['I', ' ', 'l', 'o', 'v', 'e', ' ', 't', 'h', 'i', 's', ' ', 'd', 'o', 'c', 't', 'o', 'r', '!']"
11 #发现了吗?原本想要输出'I love this doctor!' ,实际上却输出了"['I', ' ', 'l', 'o', 'v', 'e', ' ', 't', 'h', 'i', 's', ' ', 'd', 'o', 'c', 't', 'o', 'r', '!']" 。
这个故事告诉我们,不要想当然地面对一切事物。只有通过实践才能出真知,一切联想和类比都只能是猜测。
那么,究竟用什么办法才能输出它原本对应的字符串呢?
我们下回分解!