2 變量資料類型和運算符
- 1 資料類型
- 1.1 基礎類型
- 1.2 類型判斷
- 2. 運算符和表達式
- 2.1 算術運算符
- 2.2 模運算說明
- 2.3 數學函數
- 2.4 随機函數
- 注意
- 2.5 指派運算符
- 2.6 關系運算
- 2.7 邏輯運算
- 2.7.1 邏輯與
- 2.7.2 邏輯或
- 2.7.3 邏輯非
- 2.8 短路計算
- 2.9 注意事項
- 2.10 身份運算符
- 2.11 成員運算符
- 2.12 if-else表達式
1 資料類型
不同類型的變量可以進行的運算是不同的,是以必須了解變量的類型,python中資料類型可以分為:
- 内置類型
- 數值類型:整型int,浮點型float,複數(complex) 3+5j
- str:字元串
- bool:布爾值【True,False】
- None:空值,表示變量沒有确定的值
- list:清單
- tuple:元組
- dict:字典
- set:集合
- 自定義類型
- class :類
1.1 基礎類型
- 數值類型:
- 整型(int): python3中隻有int一種,可以表示整數,例如:10,-5,10000
- 浮點型(float): 表示帶小數點的實數,有兩種表示法:
- 小數表示: 1.9 .23
- 科學計數法: 用e來表示10的指數,1e2就代表了100,注意e前面必須有數值,e後面必須為整數
- 複數(complex):表示數學上的無理數,形如:a+bj
- 布爾型(bool):表示事務的兩種狀态,男女、陰晴、亮暗等,它隻有兩個值:True,False
- None:表示空對象,一般用于判斷,不同于0和空字元
- 字元串(str):在python中,用引号(單引号、雙引号、三引号)表示字元串
- 字元串的表示
# 用單引号表示: 'hello'
# 用雙引号表示:"我用python"
# 用3個單引号表示:可以表示多行文本,例如:
'''偉大
的
祖國
'''
# 用3個雙引号表示:可以表示多行文本,例如:
"""生死看淡,
不服就幹"""
- 轉義字元:有些特殊字元無法從鍵盤輸入,可以使用轉義字元表示,另外,無論是單引号、雙引号還是三引号字元串,其中引号是字元串界定符,引号并不是字元串的内容,那麼如何在單引号字元串中表示一個單引号呢,這也可以使用轉義字元表示。常見的轉義字元
轉義字元 | 描述 | 轉義字元 | 描述 |
| 表示一個普通字元單引号 | \n | 換行 |
| 表示一個普通字元雙引号 | \r | 回車 |
| 一個普通的三單引号 | | 一個普通的字元\ |
| 一個普通的三雙引号 | \a | 響鈴 |
\t | tab鍵 | \b | 回删一個字元 |
- 字元串編碼:計算機隻能識别二進制,那麼字元串如何存儲到計算機裡呢
計算機不能直接存儲字元串,但我們可以将字元編碼,例如用65表示大寫字元A,66表示大寫字元B....等這種表示方式就是美國類的ASCII碼,隻能表示127個字元,但對于美國人來說已經足夠了。一但能用整數表示字元,我們可以很友善的把整數用二進制表示,那麼字元串也就和容易存儲到計算機了。
但還有很多其他國家的語言是不能用ASCII表示的,所有ISO組織就推出了unicode碼,用來表示任何一種語言的字元,unicode碼也稱之為萬國碼,通用碼,可以表示任何一種語言的任何一個字元。unicdoe碼有多中表示方式,例如:utf-8、utf-16、utf-32等。一般使用較多的是utf-8,utf-8是一種變長的編碼,表示一個字元可能用一個位元組,也可能是三個位元組
中文常用編碼一般用GBK編碼,用2個位元組表示一個漢字
1.2 類型判斷
我們可以使用type和isinstance來測試和判斷資料類型
#type用法:
type(obj)
功能:傳回obj的資料類型
參數:obj是你要測試變量或數值
示例:
age = 10
name = 'hello'
print(type(name),type(age))
#判斷變量是否是指定類型
if type(age) is int:
print('是')
else:
print('否')
#isinstance用法:
isinstance(obj,typename)
功能:判斷obj是否是指定類型,是傳回True,否傳回False
參數: objobj是你要判斷的變量或數值
typename是指定資料類型,可以是int,float,str等。也可是一個
類型的元組,例如:(int,float)
示例:
age = 10
name = 'hello'
print(isinstance(age,int))
print(isinstance(name,(str,int)) #隻要name是str或int的一種就傳回True
if isinstance(age,int):
print('是')
else:
print('否')
#type和isinstance的差別
type判斷基本類型是沒問題的,但無法判斷子類對象是父類的一種
isinstance可以判斷子類對象是父類的一種
class A:
pass
class B(A):
pass
objA = A()
objB = B()
#輸出否
if type(objB) is A:
print('是')
else:
print('否')
print(isinstance(objB,A)) #True
結論:優先使用isinstance
2. 運算符和表達式
在數學上為了計算結果,我們會寫一些式子計算,例如:
30 + 5
這是數學中的計算式,python中為了計算也有類似的式子,叫表達式。在表達式中30和5稱作操作數,+稱之運算符。表達式的目的在于計算結果。表達式構成:
- 最基本的表達式就是一些數值,變量、函數,例如: 3, a(變量) print(‘hello’)
- 由基本表達式加上适當的運算符構成複雜的表達式: 3 + a
綜合上述,所謂表達式就是由操作數和運算符組成䄦符合python文法的式子。要寫表達式首先要學習運算符。關于運算符要知道兩件事情
- 計算順序 : 是從左向右算還是從右向左算
- 優先級 : 比如先乘除後加減
2.1 算術運算符
a = 20
b = 10
運算符 | 說明 | 示例 |
- | 負号,取原數的相反數 | a = 10 print(-a) #-10 |
+ - * / | 加減乘除,同數學上一樣 | a + b = 30 a - b = 10 a * b = 200 a / b = 2 |
% | 模運算,即求 a整除以b的餘數 | a % 10 = 0 |
// | 整除 | a // b = 2 |
** | 對運算符進行指數(幂)計算 | a ** b 表示20的10次方 |
2.2 模運算說明
- 模運算的符号取決于第二個操作數(右操作數)
- 模運算的計算公式:r = a % b = a - n * b,其中n是小于a/b的最大整數
- 整除(//)運算如果有一個操作數是浮點數,結果是浮點數
- 用途:判斷奇偶、判斷是否能夠整除、最大公約數、水仙花數
2.3 數學函數
函數名 | 函數的說明 | 示例 |
abs | 取絕對值 | abs(-10) |
pow(x,y) | x的y次方 | pow(10,2)求10的平方 |
round(x,[n]) | 浮點數的4舍5入, n代表保留小數的位數 | round(3.456) |
max() | 求給定參數的最大值 | max(21,43,65,75,86,32,3,45) |
min() | 求給定參數的最小值 | min(21,43,65,75,86,32,3,45) |
math.ceil() | 需要導入import math庫 向上取整 | math.ceil(18.1) #19 |
math.floor() | 需要導入import math庫 向下取整 | math.floor(18.1) #18 |
math.sqrt | 需要導入import math庫 求平方根 | math.sqrt(100) |
python3.5.2中文幫助文檔 |
2.4 随機函數
擷取随機數,需要引入random庫。
import random
函數名 | 函數說明 |
random.randrange(start,stop,step) | start 指定範圍的起始值 包含本身,預設是0;stop 指定範圍的結束值 不包含本身; step 步長,預設步長是1。該函數傳回一個整數 |
random.randint(start,end) | 傳回[start end]之間的一個随機整數,start必須小于end |
random.random() | 傳回一個[0.0,1.0)之間的随機小數 |
注意
- 優先級: ** >正負号 > // % * / > + -
- 從左向右算
- 在幂運算和一進制運算符聯合計算時,從右向左算,例如: -1 ** 2 = -1
2.5 指派運算符
a = 5; b = 10; c = 20
運算符 | 說明 | 示例 |
= | 簡單指派, 将b+c的結果賦給a | a = b +c #a=30 |
+= | a += b等價于 a = a +b | a = 15 |
-= | a -= b等價于 a = a - b | a = -5 |
*= | a *= b等價于 a = a * b | a = 50 |
/= | a /= b 等價于a = a / b | a = 0.5 |
%= | a %= b等價于a = a % b | a = 5 |
//= | a //= b等價于 a = a // b | a = 0 |
**= | a **= b等價于a = a ** b |
注意:
- 指派運算符左邊必須是變量
- 從右向左算
- 沒有指派表達式
- 所有指派運算符優先級相同,指派運算符優先級非常低,僅高于成員運算符和身份運算符、邏輯運算符
- 注意在複合指派中
a = 2
b = 3
a *= b + 2 #等價于 a = a * (b + 2)
print(a) # a = 10
2.6 關系運算
關系運算就是比較運算,如果表達式成立,傳回True,否則傳回False。關系運算的結果是布爾值。
運算符 | 示例 | 說明 |
== | a == b | a和b值相等,結果是True,a和b值不相等結果為False |
!= | a != b | a不等于b 結果為True,否則結果為True |
> | a > b | a大于b結果為True,否則為False |
>= | a >= b | a大于等于b結果為True,否則為False |
< | a < b | a小于b結果為True,否則為False |
<= | a <= b | a小于等于b結果為True,否則為False |
注意:
- 優先級: 比較運算符優先級相同
- 從左向右算
- 可以這樣算:
等價于 a > 1 and a < 31 < a < 3
2.7 邏輯運算
邏輯運算符可以用于構造複雜條件。邏輯運算符包括:
- 邏輯與 and 對應漢語的意思是“并且” 、 “同時”
- 邏輯或 or 對應漢語意思為"或者"
- 邏輯非 not 對應漢語意思為”相反“
在邏輯運算中,False、None、0、0.0、‘’(空字元串)被看做假(False),其它的看做真(True)
2.7.1 邏輯與
a | b | a and b |
真 | 任意值 | b的值 |
假 | 任意值 | a的值 |
- 表達式 a and b的值為: 如果a為真,結果為b的值,否則結果是a的值
2.7.2 邏輯或
a | b | a or b |
真 | 任意值 | a的值 |
假 | 任意值 | b的值 |
- 表達式a or b的值為:如果a為真結果為a的值,否則結果是b的值
2.7.3 邏輯非
a | not a |
真 | False |
假 | True |
小結:a為真則表達式為False,否則表達式為True
2.8 短路計算
- 對于邏輯與表達式 a and b,如果a為假,則不計算b
- 對于邏輯或表達式 a or b ,如果a為真,則不計算b
2.9 注意事項
- 優先級 not > and >or
2.10 身份運算符
is: 判斷兩個辨別符是否引用自同一個實體【對象】,比較的是兩個對象的id是否一樣,如果相同為真,否則為假
is not:判斷兩個辨別符是不是引用自不同的實體【對象】如果兩個對象的id不同結果為真,否則為假
id()函數擷取實體的id(位址)
注意:is和==的差別
- is用于判斷兩個變量引用實體是否為同一個【id】
- ==用于判斷兩個變量的值是否相同,但id不一定相同
2.11 成員運算符
主要應用在序列中
in:如果在指定的序列中找到指定的值,則傳回True,否則傳回False
not in:如果在指定的序列中未找到指定的值,則傳回True,否則傳回False
2.12 if-else表達式
表達式1 if 條件 else 表達式2