对象与实例,类型与方法*

  • 这都是什么鬼

到目前为止我们已经学习了好几种Python的数据类型,以及针对这些数据类型我们可以执行操作的方法。如果你看过别的Python教程,还会接触到对象、实例等一堆名词,头都是大的。这一节我们将对类型、类型的方法、实例、对象这些概念进行一个简单的区分,以方便后面的学习。

类型(class),也就是我们给大家介绍的各种数据类型。后期我们还可以自己创建新的类型。在Python中,我们可以用type()来查看一个值的类型:

>>> type(3)
<class 'int'>
>>> type(True)
<class 'bool'>

接着给大家介绍对象(object)…嗯…没毛病…之前提过一句,你在Python里面创建一个值(简单到一个整数3,复杂一点到一个列表[233, True, ‘hahahhahaha’]),Python实际是在你的电脑内存中取了一块儿,把这个值存起来。装着你创建的这个值的,就称为对象,我们可以把它理解为一个容器,一个“坑”。 对象把计算机到底是如何在内存里面创建了这个值这些复杂的过程隐藏起来,只把你需要的两件东西展现给你——对象里面装着的值和对象所属的类型。前一节我们说给变量赋值,实际上就是让变量指向某个特定对象的过程。

方法(method)则是每种类型所支持的操作。比如整数、浮点数可以你除以我,我除以你,因为数字类型支持除以这种方法,然鹅字符串就不能相除。

然后说实例(instance)。易与对象混淆,通过前面的讲解我们知道,对象是容器,里面的东西才是实例。

实例和类型的关系,在此举一例:

大学的时候,我去上语言学课,老师问:”同学们你们见过树吗?”大家都想,哇咧树谁没见过啊,窗外那不就是树嘛。老师看了一眼窗外说,那是白杨树,我问的是树。然后大家明白了,原来是个文字游戏。

实例和类型就是白杨树和树的关系。

例如我们有一个整数3,那实际上就是内存中创建了一个对象,这个对象的类型是整数,对象里面装着一个整数的实例3,这个对象支持和别的整数浮点数相加减乘除等一系列方法。

 

  • 变量不属于任何类型

变量不属于任何类型,变量本身只是个名字,变量当前指向的对象才有类型:

>>> a = 666
>>> type(a)
<class 'int'>
>>> a = 666.6
>>> type(a)
<class 'float'>

 

  • 类型的转换

我们看一个例子:

>>> True + 3.5
4.5

哟能耐啊,这也行?这称为Python对数据类型的隐性转换(implicit type conversion)。所谓隐性,就说Python内部自己做了这个处理,不用你干什么。在Python中,浮点数、整数、布尔值满足:布尔值⊂整数⊂浮点数(⊂是个包含于符号)。布尔值只有俩,True默认被转换为整数1,False则是整数0。一个整数能用浮点数形式表示,一个浮点数却没法用整数形式表示,因此整数包含于浮点数。这就进一步解释了本章第一节为什么运算中只要出现一个浮点数,运算结果就是浮点数———参与运算的整数被Python隐性转换了类型。

Python中,我们还能对数据类型做强制转换(explicit type conversion)。之前我们每介绍一种数据类型都注明它的英文是啥,有的有简写,这里就派上用场了:

搬运:整数int, 浮点数float,布尔值bool,字符串str,列表list,元组tuple。转换的方法是,在英文后面加上括号,括号内填被转换的对象,当然,转换必须符合逻辑,请大家自行实验数据类型之间的转化。在这里举两例看似符合逻辑的:

>>> int(3.4)
3
>>> int('3.4')
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in 
    int('3.4')
ValueError: invalid literal for int() with base 10: '3.4'

喵喵喵?这说的是个啥?Python中,浮点数可以用int()强制转化为整数,然鹅一个字符串的内容是浮点数,却不能直接用int()转换,没有为什么……我们可以用:

>>> int(float('3.4'))
3

接着:

>>> list(1, 2, 3, 4, 5)
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in 
    list(1, 2, 3, 4, 5)
TypeError: list() takes at most 1 argument (5 given)

喵喵喵?我又干嘛了?嗯哼,你发现了一个用我们现在学的知识还解决不了的问题。你会发现,所有的强制转换,如果你在括号里面填上超过1个对象,就会报这个错。不要着急,这是一个带星号的章节,继续往后学习,不时回来看看,你会有新的发现。

 

  • 本节练习

如果在Python中输入一下表达式,将会返回什么类型的对象?想想为什么

  1. False + True
  2. 233 * 666 ** 2.33
  3. 333 // 3 + 44 % 2
  4. 1 + 1 == 2 or 7 >= 7

看答案

>>> type(False+True)
<class 'int'>
>>> type(233 * 666 ** 2.33)
<class 'float'>
>>> type(333 // 3 + 44 % 2)
<class 'int'>
>>> type(1 + 1 == 2 or 7 >= 7)
<class 'bool'>

酱哦

 

如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~

字典与集合*

在这一章,我们最后介绍两种数据类型。

  • 字典(Dictionary)

之前我们讲了列表,我们知道,我们可以通过索引号来调取列表中特定的元素。现在假设我们要给一个学校的所有学生做一个收录——通过学生的学号调取学生的名字。学号通常都不是从0开始1,2,3,4这么往上走的,你比如我以前的学号就是54193775。那如果一个列表,索引要取到54193775这个列表岂不是需要有超过5千万个元素在里面?哪个学校会有5千多万学生?有的学校的学号还是0开头的呢,这怎么搞?

要是用户可以自定义列表里面每个元素的索引号就好了!Python为了解决这些问题,引入了字典这一概念,在字典中,我们可以储存多个对象,并给每个对象自己定义一个“索引号”:

>>> students_list = {
	'54193775':'OU Ge',
	'54193776':'OU Di',
	'54193777':'OU Ye'}

(注:为了看清,我在每个逗号后面另起一行)

我们观察,首先要定义一个列表,需要一对大括号{}。大括号内,可以存放多组数据,组与组之间用逗号隔开。每组数据中有一个键(key)和一个值(value),用冒号隔开。其中,冒号左侧的键(key)就是我们为每个值(value)自定义的索引。让我们试验一下:

>>> students_list['54193775']
'OU Ge'

厉害了,我们得到了Python字典的创建方法:
{ <键_1> : <值_1>, <键_2> : <值_2>, <键_3> : <值_3>, …………, <键_n> : <值_n> }

在Python中,字典和列表一样,是可变对象。不过,字典的键只能是不可变对象,例如我们前面用的字符串。而值可以是任意对象,例如,我们可以把学生姓名细化到姓和名分开,放入一个列表里面,再作为值收录:

>>> students_list = {
	'54193775':['Ge', 'OU'],
	'54193776':['Di', 'OU'],
	'54193777':['Ye', 'OU']}

 

  • 基础字典操作方法

由于字典是可变对象,我们可以用键来调取或者更改列表中的值:

>>> students_list = {'54193775' : 'OU Ge', '54193776' : 'OU Di', '54193777' : 'OU Ye'}
>>> students_list['54193775']
'OU Ge'
>>> students_list['54193775'] = 'Ge OU'
>>> students_list
{'54193775': 'Ge OU', '54193776': 'OU Di', '54193777': 'OU Ye'}

我们可以用len()查看字典长度,既字典中键和值有多少对:

>>> len(students_list)
3

我们可以用in判断特定键是否在字典中,注意这是判定键是否存在,不是判定值是否存在:

>>> '54193776' in students_list
True
>>> 'OU Di' in students_list
False

我们可以用values()和keys()来查看一个字典中所有的值或键:

>>> students_list.values()
dict_values(['Ge OU', 'OU Di', 'OU Ye'])
>>> students_list.keys()
dict_keys(['54193775', '54193776', '54193777'])

注意,查看的结果并不是一个列表,是特殊的称为字典键和字典值的数据类型,我们目前不需要对这两种类型做深入了解。

如果你想把所有的键或者值强制转换成一个列表,可以使用强制转化(下一节会讲到):

>>> list(students_list.values())
['Ge OU', 'OU Di', 'OU Ye']

 

  • 集合(set)

最后简单说一说集合:Python中的集合具有数学意义上的集合的所有属性,用来储存一组无序、不重复的不可变对象。定义方式为,在一对大括号内,将个元素用逗号隔开:

>>> num_set = {5, 2, 2, 6, 1}
>>> num_set
{1, 2, 5, 6}

我们发现,Python自动去除了重复的元素,并且集合的顺序和我们定义的顺序相比也发生了变化。

 

  • 基础集合操作方法

可以使用len()获得集合中元素个数,可以使用in判断特定元素是否在集合中:

 >>> len(num_set)
4
>>> 2 in num_set
True

Python中的集合支持数学意义上的包含、包含于、交集、并集等一系列操作,请自行复习包含、真包含等概念-.-

>>> num_1 = {1, 2}
>>> num_2 = {1, 2, 3}
>>> num_1 | num_2
{1, 2, 3}
>>> num_1 & num_2
{1, 2}
>>> num_1 | num_2 #并集
{1, 2, 3}
>>> num_1 & num_2 #交集
{1, 2}
>>> num_1 <= num_2 #num_1包含于num_2则为True,反之为False True
>>> num_1 < num_2 #num_1真包含于num_2则为True,反之为False

 


这些就是所有的字典和集合的操作方法了吗!No骚年!这些是常用的,想知道所有的字符串操作方法吗!在IDLE里面输入help(dict)、help(set)试试~

 

  • 本节练习

请建立一个字典,可以通过中文一周七天的说法查询到对应的英文单词。

看答案

>>> week = {'星期一' : 'Monday', '星期二' : 'Tuesday', '星期三' : 'Wednesday', '星期四' : 'Thursday', '星期五' : 'Friday', '星期六' : 'Saturday', '星期日' : 'Sunday',}
>>> week['星期一']
'Monday'
>>> week['星期四']
'Thursday'
>>> week['星期日']
'Sunday'

酱哦

变量与赋值

  • 变量与赋值

高中学代数的时候我们就接触过各种各样的变量,变量指的是一个抽象的,用来储存值,或者说储存数据的东西。例如我们常说令商品的单价是x,销量是y,x大于0的时候,它俩大致满足y=k/x(k>0)的关系。那x啊y啊k啊都是变量,我们可以赋予它们任意的值。在Python中,变量不仅可以指数字,也可以指向任意Python支持的数据类型(整数、浮点数、布尔值balabala)。举个非常简单的例子:

>>> x = 1
>>> x + 1
2

在这个例子中,我们把整数1这个值赋予了变量x,这个过程称为赋值,使用赋值号“=”。字母x,是这个变量的名字,称为变量名。只要你开心,你也可以把这个变量叫做haha:

>>> haha = 1
>>> haha + 1
2

我们可以在Python中创建任意的变量,赋予它任意的值。赋值的时候请注意,变量必须写在赋值号的左边,要赋的值写在右边。反过来是不行的,试试输入1=haha会怎样。

 

我们看下面的例子:

>>> haha = 1
>>> haha
1
>>> haha = haha + 1
>>> haha
2

前面我们提到过,在Python中要分清等号’==’和赋值号‘=’。如果从数学角度上讲,haha=haha+1是永远不成立的;而在Python中,系统会先计算赋值号右边的结果,然后赋值给赋值号左边的变量。因此我们看到,haha被重新赋予了整数2这个值,不再指向原先的整数1。

 

成功给变量赋值以后,我们就可以用这个变量的名字来调用其相关的操作方法了。例如,我将一个列表赋值给变量lst,然后直接用lst这个变量名进行列表的相关操作:

>>> lst=[1, 2, 3, 4]
>>> lst[1]
2
>>> lst * 2
[1, 2, 3, 4, 1, 2, 3, 4]
>>> len(lst)
4
>>> min(lst)
1

那么使用变量有什么好处呢?

一来是假如你有一个好长好长的列表,每输入一次都不能呼吸,那在实际写程序的时候,我们只要把这个列表写一次,赋值给一个变量,以后要用这个列表,调用这个变量即可。

二来一个优秀的程序中的变量名都是有意义的,可以让别的人读到变量的名字,就大致知道这个变量指的是什么东西。我们在选用变量名的时候,也要遵从这样的原则,力求程序“简明”。例如我想建立一个变量来储存数字相加的和,那么我把它命名为sum就比叫做haha简明。

 

  • 变量名命名规则

Python的变量名称,只能含有大写或小写的26个英文字母,下划线”_”,和数字0-9;且变量名不可以以数字开头。

例如你再开心,这也是不允许的:

>>> 233haha = 1
SyntaxError: invalid syntax

习惯上,Python的变量不会以大写字母开头,也不会全是大写字母,大写字母一般用来表示常量(例如圆周率π,用PI来表示)。虽然怎么取变量名是你的自由,但是好的变量名还是要遵从:简洁有意义这个原则。对于需要多个单词才能表达的名称,可以用下划线连接:my_num,或者用骆驼拼写法(camelCase):myNum。在同一个程序中,二者选其一不要混用。

另外,有一些名称是Python的内部命令,我们也不能用它们作为变量名,

Falsebreakelseifnotwhile
Noneclassexceptimportorwith
Truecontinuefinallyinpassyield
anddefforisraise
asdelfromlambdareturn
assertelifglobalnonlocaltry

不用背诵…你随便挑一个赋值试试会怎样


这一节中讲到的变量名命名规则,实际上只适用于Python3之前的版本。Python3之前的版本都采用ASCII编码(关于编码后面的章节会详细讲),也就是说他们只能识别26个英文字母。然鹅从Python3开始,编码换成了Unicode,这样一来实际上Python3已经可以识别很多其他语言的字符(中文、阿拉伯语等等)。也就是说:

>>> 哈哈 = 123
>>> 哈哈 + 1
124

也是可以运行的!
但是,当今绝大多数的程序、编程语言规范上依旧要求变量名只能是ASCII编码的英文字母组成。为了符合国际大流,本教程所有的变量名依然严格遵守这一节中提到的命名规则。

 

  • 本节练习

将整数666赋值给变量a,并用布尔表达式检验变量a是否等于整数666

看答案

>>> a = 666
>>> a == 666
True

酱哦

找到字符串’I love Python. Python makes me happy. Everyday I wake up and I start to learn Python. Python is soooo great!’中索引号为41,5,23,2,-36和45的字符,并按这个顺序将它们组合成一个新字符串。

看答案

>>> s='I love Python. Python makes me happy. Everyday I wake up and I start to learn Python. Python is soooo great!'
>>> s[41] + s[5] + s[23] + s[2] + s[-36] + s[45]
'really'

酱哦

 

如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~

列表与元组

  • 列表

我们常常做各种列表,神马购物清单啊,选课表啊等等。在Python中,我们可以把各种类型的数据(包括列表本身)有序地排列在一起,形成一个列表(list)。列表的表示方法是,在中括号内,把不同的元素用逗号隔开:

>>> [True, 1, 2.3, 'haha', 'haha', [7,8]]
[True, 1, 2.3, 'haha', 'haha', [7, 8]]

我们看到,在这个列表中,既有布尔值,还有整数、浮点数、字符串和另一个列表,并且,列表中可以有重复的元素出现。另外,列表可以是空的:[]。

 

  • 基础列表操作方法

列表有一些操作方法和前面讲的字符串是共通的,例如索引(记得索引是从0开始,不是1):

>>> [True, 1, 2.3, 'haha', 'haha', [7, 8]][0]
True
>>> [True, 1, 2.3, 'haha', 'haha', [7, 8]][5]
[7, 8]

列表长度(列表中的元素个数):

>>> len([True, 1, 2.3, 'haha', 'haha', [7, 8]])
6

加法与乘法:

>>> [1, 2] + [3]
[1, 2, 3]
>>> [1, 2] * 2
[1, 2, 1, 2]

针对元素都是数字的列表,我们还可以使用:

>>> min([1, 2.4, 3])
1
>>> max([1, 2.4, 3])
3
>>> sum([1, 2.4, 3])
6.4

关于列表还有很多高级操作方法,我们以后会接触。

 

  • 元组

在Python中,有一种和列表很相像的元素类型,称为元组(Tuple)。它也是将各种数据有序排列在一起,在小括号内,各元素用逗号隔开:

>>> (1, 2, 2, True)
(1, 2, 2, True)

元组也可以是空的:();要注意,如果定义只有一个元素的列表,我们可以写[1],但定义只有一个元素的元组,我们必须在这个元素后面加一个逗号:(1,),否则Python将把(1)识别为整数1。

元组支持我们上述的所有基础列表操作方法。那么你肯定就要问了,那么这二者有什么区别呢?区别在于,列表是可变对象,然鹅元组是不可变对象。

 

  • 初识可变对象与不可变对象

这是Python学习中比较难理解的一个问题(至少对我来说- -)。随着Python知识学习的越多,能理解的越到位。我在这个教程中准备把它分为几个阶段讲,现在这个阶段,我们先有个印象。

当你在Python里创建一个数据的时候,实际上Python是在计算机内存里面取了一小块,创建了这个数据。对于不可变对象来说,想要改变它,Python只能在内存别的地方再取一小块,按修改要求创建一个新的数据给你,没办法直接修改原先创建的那个数据。也就是说,改完以后,最开始创建的那个还在,还是没有改过的状态。我们讲的字符串、元组就是这一类型。

当然还有一类数据,Python可以直接按照你的要求,在原始创建数据时取得的那块内存上直接修改,这就是可变对象。我们讲的列表就是这一类型。

例如你有一个萝卜,你挖了个坑种下去,突然发现哎哟我想要西瓜!那你只能新挖一个坑种一个西瓜,原来的萝卜还在那里——这叫做不可变对象。有一天你从霍格沃兹毕业回来,对着萝卜一声大喝,吓得它直接变成了花生,坑还是萝卜坑但是萝卜变成了花生——这叫做可变对象。

 

  • 本节练习

创建一个Python列表,列表中应有三个元素,分别是三种动物名称。并说出各动物名称对应的列表索引号。

看答案

>>> ['狒狒', 'cat', 'いぬ']
['狒狒', 'cat', 'いぬ'] 

狒狒:0
cat:1
いぬ:2

酱哦

用索引的方式看看列表[‘hello’, ‘from’, ‘the’, ‘other’, ‘side’]中第二个元素中的第一个字符是什么。

看答案

>>> ['hello', 'from', 'the', 'other', 'side'][1][0]
'f'

酱哦


如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~

字符串

  • 字符串

除了数字和布尔值之外,Python还支持一种更为复杂的数据类型,称为字符串(strings),简写为str。字符串是一系列字符(包括文本、符号、空格)排序在一起组成的。在Python中,字符串总是出现在引号内。例如,刚安装完Python的时候我们写过的:

>>> print('hello world')

其中’hello world’就是一个包含英文字母和空格的字符串,print()是一个很常用的命令,你可以先理解为打印出括号中的内容。注意字符串总是出现在引号内,单引号双引号都可以,但是不能一单一双。

有同学就要问啦,那如果字符串里面还有引号肿么办!答案是,如果字符串里有单引号,字符串两头就用双引号,反之亦然。那如果字符串里面即有双引号又有单引号怎么办→_→。嗯哼,这时候我们需要一个东西叫做转义字符,就是你键盘回车上方的那个斜杠\,例如:

>>> "I'm Ge"
"I'm Ge"
>>> 'I\'m Ge'
"I'm Ge"
>>> 'I said:"I\'m Ge"'
'I said:"I\'m Ge"'

Emm..最后一个好像不太对,怎么打出来还有个斜杠?这是因为Python为了防止歧义,保留了我们的转义字符,我们可以用print()来检验一下:

>>> print( 'I said:"I\'m Ge"')
I said:"I'm Ge"

 


转义字符\还有很多其他用途,比如输入\n就会换一行等等。如有兴趣可以查看官方文档

 

由于Python3开始,默认编码是Unicode(编码在后面的章节中会详细介绍),所以Python3还支持很多其他语言的字符,例如中文。因此,引号内也可以输入其他语言:

>>> print('哟')
哟

 

  • 针对字符串的操作

数字可以相加相乘,在Python中,字符串同样可以:

>>> 'h' + 'e' + 'l' + 'l' + 'o'
'hello'
>>> 'hello' * 2
'hellohello'

不过限制也是明显的,字符串没办法加上一个数字;字符串也不能和另一个字符串相乘;字符串不能乘以浮点数————这三种做法逻辑上都意义不明。

Python中,支持用in的方法,来查看某个字符、字符串是否出现在指定的字符串中出现,例如:

>>> 'llo' in 'hello'
True
>>> 's' in 'hello'
False

也可以用len()函数,来查询一个字符串的长度,即该字符串中字符的个数:

>>> len('hello world')
11

有的同学会说,hello五个字母,world五个字母,加起来不是10吗?我们强调一点:空格也是一个字符。一个空的字符串”和一个空格’ ‘是两个完全不同的字符串。

之前我们说,字符串是字符排序在一起的结果,这就使得字符串可以被索引。啥是索引呢,这就好比书上的目录,每个条目对应一个页码————字符串中的每个字符都对应一个索引号码。在计算机领域,索引号码是从0开始的,而不是平时习惯上的从1开头。我们可以在一个字符串后面输入一个中括号,中括号内输入索引号,就能够找到该字符串中对应索引号的字符:

>>> 'hello'[0]
'h'
>>> 'hello'[1]
'e'
>>> 'hello'[2]
'l'
>>> 'hello'[4]
'o'

刚开始学习容易混淆,字符串‘hello’的长度len(‘hello’)是5,但它内部字符最大的索引号是4,习惯就好啦。

最后,索引不仅仅可以从前往后数,也可以反过来数,例如:

>>> 'hello'[-1]
'o'
>>> 'hello'[-5]
'h'

只要记住,-1是字符串最后一个字符的索引号就可以了,这很常用。

关于字符串这个数据类型,还有很多其他的更高级的操作方法,我们在后面的章节中会逐步涉及。

 

  • 本节练习

将字符串’hello’和’world’组合成‘hello world’

看答案

>>> 'hello' + ' ' + 'world'
'hello world'

酱哦

用print()打印出:I’am learning \Python\!

看答案

>>> print('I\'m learning \\Python\\!')
I'm learning \Python\!

酱哦


如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~

整数、浮点数与布尔值

  • 整数与浮点数

打开IDLE交互界面,输入一些简单的数学表达式,然后回车,你会得到:

>>> 1 + 1
2
>>> 5 - 3
2
>>> 2.5 * 2
5.0
>>> 6 / 3
2.0

我们看到这里面出现了两种Python数据类型,一种是不带小数部分的,例如“1”,称为整数(Integer),简写为int;另一种是带有小数的,例如“2.0”,称为浮点数(floating point),简写为float。

观察上面的算式,我们发现2.5乘以2,Python返回的结果是浮点数5.0而不是整数5,这是由于在Python中,整数与整数进行运算,结果是整数;运算中只要出现一个浮点数,那么结果就是浮点数。

我们还发现,6除以3,Python返回的结果是浮点数2.0而不是整数2,这是由于,整数相除结果不一定是整数,因此Python默认除法结果不论是否为整数,均返回浮点数。

Python还能进行其他运算,这里例举一些常用的:

乘方:

>>> 2 ** 3
8

相除取整数:

>>> 14 // 3
4

相除取余数:

>>> 14 % 3
2

除上述运算外,Python中还有一些内置函数可以作用于整数和浮点数。关于函数的运算原理、写法等,现在不理解没有关系,只需先知道有这些功能即可:

取绝对值函数——abs();只要在括号中填入一个整数或浮点数,就可以返回其绝对值:

>>> abs(-6)
6

取最大(最小)值——max()与min();只要在括号内填入需要比较的整数或浮点数,数之间用逗号隔开,即可返回其中的最大(最小)值:

>>> max(1, 2, 3.5)
3.5
>>> min(1, 2, 3, 4)
1

 

  • 布尔值

布尔值(Boolean values)也是Python数据类型中的一种,简写为bool,只有两个——True和False。这就很好理解了,上学的时候英语考试偶尔有这种题,判断如果语句成立,那么就返回True,反之则返回False。比如,我们在Python中可以用大于、小于号,大于等于、小于等于号比较两个数字:

>>> 1 <= 3
True
>>> 1 > 3
False

现在,我们来看一个特例:

>>> 3 = 3
SyntaxError: can't assign to literal

EXO Me?三不等于三?敲黑板,在Python中,“=”是一个赋值号(接下来会讲),如果要使用”等号“,请输入”==”;另外,我们也可以用”!=”表示“不等于”,例如:

>>> 1 + 1 == 6 - 4
True
>>> 1 + 1 != 6 - 4
False

我们还能用or(或)、and(且)和not(非)进行一些更加复杂的判断:

>>> 1 + 1 == 2 and 1 + 1 == 3
False
>>> 1 + 1 == 2 or 1 + 1 == 3
True
>>> not 1 + 1 == 3
True

判断依据高中都学过,列表如下:

pqp and qp or qnot p
truetruetruetruefalse
truefalsefalsetrue\
falsetruefalsetruetrue
falsefalsefalsefalse\

 


布尔值是英国数学家乔治布尔(George Boole)的重要贡献。这哥们虽然英年早逝(享年49),但成就非凡。他十几岁精通拉丁文,又自学法语、德语、意大利语;16岁当老师;21岁开学校……被誉为信息时代之爸爸…之父。如果你喜欢看福尔摩斯,那么他还是剧中詹姆斯·莫里亚蒂的创作灵感原型。后来,他的孙子Geoffrey Taylor FRS参与发明了世界上第一颗原子弹_(:з」∠)_就是这么酷炫。

 

  • 本节练习

用Python计算小明(9岁),小日(16岁),小月(11岁)三人的平均年龄;计算小月和小日年龄差的绝对值。

看答案

>>> (9 + 16 + 11) / 3
12.0
>>> abs(11 - 16)
5

酱哦

用布尔表达式表达:29.5,31和47这三个数中数值最小的数小于等于30

看答案

>>> min(29.5, 31, 47) <= 30
True

酱哦

 

如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~

数据类型引言

第一章中我们将学习Python的基础概念——数据类型。

提到数据可能会想到各种各样的数字,不过广义来说,文本、列表等同样可以称为数据。

在Python中,有众多数据类型,例如整数、列表、字符串等等。针对不同的数据类型,Python可以对其进行不同的操作处理。例如,对于数字,Python可以加减乘除;对于列表,Python可以替换、删除表中元素等等。

学习之后,就可以在写程序的时候合理选用符合需求的数据类型、调用适用该类型的Python方法。

 

如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~

安装Python

  • Python2还是Python3?

Python目前有两个主流的版本,Python2和Python3,Python2发布于2000年,于2010年发布了最后一次更新2.7。Python3发布于2008年,近年也在不断更新。二者在语法和函数上有些许区别;另外,Python3不能向上兼容Python2的程序。由于很长一段时间Python的开发基于Python2,所以你可能会听过Python2的兼容性要更好这种说法。不过作为学习这门语言来说,这套教程将以Python3为例。跟上时代,拥抱未来嘛。


如果你对Python2和Python3的详细区别抱有执念,这是官方说明的传送门

 

  • 安装Python

我曾以为计算机语言嘛,打开一个黑框框直接写就好了。实际上我们在使用Python之前先要搭建一个开发环境(IDE,Integrated Development Environment),简单的说就是安装Python。这里,我们直接下载Python官方免费的标准IDE即可。

有的小伙伴反应这个网站上不去或者奇慢无比,这里我用百度云搬运了Python3.6.1适用MacOS和Windows的安装包,你可以直接点击下载

安装完成之后,你就会得到一个叫做IDLE的东西(找不到IDLE看本文末尾的问答~),打开它,我们就看到了可以用来开发Python的交互界面(Interactive Shell),啥,你问我为什么不是黑色的……?

试试在里面输入:

print('hello world')

按下回车,如果你看到:

>>> print('hello world')
hello world
>>> 

那么恭喜你写完了第一条Python命令!

 

  • 交互界面与纯文本编辑器

IDLE打开后默认进入的是交互界面,这个界面只能执行单条Python命令。一个程序都是由数条命令构成的,这就需要我们把程序中所有的命令写好在一个文件里面,然后让Python运行这个文件。

好的,现在请打开Word准备写程序的同学把它关掉- -。书写计算机程序,我们需要用到一种叫做纯文本编辑器的东西,不要使用计算机自带的写字板,记事本这类程序。Python成功安装之后,自带一个纯文本编辑器,只要在IDLE打开后,左上角选择File,单击New File就可以新建一个空白的纯文本。初学的时候使用这个就绰绰有余了。当然,你要是执着于为什么写代码不是在黑框框而是在白框框里这个问题…大可以移步别的纯文本编辑器。这里个人推荐SublimeText

 

  • FAQ

Q:Python安装完成,找不到IDLE哇,桌面上什么也没有哇。

A:Windows不会自动创建桌面快捷方式,请在开始菜单里面寻找IDLE。实在不行,打开我的电脑,按F3搜索IDLE吧;MacOS的话,请在Launchpad或者Application里面寻找IDLE~

 

Q:救命。我写了print命令以后提示说:SyntaxError: invalid character in identifier

A:在书写Python命令的时候,请使用半角的标点符号(英文输入法符号)

 

Q:救命。我写了print命令以后提示说:SyntaxError: EOL while scanning string literal

A:注意检查引号和括号是否配对,是否前后用的都是半角~

 

如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~

写在前面的话

  • 为什么要学编程

半夜失眠、沐浴、上厕所是最容易产生伟大思想的时刻。我猜学会一些计算机编程知识的重要原因有二:

几周前母校邀请我和马上高考的学生交流,我大言不惭地预言:如果说30年前,掌握一门外语的人就能够打开新世界的大门,发掘无限广阔的世界与个中机遇;那么未来30年,能够与计算机对话的人,就能在很多事情上占得先机。一方面,这取决于计算机能听懂人类多少语言——仰仗语音、语义识别的发展;另一方面,则是人是否掌握计算机的“语言”,让现代科技为己所用。大势所趋,此其一也。

其二,乔帮主讲的“人人都要学编程”这个概念近年很火。要我说,人人都要学的,不单单是编程,更是一种思考的能力、一种思维的方式、一种解决问题的思路。我觉得学习编程是在培养“思考”这一重要的习惯、建立更为严密的处事逻辑、获取更为高效的工作方法。

 

  • 谁可以学编程

应试教育体制给了我们一个坏习惯,我们用“文科生”、“理科生”标榜自己,并利用这标签作为拒绝学习知识的理由。就编程来说,“文科生”们担心自己数学不好、理科功底不足,学不好编程——这就像谩骂天下程序员都不解风情一样偏执。个人相信,当应试不再是目的,获取知识就是快乐的,我们不该有所畏惧。

这是鼓励大家去拥抱新的知识。作为从进入大学起就不再接触任何与数、理相关课程的“文科生”,我在毕业两年后拿起了线代、微积分,从编程到深度学习的学习经历让我重新认识了数学与这学科独特的魅力;我也鼓励我的“理科生”学友在自然语言处理问题上于理论语言学中寻找灵感。

因此,从这个意义来上来说,任何愿意学习的人,都可以学编程。

 

  • 这是什么教程

这是一套我翻译整理改编添加再创造……后形成的Python编程语言基础入门教程。学完以后会对Python这个语言有基本的了解并掌握基本的语法规则。然后,你就可以继续从什么网络爬虫啊、数据挖掘啊balabala方向去继续深度的学习了。

世界上有辣么多编程语言,为什么偏偏要学Python呢?

个人认为Python的一些特征使得它对刚接触程序语言的人来说比较友好。

Python是一种高级计算机语言,所谓“高级”,是指它比起你想象中的一堆“代码”来说更像人类的语言,指挥计算机做一件事情需要的代码数量更少(代价是运行速度慢)。Python语言被广泛应用于网站开发、游戏后台制作、数据挖掘等领域。

当推荐朋友学习Python语言时,我会推荐他们各种英文原版教材,不料语言关却让很多人望而却步。目前互联网上也不乏Python 中文教程,但有的难度跳跃大,叫人摸不着头脑,一来二去热情也就消耗殆尽。我自己在学习的过程中先后读过数本Python外语教材,我对内容进行了选编,重新调整顺序之后形成了这一套Python中文入门。

 

  • 这教程怎么用

入门内容难度不高,不过对于第一次接触程序语言的人来说是一个建立新的思维方式的过程。因此多思考总是没有坏处的。我能想到要注意的有以下几点:

一是每个章节会有练习题,题目的答案默认是折叠的。先自己做一次,然后对比答案,思考哪种写法更简明。这已经不是应试教育啦,你觉得你比答案写得好,那一定就是这样的!个人觉得写程序所谓简明,就是要写的简洁同时还能让别人看懂,我猜这也是在学习程序语言过程中要培养的一种习惯——不是说程序写得多么复杂除了你谁都看不懂才厉害。

二是教程中的代码虽然可以复制粘贴,不过建议大家手动输入。键盘不过关的同学可能会感到吃力,不过这也是学习程序的一个过程吧。毕竟在未来这样一个信息化时代,我猜键盘输入会变成一项重要的能力。

三是教程中会有绿色高亮的文字,这些内容是作为补充,调节课堂气氛的(咳咳)。没兴趣直接跳过即可,不影响Python的学习。例如:


键盘输入速度也许会在计算机越来越普及的时代里上升为个人的一项重要能力。你还在用两根手指头戳键盘么(手动滑稽?实际上,盲打是可以学习的,并且过程比你想象的要容易。小欧在刚开始学程序的时候也是低头看着键盘一个个字母符号戳,后来觉得药丸,于是开始学习盲打。那段时间我每天练习25分钟打字,坚持了4个月,从最初的21wpm上升到了65wpm(wpm是衡量英文打字速度的单位,words per minute),同时准确率大大提高了,也不用一打字就低着头看键盘了。我觉得学习写程序的同时,不妨也练习一下盲打,于以后工作学习都大有裨益。在这里我推荐我练习盲打的时候用的软件,点击查看。这个软件很简单易用,只需要你能看懂基本的英文,根据图片提示一步步练习即可。我购买的是个人普通版,9.9美元。尊重知识,支持正版,从我做起。

 
四是有一些章节名称后面带一个星号*,这是在说这章的内容是学到后面再回来看能加深理解的,所以一开始记不得,或者不能理解没有关系,永远可以返回来发现新大陆。

 
最后呢,我非大神,必有谬误,欢迎指正:)