- Python算法設計與分析從入門到精通
- 明日科技編著
- 4148字
- 2022-07-28 18:54:29
3.1 變量
在Python中,變量嚴格意義上應該稱為“名字”,也可以理解為標簽。例如:
python="學會Python還可以飛"
本行代碼中的python就是一個變量。在大多數編程語言中,都把這一過程稱為“把值存儲在變量中”,即把字符串序列“學會Python還可以飛”存儲在計算機內存的某個位置。你不需要準確地知道它們到底在哪里,只要告訴Python這個字符串序列的名字是python,就可以通過這個名字來引用這個字符串序列了。例如,引用python變量,將其打印輸出,代碼如下:
print(python)
3.1.1 變量的命名和賦值
在Python中,不需要先聲明變量名及其類型,直接賦值,即可創建各種類型的變量。但是變量的命名并不是任意的,應遵循以下幾條規則:
變量名必須是一個有效的標識符,如height、m_name、h1等。
變量名不能使用Python中的保留字。例如,不能是int、print等。
慎用小寫字母l和大寫字母O(以防和數字1和0混淆)。
應選擇有意義的單詞作為變量名,如number、weight等。
為變量賦值,可以通過賦值運算符號“=”來實現。語法格式為:
變量名 = value
例如,創建一個變量,為其賦值521,則創建的變量就是整型變量:
number = 521 #創建變量number并賦值521,該變量為數值型
如果為變量賦值一個字符串,則創建的變量就是字符串類型。例如:
martial = "乾坤大挪移" #字符串類型的變量
另外,Python是一種動態類型的語言,也就是說,變量的類型可以隨時變化。例如,在IDLE中,創建變量martial,并賦值為字符串“乾坤大挪移”,然后輸出該變量的類型,可以看到該變量為字符串類型,再將變量賦值為數值521,并輸出該變量的類型,可以看到該變量為整型。執行過程如下:

說明
在Python語言中,使用內置函數type()可以返回變量類型。
在Python中,允許多個變量指向同一個值。例如,將兩個變量都賦值為數字2048,再分別應用內置函數id()獲取變量的內存地址,將得到相同的結果。執行過程如下:

說明
在Python語言中,使用內置函數id()可以返回變量所在的內存地址。
3.1.2 變量的基本類型
變量的數據類型分為很多種,下面主要介紹數值型、字符串型、布爾型3種基本數據類型。例如,年齡、身高等信息可以使用數值型變量存儲;名字、性別等信息可以使用字符型變量存儲;婚否等信息可以使用布爾型變量存儲,如圖3.1所示。
1.數值類型
數值類型主要包含整數、浮點數和復數。接下來一一介紹。
1)整數
整數用來表示整型數值,即沒有小數部分的數值。Python中,整數包括正整數、負整數和0,其位數是任意的(當超過計算機自身的計算功能時,會自動轉用高精度進行計算)。例如,1314、3456789532900653、?2020、0等都是整數。

圖3.1 數據類型示例
2)浮點數
浮點數由整數部分和小數部分組成,主要用于處理包括小數的數,如1.414、0.5、?1.732、3.1415926535897932384626等。浮點數也可以使用科學計數法表示,如3.7e2、?3.14e5和6.16e?2等。
注意
在使用浮點數進行計算時,可能會出現小數位數不確定的情況。例如,計算0.1+0.1時,會得到0.2;而計算0.1+0.2時,將得到0.30000000000000004(而不是0.3)。執行過程如下:
>>> 0.1+0.1 0.2 >>> 0.1+0.2 0.30000000000000004
這種問題幾乎存在于所有語言中,原因是計算機精度存在誤差,因此忽略多余的小數位即可。
3)復數
Python中的復數與數學中的復數含義完全一致,表現形式略有不同。兩者都由實部和虛部組成,但數學中使用i表示虛部,Python中用j或J表示虛部。當表示一個復數時,可以將其實部和虛部相加,例如,一個復數的實部為5.21,虛部為13.14j,則這個復數為5.21+13.14j。
2.字符串類型
字符串就是連續的字符序列,是計算機所能表示的一切字符的集合。在Python中,字符串屬于不可變序列,通常使用單引號(' ')、雙引號(" ")或三引號(''' '''和""" """)括起來。這幾種引號形式在語義上沒有差別,只是在形式上有些差別。其中,單引號和雙引號中的字符序列必須在同一行上,而三引號內的字符序列可以分布在連續多行中。例如:

3.布爾類型
布爾類型主要用來表示真值或假值。在Python中,標識符True和False被解釋為布爾值。另外,Python中的布爾值可以轉換為數值,True表示1,False表示0。
說明
Python中,布爾類型的值可以進行數值運算,例如“False + 1”的結果為1。但是不建議對布爾類型的值進行數值運算。
在Python中,所有對象都可以進行真值測試。其中,只有下面列出的幾種情況得到的值為假,其他對象在if或者while語句中都表現為真。
False或None。
數值中的零,包括0、0.0和虛數0。
空序列,包括空字符串、空元組、空列表、空字典。
自定義對象的實例,該對象的__bool__方法返回False或者__len__方法返回0。
3.1.3 變量的輸入與輸出
變量的輸入與輸出是計算機最基本的操作。基本的輸入是指從鍵盤上輸入數據的操作,用input()函數輸入數據。基本的輸出是指在屏幕上顯示輸出結果的操作,用print()函數輸出。
1.用input()函數輸入
使用內置函數input()可以接收用戶的鍵盤輸入。input()函數的基本語法格式如下:
variable = input("提示文字")
其中,variable為保存輸入結果的變量,雙引號內的文字用于提示要輸入的內容。
例如,想要接收用戶輸入的內容,并保存到變量tip中,可以使用下面的代碼:
tip =input("請輸入文字:")
在Python中,無論輸入的是數字還是字符都將被作為字符串讀取。如果想要接收數值,需要把接收到的字符串進行類型轉換。例如,想要接收整型的數字并保存到變量age中,可以使用下面的代碼:
age =int(input("請輸入數字:")) #接收輸入整型的數字
說明
input()函數接收內容時,數值內容可直接輸入,且接收到的內容也是數值類型;如果要輸入字符串類型的內容,需要將對應的字符串使用引號括起來,否則會報錯。
2.用print()函數輸出
默認情況下,使用內置的print()函數可以將結果輸出到IDLE或者標準控制臺上。其基本語法格式如下:
print(輸出內容)
其中,輸出內容可以是數字和字符串(字符串需要使用引號括起來),此類內容將直接輸出;也可以是包含運算符的表達式,此類內容將計算結果輸出。例如:

多學兩招
默認情況下,一條print()語句輸出后會自動換行。如果想要一次輸出多個內容且不換行,需要將輸出的內容用英文半角的逗號分隔。例如,下面的代碼將在同一行中輸出變量a和b的值:
print(a,b) #輸出變量a和b,結果為10 6
【實例3.1】 輸出你的年齡。(實例位置:資源包\Code\03\01)
用input()函數輸入你的年齡,用print()函數輸出數據。具體代碼如下:

運行結果如圖3.2所示。
【實例3.2】 用print()函數輸出字符畫。(實例位置:資源包\Code\03\02)
用print()函數輸出一把手槍的字符畫,具體代碼如下:

說明
代碼中的字符是使用搜狗輸入法中的特殊符號編寫的。
運行結果如圖3.3所示。

圖3.2 數據輸入和輸出

圖3.3 輸出字符畫
3.1.4 變量的計算
變量的計算離不開運算符和表達式。運算符是一些特殊的符號,可用于數學計算、比較大小和邏輯運算等。Python中的運算符主要包括算術運算符、賦值運算符、比較(關系)運算符、邏輯運算符和位運算符。使用運算符將不同類型的數據按照一定規則連接起來的式子,稱為表達式。例如,使用算術運算符連接起來的式子稱為算術表達式,使用邏輯運算符連接起來的式子稱為邏輯表達式。下面就來介紹Python中常用的5類運算符。
1.算術運算符
算術運算符主要用于處理四則運算,在數值的處理中應用得最多。常用的算術運算符如表3.1所示。
表3.1 常用的算術運算符

【實例3.3】 計算a,b的各種表達式。(實例位置:資源包\Code\03\03)
具體代碼如下:

運行結果如圖3.4所示。

圖3.4 算術表達式結果
多學兩招
在Python中,“+”運算符還具有拼接功能,可以將兩個字符串進行拼接,例如:

也可以將字符串與數值進行拼接,例如:

2.賦值運算符
賦值運算符主要用來為變量賦值。使用基本賦值運算符“=”,可將“=”右邊的變量值賦給左邊的變量。也可以先進行某些運算,然后再賦值給左邊的變量,這樣的賦值運算符稱為復合賦值運算符。Python中常用的賦值運算符如表3.2所示。
表3.2 常用的賦值運算符

3.比較(關系)運算符
比較運算符又稱為關系運算符,用于對變量或表達式的結果進行比較。如果比較結果為真,則返回True;如果為假,則返回False。比較運算符通常用在條件分支結構及循環結構中,作為判斷的依據。
Python中的常用比較運算符如表3.3所示。
表3.3 常用的比較運算符

注意
初學者很容易混淆賦值運算符“=”和比較運算符“==”。一定要多看幾遍示例,徹底弄明白它們之間的區別。
多學兩招
在Python中,當需要判斷一個變量是否介于兩個值之間時,可以采用“值1 <變量<值2”的形式,例如“0 <a<100”。
【實例3.4】 比較化學、物理、數學、生物的成績。(實例位置:資源包\Code\03\04)
具體代碼如下:

運行結果如圖3.5所示。
4.邏輯運算符
邏輯運算符可對真和假兩種布爾值進行運算,運算后的結果仍是一個布爾值。邏輯運算符主要包括and(邏輯與)、or(邏輯或)和not(邏輯非)。表3.4和表3.5列出了邏輯運算符的用法。

圖3.5 比較表達式結果
表3.4 邏輯運算符

使用邏輯運算符進行邏輯運算時,其運算結果如表3.5所示。
表3.5 邏輯運算的結果

【實例3.5】 參加手機店的打折活動。(實例位置:資源包\Code\03\05)
某手機店在每周二上午10~11點和每周五下午14~15點,對華為系列手機進行折扣讓利活動。想參加折扣活動的顧客就要在時間上滿足:周二10:00 a.m.~11:00 a.m.或者周五2:00 p.m.~3:00 p.m.。
通過邏輯運算符模擬可否參加手機店的打折活動,具體代碼如下:

代碼解析:
(1)第2行代碼:input()函數用于接收用戶輸入的字符序列。
(2)第3行代碼:由于input()函數返回的結果為字符串類型,所以需要進行類型轉換,將其轉換為整型。
(3)第5~8行代碼使用if…else條件判斷語句,該語句主要用來判斷程序是否滿足某種條件。該語句將在第3.2節進行詳細講解,這里只需要了解即可。第5行代碼中對條件進行判斷時,使用了邏輯運算符and、or和比較運算符“==”“>=”“<=”。
按F5鍵運行實例,首先輸入“星期五”,然后輸入時間19,將顯示如圖3.6所示的結果;再次運行實例,輸入“星期二”,時間為10,將顯示如圖3.7所示的結果。

圖3.6 不符合條件的運行效果

圖3.7 符合條件的運行效果
說明
本實例未對錯誤輸入信息進行校驗,所以為保證程序的正確性,請輸入合法的星期和時間。有興趣的讀者可以自行添加校驗功能。
5.位運算符
使用位運算符,可直接對數字在內存中的二進制位進行操作。首先要把執行運算的數據轉換為二進制數,然后才能進行執行位運算。Python中的位運算符包括位與(&)、位或(|)、位異或(^)、取反(~)、左移位(<<)和右移位(>>)。
說明
整型數據在內存中以二進制的形式表示。例如,7的32位二進制數形式如下:

其中,左邊最高位是符號位,0表示正數,1表示負數。負數通常采用補碼形式表示。例如,?7的32位二進制數形式如下:

1)位與運算符
位與運算的運算符為“&”。運算法則如下:兩個操作數據的二進制表示,只有對應數位都是1時,結果數位才是1,否則為0。如果兩個操作數的精度不同,則結果的精度與精度高的操作數相同。例如,12&8的運算過程如圖3.8所示。
2)位或運算符
位或運算的運算符為“|”。運算法則如下:兩個操作數據的二進制表示,只有對應數位都是0,結果數位才是0,否則為1。如果兩個操作數的精度不同,則結果的精度與精度高的操作數相同。例如,4|8的運算過程如圖3.9所示。
3)位異或運算符
位異或運算的運算符是“^”。運算法則如下:當兩個操作數的二進制表示相同(同時為0或同時為1)時,結果為0,否則為1。若兩個操作數的精度不同,則結果數的精度與精度高的操作數相同。例如,31^22的運算過程如圖3.10所示。

圖3.8 12&8的運算過程

圖3.9 4|8的運算過程

圖3.10 31^22的運算過程
4)位取反運算符
位取反運算也稱位非運算,運算符為“~”。位取反運算就是將操作數中對應的二進制數1修改為0,0修改為1。例如,~123的運算過程如圖3.11所示。
【實例3.6】 輸出位運算的結果。(實例位置:資源包\Code\03\06)
使用print()函數輸出圖3.8~圖3.11的位運算結果,具體代碼如下:

圖3.11 ~123的運算過程
01 print("12&8 = "+str(12&8)) #位與運算 02 print("4|8 = "+str(4|8)) #位或運算 03 print("31^22 = "+str(31^22)) #位異或運算 04 print("~123 = "+str(~123)) #位取反運算
運算結果如圖3.12所示。
5)左移位運算符
左移位運算符“<<”可將一個二進制數向左移動指定的位數,左邊(高位端)溢出的位被丟棄,右邊(低位端)的空位用0補充。左移位運算相當于乘以2的n次冪。
例如,int型數據48對應的二進制數為00110000,將其左移1位,根據左移位運算符的運算規則可以得出(00110000<<1)=01100000,轉換為十進制數就是96(相當于48*2);將其左移2位,根據左移位運算符的運算規則可以得出(00110000<<2)=11000000,轉換為十進制數就是192(相當于48*22)。其執行過程如圖3.13所示。

圖3.12 運算結果

圖3.13 左移位運算
具體代碼如下:
01 #打印將十進制的48左移1位后,獲取的十進制數字 02 print("十進制的48左移1位后,獲取的十進制數字為:",48<<1) 03 #打印將十進制的48左移2位后,獲取的十進制數字 04 print("十進制的48左移2位后,獲取的十進制數字為:",48<<2)
運行結果如圖3.14所示。
6)右移位運算符
右移位運算符“>>”用于將一個二進制操作數向右移動指定的位數,右邊(低位端)溢出的位被丟棄。在填充左邊(高位端)的空位時,如果最高位是0(正數),左側空位填入0;如果最高位是1(負數),左側空位填入1。右移位運算相當于除以2的n次冪。
48右移1位的運算過程如圖3.15所示。?80右移2位的運算過程如圖3.16所示。

圖3.14 左移位運算結果

圖3.15 48右移一位的運算過程
具體代碼如下:
01 #打印將十進制的48右移1位后,獲取的十進制數字 02 print("十進制的48右移1位后,獲取的十進制數字為:",48>>1) 03 #打印將十進制的-80右移2位后,獲取的十進制數字 04 print("十進制的-80右移2位后,獲取的十進制數字為:",-80>>2)
運行結果如圖3.17所示。

圖3.16 ?80右移兩位的運算過程

圖3.17 右移位運算結果
多學兩招
由于移位運算的速度很快,在程序中遇到表達式乘以或除以2的n次冪的情況時,一般采用移位運算來代替。
- Responsive Web Design with HTML5 and CSS3
- Production Ready OpenStack:Recipes for Successful Environments
- 基于Swift語言的iOS App 商業實戰教程
- WildFly Cookbook
- INSTANT Apache ServiceMix How-to
- Python程序設計教程
- Shopify Application Development
- 虛擬現實:引領未來的人機交互革命
- PhoneGap 3.x Mobile Application Development Hotshot
- 信息學競賽寶典:基礎算法
- iOS應用逆向工程:分析與實戰
- 數據結構:Python語言描述
- Getting Started with Beautiful Soup
- Arduino for Secret Agents
- Learning Physics Modeling with PhysX