天天看點

Day02-變量_資料類型和運算符

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次方

####模運算說明

  • 模運算的符号取決于第二個操作數(右操作數)
  • 模運算的計算公式:r = a % b = a - n * b,其中n是小于a/b的最大整數
  • 整除(//)運算如果有一個操作數是浮點數,結果是浮點數
  • 用途:判斷奇偶、判斷是否能夠整除、最大公約數、水仙花數

數學函數

函數名 函數的說明 示例
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中文幫助文檔 ​​https://yiyibooks.cn/xx/python_352/index.html​​

随機函數

擷取随機數,需要引入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.2 指派運算符

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.3 關系運算

關系運算就是比較運算,如果表達式成立,傳回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

注意:

  • 優先級: 比較運算符優先級相同
  • 從左向右算
  • 可以這樣算:​

    ​1 < a < 3​

    ​ 等價于 a > 1 and a < 3

2.4 邏輯運算

邏輯運算符可以用于構造複雜條件。邏輯運算符包括:

  • 邏輯與 and 對應漢語的意思是“并且” 、 “同時”
  • 邏輯或 or 對應漢語意思為"或者"
  • 邏輯非 not 對應漢語意思為”相反“

在邏輯運算中,False、None、0、0.0、‘’(空字元串)被看做假(False),其它的看做真(True)

2.4.1 邏輯與

a b a and b
任意值 b的值
任意值 a的值
  • 表達式 a and b的值為: 如果a為真,結果為b的值,否則結果是a的值

2.4.2 邏輯或

a b a or b
任意值 a的值
任意值 b的值
  • 表達式a or b的值為:如果a為真結果為a的值,否則結果是b的值

2.4.3 邏輯非

a not a
False
True

小結:a為真則表達式為False,否則表達式為True

2.4 短路計算

  • 對于邏輯與表達式 a and b,如果a為假,則不計算b
  • 對于邏輯或表達式 a or b ,如果a為真,則不計算b

2.4.5 注意事項

  • 優先級 not > and >or

2.5 身份運算符

is: 判斷兩個辨別符是否引用自同一個實體【對象】,比較的是兩個對象的id是否一樣,如果相同為真,否則為假

is not:判斷兩個辨別符是不是引用自不同的實體【對象】如果兩個對象的id不同結果為真,否則為假

id()函數擷取實體的id(位址)

注意:is和==的差別

  • is用于判斷兩個變量引用實體是否為同一個【id】
  • ==用于判斷兩個變量的值是否相同,但id不一定相同

2.6 成員運算符

主要應用在序列中

in:如果在指定的序列中找到指定的值,則傳回True,否則傳回False

not in:如果在指定的序列中未找到指定的值,則傳回True,否則傳回False

2.7 if-else表達式

表達式1 if 條件 else 表達式2