1、數字和表達式
什麼是表達式,1+2*3 就是一個表達式,這裡的加号和乘号叫做運算符,1、2、3叫做操作數。1+2*3 經過計算後得到的結果是7,就1+2*3 = 7。我們可以将計算結果儲存在一個變量裡,ret = 1-2*3 。 是以表達式就是由操作數和運算符組成的一句代碼或語句,表達式可以求值,可以放在“=”的右邊,用來給變量指派。
計算運算符号:+、-、*、/、%、**

邏輯運算符: not 、and、 or
邏輯運算符是用來做邏輯計算的。像我們上面用到的比較運算符,每一次比較其實就是一次條件判斷,都會相應的得到一個為True或False的值。而邏輯運算符的的操作數就是一個用來做條件判斷的表達式或者變量。
成員運算符: not in 、in (判斷某個單詞裡是不是有某個字母)
成員運算符用來判斷一個元素是否是另一個元素的成員。 比如說我們可以判斷 “hello” 中是否有 “h”, 得到的結果也是True 或者 False。
這裡我們首先将123456指派給a,後有将a指派給b, 這樣其實是 a和b 的值都是123456, 但是後面d的值也是123456,為什麼 第一次a is b 的結果為True ,d和 a 的結果為False 呢?
原因是這樣的: 我們知道程式是運作在記憶體裡的,第一次 我們将123456指派給a的時候,其實是在記憶體裡開辟了一塊空間,将123456放在這塊空間裡,為了找到這裡的123456, 會有一個指向這塊空間的位址,這個位址叫做記憶體位址,是123456存儲在記憶體中的位址。a其實指向的就是存儲123456的記憶體空間的位址。執行了b=a,就是讓b指向的位址和a一樣。之後我們執行了 d = 123456 ,這裡就會再開辟一塊記憶體空間,并将指向該空間的記憶體位址指派給d ,這樣的話 ,a和b 指向的是同一個123456, d 指向的是另外一個123456 。
位運算符:
先了解一個概念:
我們平時用到的數字在計算機中是以二進制表示的, 這個二進制數叫做這個數的機器數。機器數是帶符号的,在計算機用一個數的最高位存放符号, 正數為0, 負數為1.
比如:十進制中的數 +7 ,計算機字長為8位,轉換成二進制就是00000111。如果是 -7 ,就是 10000111 。那麼,這裡的 00000111 和 10000111 就是機器數。
原碼就是符号位加上真值的絕對值, 即用第一位表示符号, 其餘位表示值. 比如如果是8位二進制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因為第一位是符号位, 是以8位二進制數的取值範圍就是:
11111111 到 01111111 即 -127 到 127
反碼的表示方法是:
正數的反碼是其本身
負數的反碼是在其原碼的基礎上, 符号位不變,其餘各個位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
補碼的表示方法是:
正數的補碼就是其本身
負數的補碼是在其原碼的基礎上, 符号位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補
[-1] = [10000001]原 = [11111110]反 = [11111111]補
我們設定a=234 (二進制為 11101010), b=44 (二進制為 101100)
& 按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0
| 按位或運算符:隻要對應的二個二進位有一個為1時,結果位就為1。
^ 按位異或運算符:當兩對應的二進位相異時,結果為1
~ 按位取反運算符:對資料的每個二進制位取反,即把1變為0,把0變為1
a = 10000000 = 128
~a
result: 01111111 = 127
<< 左移動運算符:運算數的各二進位全部左移若幹位,由"<<"右邊的數指定移動的位數,高位丢棄,低位補0。
a = 10110011 = 179
a << 2
result: 1011001100
>> 右移動運算符:把">>"左邊的運算數的各二進位全部右移若幹位,">>"右邊的數指定移動的位數
a >> 2
result: 00101100 = 44
位運算符一般用于二進制操作,一般用于底層,我們很少用,知道就可以了。
2、八進制和十六進制
在Python中,十六進制數應該像下面這樣書寫:
3、變量
變量(variable)是另外一個需要熟知的概念。Python中的變量很好了解。變量基本上就是代表(或者引用)某值得名字。舉例來說,如果希望用名字x代表5,隻需要執行下面的語句即可:
變量的命名規則:
變量名隻能是 字母、數字或下劃線的任意組合;
變量名的第一個字元不能是數字;
變量是區分大小寫的;
約定俗成的一些規則,變量名稱應該有意義、不要用中文做變量名、不要使用拼音;
關鍵字不能聲明為變量名。
4、注釋
程式很長的時候,不弄明白代碼就不知道代碼是什麼的,這個時候怎麼辦?
我們看書的時候,有不懂的地方,我們一般都會标注一下。
我們寫程式也一樣,我在代碼旁邊标注一下是不是就很友善了。
注釋有兩種方式:
單行注釋 #
多行注釋 """ 内容"""
作用:
避免自己忘了寫的代碼是做什麼的;
寫給人看的;
不要去注釋你代碼做了什麼,而要去 注釋 我的代碼為什要這麼做。
Linux/Unix使用者需要注意的内容:
特殊的注釋:
在某些Python檔案中我們會看到檔案的第一行是
#!/usr/bin/env python
這一行是一個特殊的注釋,他有特殊的作用,被稱為Shebang,一般在linux/Unix中出現。
Shebang是一個由 “#” 和 “!” 構成的字元串行(#!),她出現在檔案的第一行。當檔案中出現Shebang 時,Linux/Unix 作業系統的的程式載入器會分析Shebang的内容,将之後的内容作為解釋器指令,并調用該執行,将載有Shebang的檔案路徑作為解釋器的參數。
在這裡 #! 先用于幫助核心找到Python解釋器,但是在導入子產品的時候将會被忽略,是以,隻有在直接執行的檔案才有必要加入#! 。
5、字元編碼
python解釋器在加載 .py 檔案中的代碼時,會對内容進行編碼(預設ascill)。ASCII(American Standard Code for Information Interchange,美國标準資訊交換代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言,其最多隻能用 8 位來表示(一個位元組),即:2**8 = 256-1,是以,ASCII碼最多隻能表示 255 個符号。
關于中文
為了處理漢字,程式員設計了用于簡體中文的GB2312和用于繁體中文的big5。
GB2312(1980年)一共收錄了7445個字元,包括6763個漢字和682個其它符号。漢字區的内碼範圍高位元組從B0-F7,低位元組從A1-FE,占用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。
GB2312 支援的漢字太少。1995年的漢字擴充規範GBK1.0收錄了21886個符号,它分為漢字區和圖形符号區。漢字區包括21003個字元。2000年的 GB18030是取代GBK1.0的正式國家标準。該标準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。現在的PC平台必須支援GB18030,對嵌入式産品暫不作要求。是以手機、MP3一般隻支援GB2312。
從ASCII、GB2312、GBK 到GB18030,這些編碼方法是向下相容的,即同一個字元在這些方案中總是有相同的編碼,後面的标準支援更多的字元。在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方法是高位元組的最高位不為0。按照程式員的稱呼,GB2312、GBK到GB18030都屬于雙位元組字元集 (DBCS)。
有的中文Windows的預設内碼還是GBK,可以通過GB18030更新包更新到GB18030。不過GB18030相對GBK增加的字元,普通人是很難用到的,通常我們還是用GBK指代中文Windows内碼。
顯然ASCII碼無法将世界上的各種文字和符号全部表示,是以,就需要新出一種可以代表所有字元和符号的編碼,即:Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字元編碼。Unicode 是為了解決傳統的字元編碼方案的局限而産生的,它為每種語言中的每個字元設定了統一并且唯一的二進制編碼,規定雖有的字元和符号最少由 16 位來表示(2個位元組),即:2 **16 = 65536,
注:此處說的的是最少2個位元組,可能更多
UTF-8,是對Unicode編碼的壓縮和優化,他不再使用最少使用2個位元組,而是将所有的字元和符号進行分類:ascii碼中的内容用1個位元組儲存、歐洲的字元用2個位元組儲存,東亞的字元用3個位元組儲存...
是以,python解釋器在加載 .py 檔案中的代碼時,會對内容進行編碼(預設ascill),如果是如下代碼的話:
報錯:ascii碼無法表示中文
改正:應該顯示的告訴python解釋器,用什麼編碼來執行源代碼,即:
6、擷取使用者輸入
在編寫程式的時候,并不需要知道變量的具體指。當然,解釋器最終還是得知道變量的值。可是,它怎麼能知道這個值呢?解釋器隻知道我們告訴它的内容。
事實上,我們通過編寫程式讓别人用,我們無法預測使用者會給程式提供什麼值。那麼,看看非常有用的input函數吧。
7、Python類型轉換
函數 描述
int(x [,base ]) 将x轉換為一個整數
long(x [,base ]) 将x轉換為一個長整數
float(x ) 将x轉換到一個浮點數
complex(real [,imag ]) 建立一個複數
str(x ) 将對象 x 轉換為字元串
repr(x ) 将對象 x 轉換為表達式字元串
eval(str ) 用來計算在字元串中的有效Python表達式,并傳回一個對象
tuple(s ) 将序列 s 轉換為一個元組
list(s ) 将序列 s 轉換為一個清單
chr(x ) 将一個整數轉換為一個字元
unichr(x ) 将一個整數轉換為Unicode字元
ord(x ) 将一個字元轉換為它的整數值
hex(x ) 将一個整數轉換為一個十六進制字元串
oct(x ) 将一個整數轉換為一個八進制字元串
例如:如果要将2個輸入的變量相乘,必須進行類型轉換。
8、流程控制之if語句
我們知道了如何擷取使用者輸入,現在要寫一個猜數字的遊戲,我們想一下,首先我們的程式運作起來,然後讓使用者輸入數字,之後程式判斷使用者輸入的數字是否正确,并傳回判斷結果。
這裡就需要用到if語句來進行判斷。if語句的結構是:
if 判斷條件:
執行語句……
var = input("Enter:")
if var == "A":
print("True")
注意:
縮進——推薦四個空格 (使用2個、3個空格或者tab都是可以得)
不要tab與空格混用
不同軟體對空格的顯示邏輯總是一樣的,但是對于tab卻五花八門。
有的軟體把Tab展開成空格,有的不會展開。有的Tab寬度是4,有的寬度是8,
這些不一緻會使得代碼混亂,尤其是靠縮進表示塊結構的Python。
我們繼續編寫我們的猜數字遊戲。
前面我們寫的猜數字遊戲,隻有在使用者輸入正确的時候,才會有提示,那輸入錯誤的時候,是不是也應該提示?
這裡就需要用到if-else語句
if語句
if 判斷條件:
執行語句……
else:
執行語句……
if 語句的流程圖
if語句共有三種結構
9、流程控制之while循環
現在有一個需求,要求從1到10,列印10個數字,可以用以下方法實作:
Python要實作循環功能,代碼就是按照上述的方法來寫。
嵌套循環
如果我想實作這個功能,在控制台上列印10行數字,每行有5列,分别是1,2,3,4,5,該如何實作呢?
實作代碼如下:
輸出結果如下:
break語句
我們換個需要,上述列印10行5列數字中,我想在列印第3行數字後,就退出循環,該如果實作呢?
輸出結果如下:
這裡要使用break語句,break語句會終端目前循環。
continue語句
現在,在10行5列的數字矩陣裡,我隻想列印1,2,3,5列,該如何實作呢?
輸出結果如下:
這裡要使用continue語句,continue語句的作用是退出目前循環,繼續執行下次循環。