正文:略有删改

Python 是一个简洁易读的语言,学习者几乎可以立刻上手,也适用于大量的商业应用上。目前已超越C/C++、Java,成为各大学课程中的主流入门程式语言,美国Top 10 Computer Science (电脑科学) 系所中便有8 所采用Python 作为入门语言。

今天就让我们来试着写写看Python 这个好玩的语言,并利用学习结果写个简单的爬虫程式,能够在FB 自动发文、自动洗赞,统计出朋友的留言按赞数!

一. 环境设置

首先可以至官网下载下载Python: https://www.python.org/。下载完成后,你将获得: Python直译器与IDLE (Python的IDE)。身为一个IDE、该有的都有了,只是由于有点丑,所以大家都不爱用。

接下来如何执行程式有两个选项:

1. 使用主机Terminal

让我们找一个写程式用的文字编辑器: Notepad++、Sublime Text、Vim、Atom…记事本也行,写完程式码后可以打开Terminal 、打上python档名.py执行看看,不过此举较不推荐新手用。


可以看到Terminal印出hello world字样了

2. 下载使用Jupyter Notebook

如果要更方便一点的话可以下载Jupyter,也是Python的IDE,包含了编辑器和编译功能,非常适合Python的学习噢

二. Python基本语法与练习

好了,来实作看看吧!打开Jupyter Notebook 应用程式、跳出 Jupyter Notebook 的编辑页面就可以来撰写我们的程式码啦。


1. Print:永远是跟世界打声招呼的第一个程序

print语法是在print函式中放进你要印的东西,比如print(我要印这个)。说声Hello World,跟程式的世界打声招呼吧!print('hello world    ')

输出hello world

第一个跟世界打招呼的程式!

print的内容可以是变数(variable): print(a),数字(init): print(1234),或是字串(string): print('abc123')。

2. Variable (变数):一切TypeError的泉源

上面提到了变数,但这是什么意思呢? 其实就是帮资料取个名字、把资料储存起来。比如: 变数= 资料,a = 123。当我们输入a、就会找到123。

变数虽然能储存资料,但资料有很多种类型、所以就会有资料型态(Type)。举例来说:

a = 123 , type(a)会告诉我们init (整数)。

b = '456' , type(b)会告诉我们str (字串)。

c = 8.70 , type(c)会告诉我们这是一个float (浮点数)。


数值可以做运算:


也可以使用各种你知道的函数:


但不同的形态运算要注意,不要把字串和数值加在一起、否则会产生TypeError。


记得学会看错误讯息再回去看自己写错了什么。

那该怎么办呢?

别怕别怕,若要运算则需要做型态转换,可以用int(), str(), float() 来转换变数型态。可以看到下图,int() 将字串'456'转成整数、str() 将整数123 转成字串。


谨记:「Error都是暂时的,没有解不掉的Bug,莫忘心灵祥和。」

就算身边没有程序激励员也要保持好心情喔(啾咪^_<

3. Input:让使用者输入资料呗

这边我们使用的是Python 3的环境,使用的是input;如果环境是Python 2的朋友注意是用raw_input噢,Python 2的input有别的意义。

input的功能是让使用者所有输入的资料会被当成字串储存起来,需要时再作转型。举例而言:

a = input() :它会等你输入,并以字串(string)的形式存入a这个变数中。

b = input('Your Name: ') :在萤幕上会出现'Your Name: '的提示,并把资料以字串(string)形式存入b这个变数中。


记得这个数字289是字串的形式喔~

● 小练习

请写一支Python程式,能读取两个整数,并把他们的四则运算印出来。(提示: 用input()印出来的东西是字串, 记得转型噢!)


4. If-Else 日常的逻辑判断

别说你没用过if-else函数式,我们每天都在面临if else的抉择──如果(if)百货公司周年庆到了:那就是大采购的时间啦! 否则(else)我们就晚点再买。

照样造句一下还有──如果(if)手机快没电: 我就乖乖回家充电! 否则(else) 我就继续刷抖音

来看一下if-else 语法解说。if 写完之后接冒号、下一行缩排后开始写要做什么事情。注意else 是否则的意思,就不用再写一次条件了。


但如果我们不只有两层(周年庆就去买东西、否则就等下次),可能有好几层条件呢?

比如: 如果我们平板电池的电量还很高、就去python学习网学python;电池电量快没了、就乖乖回家;如果电池电量普普通通、看看小说就好。

把这件事情用Python表达出来吧!


电池只有50,在30~80之间,因此看看小说就好!

if-else主要用在逻辑运算的判断上:> 大于

< 小于

>= 大于等于

<= 小于等于

== 等于

!= 不等于

或是布林值(Boolean):true 真的

false 假的

and 且

or 或

not 非

不小心买到Samsung Note 7、听说电池快没电时容易有爆炸的风险,怎么办?! 利用逻辑运算来提醒我们这个危机吧!


● 小练习

写一支Python整数机,第一步让使用者输入想要做的符号运算,比如「+, -, *, /」,第二步让使用者输入'整数1'和'整数2',最后让这两个整数进行运算。如果输入的运算符号不是「+, -, *, /」,便输出「错误」。


5. For Loop 转圈圈吧哈姆太郎

如果要把0到9的数字印出来,应该怎么做呢?

嗯当然你可以这样做…


不是很看得懂程式码的意思吗? 别紧张,这边来解释一下这个式子的涵义。若要枚举出从0到n-1的数字,写法是:

for [变数名称] in range(n): (缩排) print([变数名称])

来试试看:


在这里的n=10,是不是把0~9 (n-1)的数字都印出来了呢?

到底range又是什么意思呢?

事实上range(n) = range(0, n),简单来说就是个产生器,你可以在这个range范围中拿资料、拿完到n-1为止。以range(3)为例,第一次拿到资料0、第二次拿到资料1、第三次拿到资料2,然后就结束了。

让我们重新看一下for函数结构:for [变量名称] in range(范围,比如从数字X到Y):

(縮排) 做一件事

(縮排) 做一件事

了解的话,就让我们来做个小练习吧!

● 小练习

请输出一个九九乘法表。(提示1: for loop里面也可以有第二个for loop噢!)


进阶版: 如果不希望print出来的结果换行且要有空格,可以使用end=' ';若要再换行可使用end='\n'。


事实上range的数列是有间距的喔!

range 的结构是:range(起点, 终点, 间距),其中的间距预设为1 、比如range(0, 6) = range(0, 6, 1) 。代表从0 到5,每次加1 的意思。

分别印出:

(1) 从1到10、每次加2的数列;

(2) 从10到2、每次-3的数列吧!


● 小练习

请做出一支能猜数字的程式:每次让使用者猜一个整数,若猜对就输出Bingo;使用者最多可以猜3次。(提示: Bingo后可以使用break来离开回圈)


6. List:能无限储存资料的格子

想像一下,若今天有三笔资料要计算时,我们会这样写:a = 1

b = 2

c = 3

… 那如果你有成千上万笔资料呢?

再想像一下,如果不知道使用者要输入多少资料又要怎么办呢?in = input()

a = in[0]

b = in[1]

这样真的行吗…

「神说要有了List,所以有了List。」- 来自深海大凤梨里的神秘讯息。

继续运用你的想像力!我们现在有个异次元里的柜子,它有无限个格子,第一格可以放东西、第二格也可以放东西…以此类推。

柜子里可以放任何东西,我们会用一个数字代表东西放在柜子中的第几层格子,这个数字就叫做Index (索引)。

把柜子的概念换成Python 的List 语法,就会变成:放在第0 层的变数、放在第1 层的变数… 这个数字就是Index(索引),而变数就是我们塞进去的资料。

一个Python的List长相如下,以中括号[] 包起来、逗号, 分隔:a = ['Lynn', 0.87, 1234, True]

这里的a 就是一个List,第0 格放的是Lynn 这个字串、第1 格放的是0.87 这个浮点数、第2 格放的是1234 这个整数、第3 格放的是True 这个布林值。

有了格子的概念后,我们可以使用a[第几格]来取出变数,比如a[0]代表'Lynn'、a[3]代表True。可以看到由于a[4]并不存在,因此会出现IndexError的警示。

要如何知道一个List有多长呢?我们能使用len([list变量名称])。a = [1, 3]

len(a) = 2

在拿到List 的长度后,让我们能来玩一点变化吧!比如List 加上上面教学的For Loop 看看会发生什么事:


若要更简洁一点的话,由于in 这个关键字有「在… 之中」的意思,in range(0, 3)代表在0~2之中。因此能改成:


● 小练习

现在有一个list a = [1, 3, 5, 7, 9],请对每一个元素都平方后印出来,且须将a 也变成[1, 9, 25, 49, 81]。


来玩玩更多list的操作吧!

建立一个空的list: a = list()或是a = []都可以

动态增加元素:list.append(x) :把变数x塞到list的最后面

list.insert(i, x) :把变数x塞到i这个位置上

list.pop() :把list的最后一格丢掉

list.pop(i) :把list的第i格丢掉

list.remove(x) :会把第一个出现的变数x拿掉

list.clear() :把list内的资料全部清光光

与常见函数的结合:max(list) :找出list中最大值

min(list) :找出list中最小值

sum(list) :找出list数字总和


● 小练习

五次数学段考的成绩分别为10、30、50、70、90分,算出平均后,老师发现大家考太烂、只好将成绩开根号再乘上10 (提示: 成绩**0.5*10 ),再算出一个新平均。

请印出: 1. 五次成绩; 2. 平均成绩; 3. 五次新成绩; 4. 新分数的平均。


以为就这样结束了吗? List还有切片(Slice) 的功能哦大大!

Python 的slice 功能让我们能拿出List 柜子的一部份。list[start: end]

#拿到 list 的start ,start+1, start+2, ..., end-2, end-1


针对slice语法,让我们深入介绍一些细节部分:list[start: end],start和end都可以省略不写

start的预设为0

end的预设为len(list)

liest[ :end]代表0~end-1

list[start: ]代表start~len(list)-1

list[ : ]代表0~len(list)-1


● 小练习

来办场Party吧! 输入十个整数、存入一个名为people清单中(表示我们的宴客人数);之后会有五次询问,每次会输入清单开始和结束的位置,再输出从开始到结束位置的总和。