一、數字和表達式python
什麼是表達式,1+2*3 就是一個表達式,這裏的加號和乘號叫作運算符,一、二、3叫作操做數。1+2*3 通過計算後獲得的結果是7,就1+2*3 = 7。咱們能夠將計算結果保存在一個變量裏,ret = 1-2*3 。 因此表達式就是由操做數和運算符組成的一句代碼或語句,表達式能夠求值,能夠放在「=」的右邊,用來給變量賦值。linux
計算運算符號:+、-、*、/、%、**程序員
賦值運算符: = 、+= -= *= /= %= //= **=函數
比較運算符:>、 <、 >=、 <=、 ==、!=優化
邏輯運算符: not 、and、 or編碼
邏輯運算符是用來作邏輯計算的。像咱們上面用到的比較運算符,每一次比較其實就是一次條件判斷,都會相應的獲得一個爲True或False的值。而邏輯運算符的的操做數就是一個用來作條件判斷的表達式或者變量。spa
成員運算符: not in 、in (判斷某個單詞裏是否是有某個字母)操作系統
成員運算符用來判斷一個元素是不是另外一個元素的成員。 好比說咱們能夠判斷 「hello」 中是否有 「h」, 獲得的結果也是True 或者 False。 設計
身份運算符: is、is not3d
這裏咱們首先將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 = 10110011 = 179
a >> 2
result: 00101100 = 44
位運算符通常用於二進制操做,通常用於底層,咱們不多用,知道就能夠了。
二、八進制和十六進制
在Python中,十六進制數應該像下面這樣書寫:
八進制數應該這樣書寫:
三、變量
變量(variable)是另一個須要熟知的概念。Python中的變量很好理解。變量基本上就是表明(或者引用)某值得名字。舉例來講,若是但願用名字x表明5,只須要執行下面的語句便可:
這樣的操做稱爲賦值(assignment),數值5被賦給了變量x。另一個說法就是:將變量x綁定到了值(或者對象)5上面。在變量被賦值以後,就能夠在表達式中使用變量。
變量的命名規則:
變量名只能是 字母、數字或下劃線的任意組合;
變量名的第一個字符不能是數字;
變量是區分大小寫的;
約定俗成的一些規則,變量名稱應該有意義、不要用中文作變量名、不要使用拼音;
關鍵字不能聲明爲變量名。
四、註釋
程序很長的時候,不弄明白代碼就不知道代碼是什麼的,這個時候怎麼辦?
咱們看書的時候,有不懂的地方,咱們通常都會標註一下。
咱們寫程序也同樣,我在代碼旁邊標註一下是否是就很方便了。
註釋有兩種方式:
單行註釋 #
多行註釋 """ 內容"""
做用:
避免本身忘了寫的代碼是作什麼的;
寫給人看的;
不要去註釋你代碼作了什麼,而要去 註釋 個人代碼爲什要這麼作。
Linux/Unix用戶須要注意的內容:
特殊的註釋:
在某些Python文件中咱們會看到文件的第一行是
#!/usr/bin/env python
這一行是一個特殊的註釋,他有特殊的做用,被稱爲Shebang,通常在linux/Unix中出現。
Shebang是一個由 「#」 和 「!」 構成的字符串行(#!),她出如今文件的第一行。當文件中出現Shebang 時,Linux/Unix 操做系統的的程序載入器會分析Shebang的內容,將以後的內容做爲解釋器命令,並調用該執行,將載有Shebang的文件路徑做爲解釋器的參數。
在這裏 #! 先用於幫助內核找到Python解釋器,可是在導入模塊的時候將會被忽略,所以,只有在直接執行的文件纔有必要加入#! 。
五、字符編碼
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、GB23十二、GBK 到GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中老是有相同的編碼,後面的標準支持更多的字符。在這些編碼中,英文和中文能夠統一地處理。區分中文編碼的方法是高字節的最高位不爲0。按照程序員的稱呼,GB23十二、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解釋器,用什麼編碼來執行源代碼,即:
六、獲取用戶輸入
在編寫程序的時候,並不須要知道變量的具體指。固然,解釋器最終仍是得知道變量的值。但是,它怎麼能知道這個值呢?解釋器只知道咱們告訴它的內容。
事實上,咱們經過編寫程序讓別人用,咱們沒法預測用戶會給程序提供什麼值。那麼,看看很是有用的input函數吧。
七、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個輸入的變量相乘,必須進行類型轉換。
八、流程控制之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語句共有三種結構
九、流程控制之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語句的做用是退出當前循環,繼續執行下次循環。