python之父
the best way to learn a programming language is to write a lot of code and read a lot of code.
每个游戏都有某种需要累计的分数;在屏幕上绘制图形时必须使用数字来确定图形的位置和颜色;移动的物体会有方向和速度,这都要用数字来描述。所有有意思的程序几乎都会以某种方式使用数字和数学。所以下面就来学习pyhton中有关数学和数字的一些基础知识。
四大基本运算
在第1篇中我们已经看到python可以做一些数学运算:使用加号(+)完成加法,另外使用星号(*)完成乘法。
如你所料,python使用连字号(-)(也称为减号)来做减法:
由于计算机键盘上没有除号(÷),所以所有程序都使用前斜杠(/)表示除法。
不过有时python做除法时会得到意外的结果:
所有人都知道
3 / 2 = 1.5
这到底是怎么回事?
我先给你解释下这几个术语
整数(integer)就是我们平常数数时所说的数,如1、2、3等,另外还包括0和负数,如-1、-2、-3等。
小数(decimal number)也称为实数(real number),这些数有小数点而且后面有小数位,如1.25、0.3752和-101.2。
在计算机编程中,小数也称为浮点数(floating-point number,有时简写为floats,或者如果只有一个浮点数,就简写float)。这是因为小数点会“浮动”。如0.00123456或12345.6都是浮点数。
现在我们来看看刚刚那个例子。
因为你输入的3和2都是整数,所以pyhton认为你同样想要整数作为答案。它会把答案1.5取整为最接近的整数,也就是1。换句话说,python完成了不带余数的除法。
要解决这个问题,可以这样试试看:
这样就好多了!如果把两个数中的任何一个作为小数输入,python就会知道你想在答案中保留小部分。
要记住python的这种整除行为。因为bug或者错误就是经由这样一些途径悄悄出现在你的代码中的。
操作符
+ 、 - 、 * 和 / 符号都称为操作符。这是因为它们会“操作”或处理放在符号两边的数字。
=号也是一个操作符,这称为赋值操作符(assignment operator),因为我们用它为一个变量赋值。
我们再来看看,如果把3乘5次,可以写成:
如果我们要是把3乘100次呢?
要我们写出100次乘法,这很浪费时间。
其实,python用了一个双星号(**)来表示指数或者将一个数自乘为一个幂。你可以这样写出刚刚上述的例子:
这样键入是不是更容易一些呢!不过用了一个双星号(**)来表示指数,更重要的原因是,可以用来作非整数的指数运算,如下:
而要想利用乘法来做到这一点可不容易。
我们再来看一个除法例子,如果两个数不能整除,最后会得到一个余数(remainder):
7 / 2 = 3 ,余数是1
7 / 2的答案中有一个商(quotient),在这里就是3,还有一个余数1。如果在python中将两个整数相除,它会给你商。不过余数呢?
python有一个特殊的操作符来计算整数相除的余数。这称为取余操作符,这个符号是百分号(%)。可以像这样使用:
所以如果同时使用 / 和 %,就可以得到整数相除的完整答案:
可以看到,7除以2得3,余数是1。如果做浮点数除法,会得到小数答案:
以上算术操作符加(+)、减(-)、乘(*)、除(/)、指数(求幂)(**)和取余(%),在程序中需要的99%的操作符就是六个操作符。
自增和自减
操作符:+=(自增)和 -=(自减),在编程中经常出现。我们可以将它们认为是一个赋值运算的简写方式,如:
score = score + 1
我们可以简写成:
score += 1
举例说明一下:
或者
其中第一个例子将number增1(这会从7变成8)。第二个例子将number减去1(从7变成6)。
e记法
我们来试试在idle中写下以下两个数字:
27000000000000000000000
和
0.000000000000000000032
看到这么多0,数不数得对还是个问题。
不过,在python中,我们是可以用e记法来写的。如上两个数字,我们可以写成:
2.7e22或2.7e22
3.2e-20或3.2e-20
这就是e记法,和我们学习的数学一样。
但是,我们不要把指数求幂(**)与e记法(e或e)弄混了。
3**5 表示 3 * 3 * 3 * 3 * 3,等于243。
3e5 表示 3 * 10 * 10 * 10 * 10 * 10,等于30000.0。
我们可以看到e记法是个浮点数。
运算顺序
下面哪一个正确?
2 + 3 * 4 = 20
还是
2 + 3 * 4 = 14
这要看你采用什么顺序来计算。如果先做加法,会得到
2 + 3 = 5
然后得到
5 * 4 = 20
如果先做乘法,就会得到
3 * 4 = 12
然后是
2 + 12 = 14
第二个顺序是正确的,所以正确答案是14。
在数学中有一种运算顺序(order of operation),指定了先计算哪些操作符,后计算哪些操作符,而不管它们的书写顺序如何。
在我们的这个例子中尽管 + 号在 * 号前面,但是应当先算乘法。python会遵循正确的数学规则,所以它会先做乘法再做加法。可以在交互模式中试试看能不能得到这个结果:
可以看到,python使用的顺序与你在数学课上学到的规则完全相同。指数运算最优先,然后是乘法,再后面是加减运算。
如果想先算2+3该怎么办呢?
我们只需要在它两边加上括号(()),比如:
这一次,python会先做2+3(因为有括号),可以得到5,然后再做乘法5*4,得到20。
再强调一次,python的运算顺序与数学课上讲的是一样的。
end