2016年度WEB开发实验室第二次Seminar.

主讲人:Rod Hollins

课件下载: Python基础.pdf (下载511)

Sublime配置

1. 安装package control

What is package control?

The Sublime Text package manager that makes it exceedingly simple to find, install and keep packages up-to-date.

假装翻译了一下,package control就是一个sublime包管理工具,方便查找、安装和更新插件包。

package control的安装极其简单:

  1. 在sublime中按下快捷键Ctrl+`弹出输入框
  2. 贴入下方代码,回车即可

2. 安装ConvertToUTF8插件

为了解决当文件中包含中文时sublime打开出现乱码的问题,我们需要安装ConvertToUTF8插件。

安装步骤分为三步:

  1. 在sublime中按下快捷键Ctrl+Shift+P弹出输入框
  2. 输入install,单击提示中的第一项Package Control: Install Package,如下图所示:【2016年度Seminar】(二)Python基础-Web开发实验室
  3. 在之后弹出的输入框中,输入ConvertToUTF8,单击选择即可

3. 设置sublime - python运行环境

新建文件 -> 编写python代码 -> 在命令行中输入python xx.py 毕竟是一个麻烦的过程,如果能在sublime中编写代码并能直接运行输出,该是多么美妙的一件事情啊~好消息是,sublime可以配置一个python build system。

在sublime菜单栏中选择 Tools, Build System, New Build System , 在打开的页面中删除原有代码并输入如下代码:

{
    "cmd": ["python", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "env": { "PYTHONIOENCODING": "utf8" },
}

保存时,将文件名设为Python3.sublime-build。

4. 环境测试

首先,在sublime text中编辑test.py,代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = 'Hollins'

'''
 Python Test
'''

print('Welcome to Web Lab!')

然后,按下快捷键Ctrl+B, 不出意外能看到控制台上的文本打印以及执行时间,如图

【2016年度Seminar】(二)Python基础-Web开发实验室

如果没有成功,请仔细检查是否操作有误。

数据类型和变量

计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:

1. 整数(int)

Python可以处理任意大小的整数,这里的整数的表示与数学课本中是一致的,例如:1100-80800,等等。

计算机内部的一切都是用二进制,因此,使用十六进制来表示整数也较为合理,十六进制用0x前缀和0-9,a-f表示,例如:0xff000xa5b4c3d2

2. 浮点数(float)

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x10^9和12.3x10^8是完全相等的。

浮点数可以用数学写法,如1.233.14-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

3. 整数VS浮点数

先举几个栗子吧

>>> 2*3
6
>>> 7/3
2.3333333333333335
>>> 7//3
2
>>> 2.0*3
6.0

由以上例子,我们不难得出以下规律:

  1. 整数与整数作加减乘运算,结果仍是整数。整数与整数作整除(//)运算,结果也仍为整数。
  2. 浮点数与整数进行的一切操作,结果都是浮点数

4. 字符串(str)

字符串是以单引号‘或双引号“括起来的任意文本,比如:'abc',"xyz "等等。请注意,''或'本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。

那么问题来了,我们如何表示单引号或者双引号本身呢?

答案就是转义!假定,我们统一使用单引号来表示字符串,可用\'来表示字符串中的单引号。

>>> print('I\'m "OK"!')
I'm "OK"!

5. 布尔值(bool)

布尔值只有True、False两种值,要么是True,要么是False,在Python中,可以直接用True、False表示布尔值(请注意大小写),也可以通过布尔运算计算出来:

>>> True
True
>>> 5>3
True
>>> True and False
False
>>> True or False
True
>>> not 2>1
False

6. 空值(None)

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

变量

变量的概念基本上和初中代数的方程变量x是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。

变量在程序中就是用一个变量名表示了,变量名必须是大小写英文数字_的组合,且不能用数字开头,比如:

>>> a=1
>>> t_007 = 'T007'
>>> Answer = True

但是变量命名时要避开python内置的关键字,如True等...

变量赋值语句

在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值。请不要把赋值语句的等号等同于数学的等号。比如下面的代码:

>>> x = 10
>>> x = x + 2

如果从数学上理解x = x + 2那无论如何是不成立的,在程序中,赋值语句先计算右侧的表达式x + 2,得到结果12,再赋给变量x。由于x之前的值是10,重新赋值后,x的值变成12

字符串和编码

下面,我们来谈一谈字符串。这个故事可真是一言难尽。

由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。ASCII用1个字节表示字符。

你可以想得到的是,全世界有上百种语言,中国把中文编到GB2312里,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。而Unicode编码通常是2个字节,偏僻的字用4个字节表示。

新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

Python的字符串

Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。以Unicode表示的str通过encode()方法可以编码为指定的bytes

要计算str包含多少个字符,可以用len()函数。

len()函数计算的是str的字符数,如果换成byteslen()函数就计算字节数。

>>> print('包含中文的str')
包含中文的str
>>> len('ABC')
ABC
>>> len('刘力超')
3
>>> len('刘力超'.encode('utf-8'))
9

Python源代码文件

Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

如此一来,妈妈再也不用担心源代码中出现中文了~~~

条件判断

计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:

age = 20
if age >= 18:
    print('your age is', age)
    print('adult')

也可以给if添加一个else语句,意思是,如果if判断是False,不要执行if的内容,去把else执行了:

age = 3
if age >= 18:
    print('your age is', age)
    print('adult')
else:
    print('your age is', age)
    print('teenager')

当然上面的判断是很粗略的,完全可以用elif做更细致的判断:

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

elif是else if的缩写,完全可以有多个elif,所以if语句的完整形式就是:

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

 

循环

在开始介绍循环之前,需要先介绍Python中两种常见的数据类型:list和tuple

list

list是一种有序的集合,可以随时添加和删除其中的元素。

比如,列出班里所有同学的名字,就可以用一个list表示:

>>> players = ['James', 'Curry', 'Durant']

变量players就是一个list,可以用len()函数可以获得list元素的个数

>>> len(players)
3

用索引来访问list中每一个位置的元素,千万记得索引是从0开始的:

>>> players[0]
'James'
>>> players[1]
'Curry'
>>> players[2]
'Durant'
>>> players[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1

如果要取最后一个元素,除了计算索引位置外,还可以用-1做索引,直接获取最后一个元素:

>>> players[-1]
'Durant'

list是一个可变的有序表,所以,可以往list中追加元素到末尾:

>>> players.append('Wade')
>>> players
['James', 'Curry', 'Durant', 'Wade']

也可以把元素插入到指定的位置,比如索引号为1的位置:

>>> players.insert(1, 'Kobe')
>>> players
['James', 'Kobe', 'Curry', 'Durant', 'Wade']

要删除指定位置的元素,用pop(i)方法,其中i是索引位置:

>>> players.pop(2)
>>> players
['James', 'Kobe', 'Durant', 'Wade']

tuple

tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出篮球运动员:

>>> players = ('James', 'Curry', 'Durant')

现在,players这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用players[0]players[-1],但不能赋值成另外的元素。

但是,要定义一个只有1个元素的tuple,如果你这么定义:

>>> t = (1)
>>> t
1

定义的不是tuple,是1这个数字!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1

所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:

>>> t = (1,)
>>> t
(1,)

循环

为了让计算机能计算成千上万次的重复运算,我们就需要循环语句。

For循环

Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,看例子:

>>> for p in players:
        print(p)

执行这段代码,会依次打印players的每一个元素:

James
Curry
Durant

所以for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句。

再比如我们想计算1-10的整数之和,可以用一个sum变量做累加:

sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    sum = sum + x
print(sum)

如果要计算1-100的整数之和,从1写到100有点困难,幸好Python提供一个range()函数,可以生成一个整数序列,再通过list()函数可以转换为list。比如range(5)生成的序列是从0开始小于5的整数:

>>> list(range(5))
[0, 1, 2, 3, 4]

range(101)就可以生成0-100的整数序列

while循环

第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。比如我们要计算100以内所有奇数之和,可以用while循环实现:

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

在循环内部变量n不断自减,直到变为-1时,不再满足while条件,循环退出。

练习

请用Python计算10的阶乘: 10!

参考

 Python基础 - 廖雪峰的官方网站

提示:本节内容较多~且是Python学习中基础之基础,小伙伴们可以多多复习。