Python之禅
在正式学习Python语法之前,让我们新增一只档案zen-of-python.py
并在里面放入以下程式码:
import this
执行后你应该会看到终端机输出:
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
这段话是所谓的Zen of Python,翻成中文大概就是Python的禅意吧XD
其实他是一个有点像是coding rule的玩意,简单来说就是希望你写Python时应该抱有的精神。
小弟认为里面有几句很棒,特此节录与大家分享
Readability counts. => 可读性很重要,除了电脑,你的同事 (还有未来的你)也要读你的代码!
Errors should never pass silently. => 再小的错误与例外,也要好好处理,切勿养虎为患。
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
=> 一个难以解释清楚的实现? 那真是太糟啦! 一个可以轻易解释的实现? 嘿! 这说不定是个好实现呢!
输出
Python的输出非常简单,即为print函,在昨天最后我们也有用到。
今天我们来看个稍微不一样的例子:
print('Hi, my name is', 'Simon')
从上述例子可知,print这个函式可接受任意个数的参数,并在印出的时候用空白隔开他们。
变数
变数在程式中,扮演中储存资料的角色。将资料储存下来,就可在需要的时候拿出来用。
在程式中,每个变数会有自己的型别。那型别是什么呢? 简单来说,型别决定了这个变数可用来储存什么样格式的资料,并且定义了相对应的操作。
简单举例,Python中常见的基本型别有:
int (整数)、float (浮点数)、str (字串)。
从上述你大概可以知道,如果要今天存放年龄,整数会是不错的选择。
身高& 体重? 浮点数看来不错。
名字? 字串是不二之选!
不过在Python中,宣告变数并不用事先给定型别,他会依照你给他的初始值来决定变数的型别。
让我们来看看范例,了解Python中的基本型别吧!
iv = 10
fv = 12.3
cv = 3 + 5j
sv = 'hello python'
bv = True
nv = None
print(iv, fv, cv, sv, bv)
print(type(iv))
print(type(fv))
print(type(cv))
print(type(sv))
print(type(bv))
print(nv)
print(isinstance(sv, str))
上述的例子有几个需要注意的地方
- 我们可用
=
来给定变数初始值 - 我们可用
type
这个函式以及print
来得知变数的型别 - Python的空值(没有存放任何东西)是
None
以来表示 - 如果想要确认某变数是否为特定型别的时候,可用
isinstance
这个函式
注解
接着要教大家如何在Python中写注解。
注解虽然会出现在程式码里面,但是并不会被执行,是个很适合为程式新增说明的手段。
如果不好好写注解的话,肯定会被一个月后的自己跟同事讨厌呢!
在Python中,写在#
后面的文字,都会变成注解。
# 这个变数用来储存我的名字
name = 'Simon'
用户输入
有时候程式也需要与外界的使用者互动,来接收一些外部指令或讯息。
这时候你可以用input
这个函式,他会回传外部送来的讯息。
执行下方的程式,并在终端机输入你的名字,看看会发生什么事
name = input('Hello, what is your name? ')
print('Hi, ', name)
数学运算子
接下来我们来介绍用来做数学运算的运算子,看看如何在Python完成数学工作
运算子 | 功能 |
---|---|
x + y | X加Y |
x - y | X减Y |
x * y | X乘Y |
x / y | X除以Y |
x // y | X除以Y,只取整数解 |
x % y | 求X除以Y的余数 |
x ** y | X的Y次方 |
流程控制(if...else)
写程式的时候,很常遇到某些情况,如:达成条件要做A,未达成要做B。
这时候我们就可以if...else
用来做到这件事情。
假设我们有一个学生的考试成绩,就可以根据成绩的不同来印出评语:
grade = 90
# there's no ()
if grade >= 90:
print('Excellent!')
elif grade >= 60:
print('Good enough!')
else:
print('Loser!')
上述的例子中,有几件事需要特别注意:
- 一个
if...else
区块,只要其中一个条件成立,程式就会离开这个区块。 - 条件不需要放
()
之中 - 每个条件后面记得要有
:
- 条件成立要做的事情,要以缩排的方式放在条件句底下
else if
在Python写作elif
补充:
习惯其他语言的人,可能会使用{}
来定义一个程式区块,但是Python中,程式区块是用:
以及缩排来定义的。这点千万要切记啊! 笔者刚用Python每天都少写:
,平白无故花了很多时间debug...
比较运算子
学了if...else
之后,要来教教大家怎么样下各式各样的条件。
运算子 | 效果 |
---|---|
x < y | X是否小于Y |
x <= y | X是否小于等于Y |
x > y | X是否大于Y |
x >= y | X是否大于等于Y |
x == y | X是否等于Y |
x != y | X是否不等于Y |
用上述的比较运算子,我们即可写出各种不同的条件来控制程式的流程,有空一定要自己试试看喔!
布林运算
学了怎么样写出各式各样的条件后,你会不会想到:
如果我想写出复合式的条件怎么办?
那这样时候我们就要依靠布林运算子了:
运算子 | 效果 |
---|---|
a or b | A或B其中一个条件成立就回传True |
a and b | A或B两个条件都成立才回传True |
not A | 如果A为True,则回传False,反之则回传True |
应用这些运算子,我们就可以写出更多有趣的条件,如:
h = 180
w = 85
grade = 80
# 身高超过175或是体重超过80,看起来就很大只
if h > 175 or w > 80:
print('big dude')
# 成绩高于70但是不高于90,就是个普通学生
if grade > 70 and grade < 90:
print('noraml')
H = 180
w = 85
grade = 80