[Python极速入门] Python 2.7极速入门讲义

3 篇文章 0 订阅
2 篇文章 0 订阅

本文全部来自小麦的《大数据公选》课程讲义,包括三篇python和Numpy等数据分析包的相关教程,excel和SPSS的数据分析教程等等,作者是小麦以及懿文同学,是原创资料。本来是课程内部资料,现在开源出来,仅供大家学习。如要转载,请联系我,并尊重版权。



Python2.7极速入门讲义


前言

Python, 是一种面向对象、解释型计算机程序设计语言。结构简洁,风格优雅。而且在数据科学领域非常火爆。 


现,小麦特为有C/C++基础的人,推出5分钟上手PYTHON系列教程,结合其他文章的Numpy等包的使用说明,让使用者快速上手。


请特别注意C/C++与python的不同之处,以便快速上手


一、     变量

先来观察一段简单的python程序,虽然你还没有学习过python,但是,我想你仍然能猜出这段程序实在做什么:

a = input()

b = input()

print(a + b)

 

看出这是在做什么了吗?是的,这段程序要求你输入两个数,然后会输出这两个数之和。

现在来详细解释一下这段程序,1、2行是说,分别输入两个数,并赋值给a和b,然后打印出a+b的值。

Python使用等号进行赋值,你可以随心所欲的定义变量并直接赋值给他们。将你想要的变量名放在左边,将你想赋的值放在右边,中间用等号连起来,就这么简单。只有先定义了变量,才能够使用他们,如上述代码,若去掉了第一行,会产生一个异常。

这里还涉及到了内建函数input()和print(),前者的功能是,输入一个数字,后者则是输出一个变量(可以是字符串或自定义类型),括号里面的是参数,前者不需要参数,后者的参数是要打印的变量,或者表达式,如果是表达式,会先求该表达式的值,再输出。

 

#####学过C语言的同学可能会发现,python的变量是不用声明类型的,事实也确实是这样,python中的变量自动的通过值的类型来确定变量类型。这是动态语言的特性,提高了编程效率,但同时也使得其运行效率较为低下。

 

#####关于print函数

print在Python2.7中是一个关键字,如果想要输出某个变量或表达式,可以写成这样。

print a

但是在Python3.4中,print关键字被取消了,因此只能写成函数的形式,即

print(a)

因此,使用括号的形式可以在Python的两个版本下运行。本文后面两种写法都会用到。

 

二、     选择

同样以代码实例开始:

# "=="表示等于,"%"是取余运算符

a = input()

b = input()

if 0 == a % b:

    print("YES")

else:

    print("NO")

 

这次的代码同样很好懂,输入两个变量a和b,如果a余b等于0,则输出YES,否则输出NO。这个程序的功能是判断两个数是否能够整除。

来看新出现的语法if和else,首先if后面会跟一个表达式,这个例子里是“0==a%b”,那么程序运行到这里的时候,会先来计算一下,这个表达式是能够满足的吗?或者说这个式子是“真”的吗?如果结果为也就是True,那么执行冒号后面的代码,否则,执行else后面的代码。其中else的部分不是必须的。

基本的问题解决了,但这里还有两个小问题。(1)如果我想要让程序当a%b==1时输出“ONE”,a%b==2时输出“TWO”呢?我需要多个分支,但这里只提供了两个,我如何写出更多可能的选择呢?(2)如果我想分支里面再写一个只有if的选择语句,如何让程序识别出else是跟在外面的else后面的?

第一个问题,可以使用elif语句解决(意为else if),可写成如下代码

if a % b == 0:

    print("YES")

elif a % b == 1:

    print("ab等于1")

elif a % b == 2:

    print("ab等于2")

else:

    print("NO")

 

用法与if一致。

第二个问题,python通过缩进来区分,语句块的归属。

#version 1: internalelse

a = input()

if a >= 0:

    if a == 0:

        print("a == 0")

    else:

        print("a != 0")

 

#version 2: externalelse

a = input()

if a >= 0:

    print("a >= 0")

    if a == 0:

        print("a == 0")

else:

    print("a < 0")

从上述两例中可以看出,当一个语句的从属语句,会相对于该语句往右偏移4个空格或1个Tab的距离。所以说,Python通过缩进来区分语句块的从属问题。

 

#####关于python的运算符

Python的运算符和大多数的编程语言没有什么区别,这里我们再简单说一下。

加减乘除余分别对应“+-*/%”,比较运算符有小于号“<”,小于等于号“<=”,等于号“==”,不等号“!=”,大于等于号“>=“,大于号“>”。需要特别注意的是等于号,一个“=”的是赋值号,两个的才是等于号。

然后是自增运算符“+=”,比如语句“a+=10”,表示将a自身加10,再赋值给a。减乘除余也有类似的运算符,分别为“-=”,“*=”,“/=”,“%=”

#####学过C语言的同学注意,python中没有++和--运算符。

 

三、     循环

来看一个求斐波那契数列第n项的程序(不考虑错误的输入)。

#斐波那契数列是满足,f(n)=f(n-1)+f(n-1),f(1)=1,f(2)=1的数列

n = input()

f1 = 0

f2 = 1

 

i = 1

while i < n:

    f3 = f1 + f2

    f1 = f2

    f2 = f3

    i += 1

 

print f2

 

首先输入一个正整数n,定义f1,f2,分别赋值为f(0)和f(1),然后进入循环,迭代求解第n项。

i初始值为1,每次判断i是否小于n,如果是,则转入循环体,求出下一项,更新f1,f2的值,将i加1,再次判断,直到i==n。

此时输出f2刚好是数列的第n项。

while的语法相对简单,每次判断跟在后面的表达式是否为True,若是则转入循环体,执行完循环体再次判断,否则跳过该循环体。

这里暂时只介绍while循环,还有一种for循环在接下来介绍列表时再介绍。

 

四、     列表

接下来介绍一种非常有用的用于顺序存储的数据结构,列表。

Python的列表类似于C++的vector,但同时提供了更多的方法。

还是先从例子看起吧。

numbers =[2,1,"Three",4,9.3,5,7]

 

for number in numbers:

print(number)

 

这个程序是什么意思?首先,列表用一对中括号表示,内部的数据用逗号隔开,内部的数据的类型可以是任何类型(包括列表类型)。这个程序的第一句就是将一个列表赋给变量numbers.

然后是一个上一节略过了的for循环,循环的语法形式上是

for var in lists:

   ……

for后面跟一个变量名,in后面跟一个列表,接下来是执行语句。

其循环是这样执行的,对于列表中的每一个项,将值赋给var,然后执行下面的语句,直到这个列表没有下一项了。

所以,示例程序的内容就是,将所有number列表中的所有项打印出来。

列表提供了很多有用的内置操作,我们通过下一个例子来看一下。

lst = ["This", "is", "a","list", 2.11, 5, 6, 7, -1]

str_list = lst[0:4]

num_list = lst[4:]

lst_copy = lst[:]

 

num_list.sort()

for i in range(len(num_list)):

    print num_list[i]

在这个例子中,我们用到了一些函数,我们先来解释一下这些函数的功能。

l  len(object): 返回object的长度,object可以是列表,字符串或其他自定义的类型

l  range(n): 返回一个[0,1,…,n-1]的列表。如果range有两个参数,如range(a,b),则返回[a, a+1, a+2, …, b-1],即得到一个a,b的左闭右开的区间。

l  list.sort(): list类型的方法,通过点操作符后接方法名来调用,sort方法可讲调用次方法的列表进行从小到大的排序,也可传入一个函数,使列表按照自己需要的规则进行排序。

l  list.append(x):list的方法,在list的末尾添加一个新元素x

l  list.remove(x):list的方法,移除list中第一个值为x的元素如果这样的元素不存在则抛出一个异常。

 

然后需要解释一下列表的分片(slice)操作。

我们知道,可以通过在中括号中加索引的方式取得列表(字符串也可以)中的某个值,比如list[0]可以取得list的第一个元素,list[1]是第二个,要注意索引从0开始。可以直接给list[i]的元素赋值。

然后还可以用分片的方式直接获取list的一系列元素并重新组合成一个列表。其基本操作的写法是list[a:b],表示取这个列表的从list[a]到list[b-1]的所有元素。参数也可以缺省,比如list[a:]表示从list[a]处开始到列表尾的所有元素,list[:]表示该列表的所有元素。

所以,回过头来看示例程序,现在应该可以看懂了。

首先,给了一个混杂了各种类型的列表,然后用分片操作将列表分为字符串的部分和数字的部分。然后对于这个数字的部分,添加一个元素,并删除一个元素,然后排序。

之后用len函数和range函数,生成一个刚好能够当num_list的索引的序列。之后,用每个索引来访问该列表,将其输出。

 

 

#####关于引用

Python对于列表和其他复杂类型,采用了类似于Java的引用访问。同样类似于C++中的引用,一种封装的更好的C的指针。

具体来说,是这样,比如这段代码:

a = [1,2,3]

b = a

print a, b

 

b[1] = 999

print a, b

看上去,是有两个列表a和b,先定义了列表a,然后将一个a的拷贝赋值给b。然而,执行一下这段代码,从打印的结果可以看出,a和b,其实是同一个东西的不同名称,改了b,a会同步改变。实际上,对于列表或者其他自定义类型,直接进行变量名到变量名的赋值,只会传入一个引用而非重新生成一个拷贝,所谓引用就是别名,即可以通过这个变量名来找到那个实际的数据,经过这样的赋值,数据还是只有一份,但是名字有了2个,所以一旦修改,两个变量名所索引到的数据都会改变。

 

五、     函数

在上面,其实我们已经接触过函数了,比如input(),len()等,所谓函数,和数学中的函数有一些区别。函数就是给一些参数作为输入,然后执行一些操作并返回一个输出的代码块。数学中的函数一般更看重输入和输出,但在计算机中,经常是函数中执行的操作更重要。

以下是一个自己定义函数的实例:

def first_str(arr):

    for item in arr:

        if type(item) == str:

            return item

 

a = [2.1, 2, 6,"cruel", "first", 220, 'bcd']

print first_str(a)

 

这个程序中,我们首先用def关键字定义了一个函数first_str,这个函数接受一个列表作为参数(如果不是会抛出一个异常),然后会找出第一个类型为字符串的项并返回它。

函数的定义很简单,基本格式为def func_name(variable)将代码放到接下来的语句块中,然后如果需要返回值则使用return关键字。

六、     习题

http://pythontip.sinaapp.com/coding/code_oj

http://nanti.jisuanke.com/

https://leetcode.com/problemset/algorithms/ (困难)

 

七、     更多资料

这些知识非常基本的知识,即使是上述已经讲过的概念,也可能有很多细节的地方没有讲到。所以推荐从其他网站或者书籍中进一步学习python,有一些有用的概念如字典、元组、类、异常、生成器、装饰器、高阶函数等都有待进一步的学习。

以下是一些不错的学习网站:

l  Python2.7中文手册 http://docs.pythontab.com/python/python2.7/

l  廖雪峰的python3教程http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

l  Codecademy在线学习网站https://www.codecademy.com/learn/python

l  计蒜客——Python程序设计http://www.jisuanke.com/course/95

l  Python 2.7——官方文档(英文)https://docs.python.org/2.7/

l  Python 2.7——官方库函数说明https://docs.python.org/2.7/library/index.html

 

 

附python安装方法(如果你想安装纯净的Python):

      进入Python官方网站https://www.python.org/

      选择Downloads->Python 2.7.11(写该教程时的最新版本)进行下载


      下载后点击安装包,选择Install for all users,然后确定安装的位置,进入下一步,将“Add python.exe to Path”项选为要安装。


 

      等待安装完毕,之后可从开始菜单IDLE打开内置的IDE进行编程。

  这里推荐新手使用jetbrains的pyCharm,百度搜索jetbrains,第一个即可。目前community版是完全免费的,也足够初学者在很长时间内的使用了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值