1. 程式人生 > >第3章:基本資料型別

第3章:基本資料型別

註明:本系列課程專為全國計算機等級考試二級 Python 語言程式設計考試服務

目錄

考綱考點

知識導圖

1、數字型別

數字型別

整數型別

浮點數型別

複數型別

2、數字型別的運算

數值運算操作符

3、字串型別及格式化

字串型別

字串的索引

字串的切片

format()方法的基本使用

format()方法的格式控制

4、字串型別的操作

字串操作符

字串處理函式

字串處理方法

5、型別判斷和型別間轉換

數字型別的轉換

6、例項解析:愷撒密碼

愷撒密碼-加密

愷撒密碼-解密

本章小結


考綱考點

  • 數字型別:整數型別、浮點數型別和複數型別
  • 數字型別的運算:數值運算操作符、數值運算函式
  • 字串型別及格式化:索引、切片、基本的format()格式化方法
  • 字串型別的操作:字串操作符、處理函式和處理方法
  • 型別判斷和型別間轉換

知識導圖

 

1、數字型別

數字型別

  • Python語言提供3種數字型別:整數型別、浮點數型別和複數型別,分別對應數學中的整數、實數和複數。
  • 1010是一個整數型別,10.10是一個浮點數型別,10 + 10j是一個複數型別。

整數型別

  • 與數學中的整數概念一致,沒有取值範圍限制
  • 整數型別有4種進製表示:十進位制、二進位制、八進位制和十六進位制。預設情況,整數採用十進位制,其他進位制需要增加引導符號
  • 示例

• 1010, -1010, 0b1010, 0o1010, 0x1010

進位制種類 引導符號 描述
十進位制 預設情況,例:1010,-1010
二進位制 0b或0B 由字元0和1組成,例:0b1010,0B1010
八進位制 0o或0O 由字元0到7組成,例:0o1010,0O1010
十六進位制 0x或0X 由字元0到9、a到f或A到F組成,例:0x1010

 

  • 不同進位制的整數之間可以直接運算

浮點數型別

  • 帶有小數點及小數的數字
  • Python語言中的浮點數型別必須帶有小數部分,小數部分可以是0。例如:1010是整數,1010.0是浮點數。
  • 浮點數有2種表示方法:十進位制形式的一般表示科學計數法表示。除十進位制外,浮點數沒有其他進製表示形式。
  • 下面是浮點數型別的例子:
  • 1010.0, -1010., 1.01e3, -1.01E-3
  • 科學計數法使用字母e或者E作為冪的符號,以10為基數,含義如下:

<a>e<b> = a*10^b

  • 上例中,1.01e3值為1010.0;-1.01E-3值為0.00101。
  • Python浮點數型別的數值範圍和小數精度受不同計算機系統的限制。除高精度科學計算外的絕大部分運算來說,浮點數型別的數值範圍和小數精度足夠“可靠”。
>>> 1234567890.987654321 * 1234567890.987654321
1.5241578774577044e+18
>>> 9876543210.123456789 / 1234567890.987654321
8.000000066600002

複數型別

  • 複數型別表示數學中的複數。複數有一個基本單位元素j,叫作“虛數單位”。含有虛數單位的數被稱為複數。例如:

11.3+4j     -5.6+7j      1.23e-4+5.67e+89j

  • Python語言中,複數可以看作是二元有序實數對(a, b),表示為:a + bj,其中,a是實數部分,簡稱實部,b是虛數部分,簡稱虛部。虛數部分通過後綴“J”或者“j”來表示。需要注意,當b為1時,1不能省略,即 1j表示複數,而j則表示Python程式中的一個變數。
  • 複數型別中實部和虛部都是浮點型別,對於複數z,可以用z.real和z.imag分別獲得它的實數部分和虛數部分
>>> (1.23e4+5.67e4j).real
12300.0
>>> (1.23e4+5.67e4j).imag
56700.0
>>> 1.23e4+5.67e4j.imag     # 先獲得5.67e4j的虛部,再與1.23e4進行求和計算
69000.0

2、數字型別的運算

數值運算操作符

  • Python提供了9個基本的數值運算操作符
操作符 描述
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 x的負值,即:x * (-1)
+x x本身
x ** y x的y次冪,即:x^y
  • 上標所有二元運算操作符(+、-、*、/、//、%、**)都可以與等號(=)相連,形成增強賦值操作符(+=、-=、*=、/=、//=、%=、**=)。用op表示這些二元運算操作符,增強賦值操作符的用法如下:

x op= y 等價於 x = x op y

>>> x = 99
>>> x **= 3   # 與x = x**3等價
>>> print(x)
970299

數值運算可能改變結果的資料型別,型別的改變與運算子有關,有如下基本規則:

  • 整數和浮點數混合運算,輸出結果是浮點數;
  • 整數之間運算,產生結果型別與操作符相關,/ 運算的結果是浮點數;
  • 整數或浮點數與複數運算,輸出結果是複數。
>>> 1010 / 10         # / 運算的結果是浮點數
101.0
>>> 1010.0 // 3       # 浮點數與整數運算,產生結果是浮點數
336.0
>>> 1010.0 % 3        # 浮點數與整數運算,產生結果是浮點數
2.0
>>> 10 - 1 + 1j       
(9+1j)
  • Python直譯器提供了一些內建函式,在這些內建函式之中,有6個函式與數值運算相關
函式 描述
abs(x) x的絕對值
divmod(x, y) (x//y, x%y),輸出為二元組形式(也稱為元組型別)
pow(x, y[, z]) (x**y)%z,[..]表示該引數可以省略,即:pow(x,y),它與x**y相同
round(x[, ndigits]) 對x四捨五入,保留ndigits位小數。round(x)返回四捨五入的整數值
max(x1,x2,...,xn) x1, x2, …, xn的最大值,n沒有限定
min(x1,x2,...,xn) x1, x2, …, xn的最小值,n沒有限定

3、字串型別及格式化

字串型別

  • 字串是字元的序列表示,根據字串的內容多少分為單行字串和多行字串。
  • 單行字串可以由一對單引號(')或雙引號(")作為邊界來表示,單引號和雙引號作用相同。
  • 多行字串可以由一對三單引號(''')或三雙引號(""")作為邊界來表示,兩者作用相同。
>>> print('這是"單行字串"')
這是"單行字串"
>>> print("這是'單行字串'")
這是'單行字串'
>>> print("""這是'多行字串'的第一行
這是'多行字串'的第二行
""")
這是'多行字串'的第一行
這是'多行字串'的第二行
  • Python語言轉義符: \
  • 例如:\n表示換行、\\表示反斜槓、\'表示單引號、\"表示雙引號、\t表示製表符(TAB)等。
>>> print("既需要'單引號'又需要\"雙引號\"")
既需要'單引號'又需要"雙引號"

字串的索引

  • 字串是一個字元序列:字串最左端位置標記為0,依次增加。對字串中某個字元的檢索被稱為索引。索引的使用方式如下:

<字串或字串變數>[序號]

  • 如果字串長度為L,正向遞增需要以最左側字元序號為0,向右依次遞增,最右側字元序號為L-1;反向遞減序號以最右側字元序號為-1,向左依次遞減,最左側字元序號為-L。
  • 字串以Unicode編碼儲存,字串的英文字元和中文字元都算作1個字元。
>>> "青青子衿,悠悠我心。"[-5]
'悠'
>>> s = "青青子衿,悠悠我心。"
>>> s[5]
'悠'

字串的切片

  • 對字串中某個子串或區間的檢索被稱為切片。切片的使用方式如下:

<字串或字串變數>[N: M]    #包含N不包含M

>>> "青青子衿,悠悠我心。"[8:4]
''
>>> "青青子衿,悠悠我心。"[:4]
'青青子衿'
>>> "青青子衿,悠悠我心。"[5:]
'悠悠我心。'
>>> print("青青子衿,悠悠我心。"[5:])
悠悠我心。

format()方法的基本使用

  • 字串format()方法的基本使用格式是:

<模板字串>.format(<逗號分隔的引數>)

其中,模板字串是一個由字串和槽組成的字串,用來控制字串和變數的顯示效果。槽用大括號({})表示,對應format()方法中逗號分隔的引數。

>>> "{}曰:學而時習之,不亦說乎。".format("孔子")
'孔子曰:學而時習之,不亦說乎。'
  • 如果模板字串有多個槽,且槽內沒有指定序號,則按照槽出現的順序分別對應.format()方法中的不同引數。
>>> "{}曰:學而時習之,不亦{}。".format("孔子","說乎")
'孔子曰:學而時習之,不亦說乎。'
  • 可以通過format()引數的序號在模板字串槽中指定引數的使用,引數從0開始編號
>>> "{1}曰:學而時習之,不亦{0}。".format("說乎","孔子")
'孔子曰:學而時習之,不亦說乎。'

>>> "{1}曰:{{學而時習之,不亦{0}}}。".format("說乎","孔子")
'孔子曰:{學而時習之,不亦說乎}。'

format()方法的格式控制

  • format()方法中模板字串的槽除了包括引數序號,還可以包括格式控制資訊。

{<引數序號>: <格式控制標記>}

  • 其中,格式控制標記用來控制引數顯示時的格式 。格式控制標記包括:<填充><對齊><寬度>,<.精度><型別>6個欄位,這些欄位都是可選的,可以組合使用
      :    <填充>    <對齊>      <寬度>               ,            <.精度>       <型別>
引導符號 用於填充的單個字元

<   左對齊

>   右對齊

^   居中對齊

槽的設定輸出寬度 數字的千位分隔符,適用於整數和浮點數 浮點數小數部分的精度或字串的最大輸出長度

整數型別

b, c, d, o, x, X

浮點數型別

e, E, f, %

  • <填充>、<對齊>和<寬度>主要用於對顯示格式的規範。
  • 寬度指當前槽的設定輸出字元寬度,如果該槽引數實際值比寬度設定值大,則使用引數實際長度。如果該值的實際位數小於指定寬度,則按照對齊指定方式在寬度內對齊,預設以空格字元補充。
  • 對齊欄位分別使用<、>和^三個符號表示左對齊、右對齊和居中對齊。
  • 填充欄位可以修改預設填充字元,填充字元只能有一個。
>>>s = "等級考試"
>>>"{:25}".format(s) #左對齊,預設
'等級考試                     '
>>>"{:^25}".format(s) #居中對齊
'          等級考試           '
>>>"{:>25}".format(s) #右對齊
'                     等級考試'
>>>"{:*^25}".format(s) #居中對齊且填充*號
'**********等級考試***********'
>>>"{:+^25}".format(s) #居中對齊且填充+號
'++++++++++等級考試+++++++++++'
>>>"{:十^25}".format(s) #居中對齊且填充漢字“十”
'十十十十十十十十十十等級考試十十十十十十十十十十十'
>>>"{:^1}".format(s) #z指定寬度為1,不足變數s的寬度
'等級考試'
  • <.精度><型別>主要用於對數值本身的規範
  • <.精度>由小數點(.)開頭。對於浮點數,精度表示小數部分輸出的有效位數。對於字串,精度表示輸出的最大長度。小數點可以理解為對數值的有效截斷。
>>>"{:.2f}".format(12345.67890)
'12345.68'
>>> "{:>25.3f}".format(12345.67890)
'                12345.679'
>>>"{:.5}".format("全國計算機等級考試")
'全國計算機'
  • <型別>表示輸出整數和浮點數型別的格式規則。
  • n 對於整數型別,輸出格式包括6種:

• b: 輸出整數的二進位制方式;

• c: 輸出整數對應的Unicode字元;

• d: 輸出整數的十進位制方式;

• o: 輸出整數的八進位制方式;

• x: 輸出整數的小寫十六進位制方式;

• X: 輸出整數的大寫十六進位制方式;

>>>"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425)
'110101001,Ʃ,425,651,1a9,1A9'
  • 對於浮點數型別,輸出格式包括4種:

• e: 輸出浮點數對應的小寫字母e的指數形式;

• E: 輸出浮點數對應的大寫字母E的指數形式;

• f: 輸出浮點數的標準浮點形式;

• %: 輸出浮點數的百分形式。

>>>"{0:e},{0:E},{0:f},{0:%}".format(3.14)
'3.140000e+00,3.140000E+00,3.140000,314.000000%'
>>>"{0:.2e},{0:.2E},{0:.2f},{0:.2%}".format(3.14) # 對比輸出
'3.14e+00,3.14E+00,3.14,314.00%'
  • 常用的format()方法格式控制資訊
>>>"{:.2f}".format(3.1415926) # 輸出小數點後兩位
'3.14'
>>>"{:x}".format(1010) # 輸出整數的十六機制形式
'3f2'
>>>"{:.5}".format("這是一個很長的字串") # 輸出字串的前5位
'這是一個很'
>>>"{:-^10}".format("PYTHON") # 居中並填充
'--PYTHON--'

4、字串型別的操作

字串操作符

  • 針對字串,Python語言提供了幾個基本操作符
操作符 描述
x + y 連線兩個字串x與y
x * n 或 n * x  複製n次字串x
x in s 如果x是s的子串,返回True,否則返回False
>>>name = "Python語言" + "程式設計"
>>>name
'Python語言程式設計'
>>>"等級考試!" * 3
'等級考試!等級考試!等級考試!'
>>>"語言" in name
True
>>>'Y' in name
False

字串處理函式

  • Python語言提供了一些對字串處理的內建函式
函式 描述
len(x) 返回字串x的長度,也可返回其他組合資料型別的元素個數
str(x) 返回任意型別x所對應的字串形式
chr(x) 返回Unicode編碼x對應的單字元
ord(x) 返回單字元x表示的Unicode編碼
hex(x) 返回整數x對應十六進位制數的小寫形式字串
oct(x) 返回整數x對應八進位制數的小寫形式字串
>>>len("全國計算機等級考試Python語言科目")
19
>>>chr(10000)
'✐‘
>>>hex(1010)
'0x3f2'

字串處理方法

  • 方法也是一個函式,只是呼叫方式不同。函式採用func(x)方式呼叫,而方法則採用<a>.func(x)形式呼叫。方法僅作用於前導物件<a>。
方法 描述
str.lower() 返回字串str的副本,全部字元小寫
str.upper() 返回字串str的副本,全部字元大寫
str.split(sep=None) 返回一個列表,由str根據sep被分割的部分構成
str.count(sub) 返回sub子串出現的次數
str.replace(old, new) 返回字串str的副本,所有old子串被替換為new
str.center(width, fillchar) 字串居中函式,fillchar引數可選
str.strip(chars) 從字串str中去掉在其左側和右側chars中列出的字元
str.join(iter) 將iter變數的每一個元素後增加一個str字串
  • str.split(sep) 能夠根據sep分隔字串str,分割後的內容以列表型別返回。
>>>"Python is an excellent language.".split()
['Python', 'is', 'an', 'excellent', 'language.']
>>>"Python is an excellent language.".split('a')
['Python is ', 'n excellent l', 'ngu', 'ge.']
>>>"Python is an excellent language.".split('an')
['Python is ', ' excellent l', 'guage.']
  • str.count(sub)方法返回字串str中出現sub的次數,sub是一個字串。
>>>"Python is an excellent language.".count('a')
3
  • str.replace(old, new)方法將字串str中出現的old字串替換為new字串,old和new的長度可以不同。
>>>"Python is an excellent language.".replace('a', '#')
'Python is #n excellent l#ngu#ge.'
>>>"Python is an excellent language.".replace('Python', 'C')
'C is an excellent language.'
  • str.center(width, fillchar)方法返回長度為width的字串,其中,str處於新字串中心位置,兩側新增字符采用fillchar填充,當width小於字串長度時,返回str。其中,fillchar是單個字元
>>>"Python".center(20, "=")
'=======Python======='
>>>"Python".center(2, "=")
'Python'
  • str.strip(chars)從字串str中去掉在其左側和右側chars中列出的字元。chars是一個字串,其中出現的每個字元都會被去掉。
>>>" ==Python== ".strip(' ')
'==Python=='
>>>" ==Python== ".strip(' =')
'Python'
>>>" ==Python== ".strip(' =n')
'Pytho'
  • str.join(iter)中iter是一個具備迭代性質的變數,該方法將str字串插入iter變數的元素之間,形成新的字串。
>>>" ".join('PYTHON')
'P Y T H O N'
>>>",".join('12345')
'1,2,3,4,5'
>>>",".join(['1', '2', '3', '4', '5'])
'1,2,3,4,5'

5、型別判斷和型別間轉換

數字型別的轉換

  • Python語言提供type(x)函式對變數x進行型別判斷,適用於任何資料型別。
n = eval(input('請輸入一個數字:'))
if type(n) == type(123):
print("輸入的數字是整數。")
elif type(n) == type(11.3):
print("輸入的數字是浮點數。")
else:
print("無法判斷輸入型別。")
  • 數值運算操作符可以隱式地轉換輸出結果的數字型別,例如,兩個整數採用運算子“/”的除法將可能輸出浮點數結果。
  • 此外,通過內建的數字型別轉換函式可以顯式地在數字型別之間進行轉換
函式 描述
int(x) 將x轉換為整數,x可以是浮點數或字串
float(x) 將x轉換為浮點數,x可以是整數或字串
str(x) 將x轉換為字串,x可以是整數或浮點數

6、例項解析:愷撒密碼

  • 愷撒撒密碼是古羅馬愷撒大帝用來對軍事情報進行加密的演算法,它採用了替換方法對資訊中的每一個英文字元迴圈替換為字母表序列該字元後面第三個字元:

原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
           密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

  •  原文字元P,其密文字元C滿足如下條件:

C = ( P + 3 ) mod 26

  • 解密方法反之,滿足:

P = ( C – 3 ) mod 26

愷撒密碼-加密

  • 愷撒密碼的加密演算法程式首先接收使用者輸入的文字,然後對字母a-z和字母A-Z按照密碼演算法進行轉換
# CaesarEncode.py
ptxt = input("請輸入明文文字: ")
for p in ptxt:
if "a" <= p <= "z":
print(chr(ord("a")+(ord(p)-ord("a")+3)%26), end='')
elif "A" <= p <= "Z":
print(chr(ord("A")+(ord(p)-ord("A")+3)%26), end='')
else:
print(p, end='')
>>>
請輸入明文文字: This is an excellent Python book.
Wklv lv dq hafhoohqw Sbwkrq errn.

愷撒密碼-解密

  • 愷撒密碼的解密演算法程式首先接收使用者輸入的加密文字,然後對字母a-z和字 母A-Z按照密 碼演算法進行反向轉換
# CaesarDecode.py
etxt = input("請輸入加密後文本: ")
for p in etxt:
if "a" <= p <= "z":
print(chr(ord("a")+(ord(p)-ord("a")-3)%26), end='')
elif "A" <= p <= "Z":
print(chr(ord("A")+(ord(p)-ord("A")-3)%26), end='')
else:
print(p, end='')
>>>
請輸入加密後文本: Wklv lv dq hafhoohqw Sbwkrq errn.
This is an excellent Python book.

本章小結

本章具體講解了計算機中常用的數字型別及操作,包括Python數值運算操作符和數值運算函式。進一步講解了字串型別及格式化、字串操作符、字串處理函式和字串處理方法等。最後,本章還介紹了型別判斷和型別轉換的基本方法,通過對愷撒密碼及其變種若干例項的講解幫助讀者加深對資料型別操作的理解。

有沒有一個人,你想給TA傳個小紙條?用愷撒密碼一展身手吧。