第二章 基本數(shù)據(jù)類型、運算符和表達(dá)式 -1
1.基本數(shù)據(jù)類型
2.運算符
3.常用內(nèi)置函數(shù)
4.表達(dá)式、賦值語句與運算符的優(yōu)先級
5.math庫
數(shù)據(jù)類型概述
數(shù)據(jù)類型
- 計算機(jī)對數(shù)據(jù)進(jìn)行運算的時候,需要確定數(shù)據(jù)的類型和含義
- 確定了數(shù)據(jù)類型,才能確定變量的存儲以及操作
- 計算機(jī)對數(shù)據(jù)的識別和處理有兩個基本要求,確定性和高效性
- Python中常用的數(shù)據(jù)類型包括數(shù)值類型、字符串類型、布爾類型等。
Python我們身邊的計算器
數(shù)值類型
- 整數(shù)
- 浮點數(shù)
- 負(fù)數(shù)
數(shù)值類型的運算
- 數(shù)值運算操作符
- 數(shù)值運算函數(shù)
- math庫
數(shù)值類型
數(shù)值類型
- 表示數(shù)值或數(shù)字的數(shù)據(jù)類型
- 在Python中提供3種數(shù)值類型,整數(shù)、浮點數(shù)和復(fù)數(shù),分別對應(yīng)數(shù)學(xué)中的整數(shù)、實數(shù)和復(fù)數(shù)。
>>> 3+5
8 #整數(shù)
>>> 3.14*2
6.28 #浮點數(shù)
>>> 5+6j #復(fù)數(shù)
(5+6j)
整數(shù)類型
- 與數(shù)學(xué)中的整數(shù)概念一致
- 共有4種進(jìn)制表示:十進(jìn)制、二進(jìn)制、八進(jìn)制和十六進(jìn)制,默認(rèn)采用十進(jìn)制,其他進(jìn)制需要增加引導(dǎo)符(不區(qū)分大小寫)
- 進(jìn)制引導(dǎo)符
- 二進(jìn)制 0b或0B 如:0b101,0B1010
- 八進(jìn)制 0o或0O 如:0o127, 0O345
- 十六進(jìn)制 0x或0X 如:0x12AB, 0x34EF3
- 理論上的取值范圍是[-∞,+ ∞]
- 實際上的取值范圍受限于運行Python程序的計算機(jī)內(nèi)存大小
- 除極大數(shù)的運算外,一般認(rèn)為整數(shù)類型沒有取值范圍限制
>>> 127 #十進(jìn)制數(shù)127
127
>>> 0b1111111 #二進(jìn)制數(shù)
127
>>> 0o177 #八進(jìn)制數(shù)
127
>>> 0x7f #十六進(jìn)制數(shù)
127
>>> #無論輸入的是幾進(jìn)制,輸出默認(rèn)都以十進(jìn)制顯示數(shù)據(jù)
浮點數(shù)類型
- 與數(shù)學(xué)中實數(shù)的概念一致,表示帶有小數(shù)的數(shù)值
- Python要求浮點數(shù)類型必須帶有小數(shù)部分,小數(shù)部分可以是0,以區(qū)分浮點數(shù)和整數(shù),如100.0,100
- 浮點數(shù)有兩種表示方法:
- 十進(jìn)制表示: -55.96,3.1415926
- 科學(xué)計數(shù)法:用e或E作為冪的符號,以10為基數(shù),如 3.1E5表示3.1*10^5
- 數(shù)值范圍和小數(shù)精度受不同計算機(jī)系統(tǒng)的限制
- 浮點運算結(jié)果中最長可輸出17位數(shù)字,然而只有前15位數(shù)字確定是正確的,因此存在“不確尾數(shù)”
- 對于除高精度科學(xué)計算外的絕大部分運算來說,浮點數(shù)類型的數(shù)值范圍和小數(shù)精度足夠“可靠”
- 一般認(rèn)為,浮點數(shù)類型沒有數(shù)值范圍限制,運算結(jié)果準(zhǔn)確
>>> 77.56+88.98
166.54000000000002
>>> 3.14*2.5
7.8500000000000005
>>> 9.6e5
960000.0
>>> 12.56**20
9.5453704557821e+21
數(shù)值類型的運算
數(shù)值運算操作符
+、-、%、//、*、/、+-(正負(fù)號)、**
數(shù)值運算函數(shù)
- abs(x)
- max(x1,x2,x3)
- round(x[,ndigits])
- ……
math庫
- math.sqrt(x)
- math.exp(x)
- math.pow(x,y)
- ……
數(shù)值運算操作符
數(shù)值運算符優(yōu)先級 ,由低→高
+、- → % → // → *、/ → +-(正負(fù)號) → **
| 運算符 |
描述 |
| x+y |
加法,x與y之和 |
| x-y |
減法,x與y之差 |
| x*y |
乘法,x與y之積 |
| x/y |
除法,x與y之商 |
| x//y |
整除(地板除),x與y之整數(shù)商,即:不大于x與y之商的最大整數(shù)。如5/3返回1;-5/3返回-2 |
| x%y |
取余,x與y之商的余數(shù),也成為模運算 |
| -x |
負(fù)號,x的負(fù)值,即:x*(-1) |
| +x |
正號,x本身 |
| x**y |
乘方,x的y次冪,即:x^y,如:2**3返回8 |
注意
- 數(shù)值運算可能改變結(jié)果的數(shù)據(jù)類型,類型的改變與運算符有關(guān)
- 整數(shù)和浮點數(shù)混合運算,輸出結(jié)果是浮點數(shù)
- 整數(shù)之間運算,產(chǎn)生結(jié)果類型與操作符有關(guān),除法運算(/)的結(jié)果是浮點數(shù)
- 整數(shù)或浮點數(shù)與復(fù)數(shù)運算,輸出結(jié)果是復(fù)數(shù)
>>> 77.56+8
85.56
>>> 6/3
2.0
>>> 8%3
2
>>> 8.0%3
2.0
>>>- 8%3
1
>>> 8%-3
-1
#用戶輸入一個整數(shù),由計算機(jī)判斷該數(shù)是偶數(shù)還是奇數(shù)
N=int(input("N="))
if N%2 == 0:
print("該數(shù)是偶數(shù)!")
else:
print("該數(shù)是奇數(shù)")
注意: x//y 返回不大于x與y之商的最大整數(shù)即結(jié)果向- ∞舍入
>>> 50//4
12
>>> 50.0//4
12.0
>>> -50//4
-13
>>> -50.0//4
-13.0
強(qiáng)調(diào)
- 其中二元操作符(+、-、*、/、//、%、**)都可以與賦值符號(=)相連,形成增強(qiáng)賦值操作符,能夠簡化對同一變量賦值語句的表達(dá)
- +=、-=、*=、/=、//=、%=、**=
如:
x=3
x=x+1
相當(dāng)于:
x=3
x+=1
>>> x=25
>>> x%=2 #相當(dāng)于x=x%2
>>>print( x)
1
>>> y=7.0
>>> y*=3 #相當(dāng)于y=y*3
>>> print(y)
21.0
數(shù)值運算函數(shù)
Python解釋器自身提供了一些預(yù)裝函數(shù),用于完成對參數(shù)的特定運算,稱為“內(nèi)置函數(shù)”,其中包括的主要用于數(shù)值運算的函數(shù)如下表所示:
| 函數(shù) |
說明 |
| abs(x) |
返回x的絕對值,x可以為整數(shù)、浮點數(shù)或整數(shù),x為復(fù)數(shù)時,返回它的模 |
| divmod(x,y) |
返回x//y和x%y的結(jié)果 |
| pow(x,y[,z]) |
冪函數(shù),返回x**y和或(x**y)%z的值 |
| round(x[,n]) |
對x進(jìn)行四舍五入,保留n位小數(shù);若省略n,則返回整數(shù);若n為復(fù)數(shù),則對小數(shù)點前n位進(jìn)行四舍五入 |
| max(x1,x2,......xn) |
返回多個參數(shù)中的最大值,n的值沒有限定 |
| min(x1,x2,......xn) |
返回多個參數(shù)中的最小值,n的值沒有限定 |
| sum([x1,x2,......xn]) |
返回數(shù)值型序列中所有元素的和 |
>>> x=-25
>>> y=4
>>> abs(x)
25
>>>divmod(x,y)
(-7,3)
>>> pow(x,y)
390625
>>> pow(x,y,2)
1
>>> round(15.364,1)
15.4
>>>round(15.364,-1)
20.0
>>> max(10,20,15.38)
20
>>> min(10,20,15.38)
10
>>> sum((10,20,15.38))
45.38
math庫
math庫
- math庫是Python的標(biāo)準(zhǔn)庫,提供了諸多的數(shù)學(xué)函數(shù),可以實現(xiàn)整數(shù)和浮點數(shù)的數(shù)學(xué)運算。
- math庫提供了4個數(shù)學(xué)常數(shù)和44個函數(shù)。44個函數(shù)共分為4大類,包括16個數(shù)值表示函數(shù),8個冪對數(shù)函數(shù),16個三對數(shù)函數(shù)和4個高等特殊函數(shù)
- 使用時要引用該庫,格式為:
import math
或from math import *
或from math import <函數(shù)名>
| 常數(shù) |
說明 |
| math.e |
自然對數(shù),值為2.718281828459045 |
| math.pi |
圓周率pi,值為3.141592653589793 |
>>> import math
>>> math.pi*2**2
12.566370614359172
>>> PI=math.pi
>>> round(PI,3)*2**2
12.568
Math庫的常用函數(shù)
| 函數(shù) |
說明 |
| math.fabs(x) |
返回x的絕對值 |
| math.ceil(x) |
返回不小于x的最小整數(shù)(向上取整) |
| math.floor(x) |
返回不大于x的最大整數(shù)(向下取整) |
| math.trunc(x) |
返回x的整數(shù)部分 |
| math.modf(x) |
返回x的小數(shù)和整數(shù) |
| math.fmod(x,y) |
返回x與y的余數(shù),注意與%返回結(jié)果略有不同 |
| math.sqrt(x) |
返回x的平方根 |
| math.pow(x) |
返回x的y次方 |
| math.fsum([x,y,...]) |
返回序列中各元素之和 |
| math.factoria(x) |
返回x的階乘 |
【例2-1】常用math庫函數(shù)舉例
>>> import math
>>> math.fabs(-5) #返回-5絕對值,結(jié)果為浮點數(shù)5.0
5.0
>>> math.ceil(5.2) #返回不小于5.2的最小整數(shù)
6
>>> math.ceil(-5.2) #返回不小于-5.2的最小整數(shù)
-5
>>> math.floor(5.2) #返回不大于5.2的最大整數(shù)
5
>>> math.floor(-5.2) #返回不大于-5.2的最大整數(shù)
-6
>>> math.trunc(5.6) #返回5.2的整數(shù)部分
5
>>> math.modf(5.2) #返回5.2的小數(shù)和整數(shù)
(0.20000000000000018, 5.0)
>>> math.fmod(5,3) #返回5除以2的余數(shù)
2.0
【例2-1】常用math庫函數(shù)舉例
>>> math.sqrt(3) #返回正數(shù)的平方根
1.7320508075688772
>>> math.sqrt(-3) #負(fù)數(shù)出錯
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> math.pow(5,3) #返回5的3次方
125.0
>>> 0.1+0.2+0.3
0.6000000000000001
>>> math.fsum([0.1, 0.2, 0.3]) #精確求和
0.6
>>> math.factorial(5) #返回5的階乘
120
【例2-2】math庫函數(shù)應(yīng)用實例。分別輸入三角形的三條邊長,求三角形的面積、周長、最長邊長和最短邊長。
提示
- 根據(jù)海倫公式,p=(a+b+c)/2,S=√[p(p-a)(p-b)(p-c)]
- 假設(shè)輸入的三條邊滿足 a>0 and b>0 and c>0 and a+b>c and b+c>a and a+c>b
#E2-2.py
import math
a=float(input("a="))
b=float(input("b="))
c=float(input("c="))
p=(a+b+c)/2
area=math.sqrt(p*(p-a)*(p-b)*(p-c))
circum=a+b+c
max_side=max(a,b,c)
min_side=min(a,b,c)
print("面積:",area)
print("周長:",circum)
print("長邊為:",max_side)
print("短邊為 :",min_side)
math庫的其它函數(shù)(了解)
| 函數(shù) |
說明 |
| math.gcd(x,y) |
返回整數(shù)x和y的最大公約數(shù) |
| math.degrees(x) |
將弧度轉(zhuǎn)換為度 |
| math.radians(x) |
將度轉(zhuǎn)換為弧度 |
| math.sin(x) |
返回x(弧度)的三角正弦值 |
| math.asin(x) |
返回x的反三角正弦值 |
| math.cos(x) |
返回x(弧度)的三角余弦值 |
| math.acos(x) |
返回x的反三角余弦值 |
| math.tan(x) |
返回x(弧度)的三角正切值 |
| math.atan(x) |
返回x的反三角正切值 |
| math.atan2(x,y) |
返回x/y的反三角正切值 |
賦值語句
>>> a=3
>>> b=5
>>> a+b
8
>>> a,b=3,5
>>> a+b
8
>>> a=3;b=5
>>> a+b
8
>>> x=y=9
>>> x
9
>>> y
9
- Python中,賦值運算符
=表示“賦值”,即將等號右側(cè)表達(dá)式的計算結(jié)果賦給左側(cè)變量,包含等號(=)的語句稱為“賦值語句”:
<變量> = <表達(dá)式>
- 此外,還有一種同步賦值語句,同時給多個變量并行賦值:
< 變量1>, …, < 變量N> = < 表達(dá)式1>, …, < 表達(dá)式N>
也可以寫成:
< 變量1>=< 表達(dá)式1>;< 變量2>=< 表達(dá)式2>;……<變量N> =< 表達(dá)式N>
- 鏈?zhǔn)劫x值 將同一個值賦給多個變量
<變量1>=<變量2>=…=<變量n >=<表達(dá)式>
【例2-3】編寫程序輸入兩個數(shù)分別賦給變量x和y,交換變量x和y的值,并輸出
#方法一
x=float(input("x="))
y=float(input("y="))
t=x
x=y
y=t
print("x=",x)
print("y=",y)
#方法二
x=float(input("x="))
y=float(input("y="))
x,y=y,x
print("x=",x)
print("y=",y)