安裝python
第一個Python程序linux
首先咱們打開python 交互式解釋器, 執行以下命令:ide
Python 3.5.1+ (default, Mar 30 2016, 22:46:26) [GCC 5.3.1 20160330] on linux Type "help", "copyright", "credits" or "license" for more information. >>> print(「Hello World」) #print() 用來輸出指定的內容 Hello World
print以前的三個大於號 叫作提示符。print的是做用是在屏幕顯示print以後的內容,這裏顯示的是「Hello world」spa
這就是咱們的第一個程序。操作系統
可是這和咱們平時使用的程序不同。3d
平時都是在文件上雙擊,而後程序就運行起來了。
交互式解釋器退出後程序就沒了。交互式解釋器是一個臨時的程序運行環境,不保存運行程序。
咱們寫的程序最終是要保存在文件裏的。這樣咱們下次要運行程序的時候,運行咱們上次保存的程序文件就能夠了。code
如今咱們寫一個最簡單的Python程序。orm
打開記事本 、 將以下內容寫入文件:blog
print(「Hello World!」)
另存爲 first.py文件,.PY後綴是爲了讓別人知道這是個python文件。排序
變量
前面咱們在使用print()輸出內容的時候,若是內容很長,後面要再次輸出的時候,就需從新在輸入一遍。
若是給輸出的內容起個簡單的別名。這樣咱們用簡短的別名來代替長內容,下次要輸出的時候就直接使用別名來使用原來的長內容。
這個別名就是變量。那如何使用呢?
name = 「hello world」 name =「alex」 # 這個別名就是變量。 這樣就定義了一個變量。 # name 是變量名 「hello world」是變量值 name,age = 「alex」,12 # 兩個變量交換值? name,age = age,name
變量的做用: 用來保存數據,
爲何要保存? 後面要使用。
Variables are used to store information to be referenced and manipulated in a computer program. They also provide a way of labeling data with a descriptive name, so our programs can be understood more clearly by the reader and ourselves. It is helpful to think of variables as containers that hold information. Their sole purpose is to label and store data in memory. This data can then be used throughout your program.
變量: 變量就是用來存儲一些信息,供程序之後調用或者操做修改。變量爲標記數據提供了一種描述性的名字,以便咱們的程序能夠被程序的閱讀者很清晰的理解。把變量做爲一個存儲信息的容器會更容易理解變量。它的主要是目的是筆記和存儲在內存中的數據,這個數據就能夠在你的整個程序中使用。
咱們給變量指定值的過程叫作賦值。
name1 = "SuperMan" name2 = name1 name1 = "BatMan" print(name1,name2) # 這裏輸出的name1和name2的內容分別是什麼?
實現過程:
程序是運行在內存中的,咱們執行 name1=「SuperMan」時,這是在內存中哦嗯開闢了一塊空間,並將這塊空間的內存地址賦值給name1; 在執行name2=name1的時候,將name1中的內存複製給name2,也就是說,name2中的內存地址也是存儲「SuperMan」的內存空間的內存地址; 在執行name1= 「BatMan」,此時在內存中另外在開闢一塊空間存儲「BatMan」,將存儲「BatMan」的內存空間的地址賦值給name1,。因此在最後執行 print(name1,name2)的時候,就會出現你看到的結果。
就好像咱們中國人有中國人起名字的規則,外國人有外國人起名字的規則,變量也有他的命名規則。
變量的命名規則:
變量名只能是 字母、數字或下劃線的任意組合
變量名的第一個字符不能是數字
區分大小寫
關鍵字不能聲明爲變量名
from keyword import kwlist
print(kwlist)
約定俗成的一些規則: 變量名稱應該有意義、不要用中文作變量名、不要使用拼音
表達式和運算符
什麼是表達式?
1+2*3 就是一個表達式,這裏的加號和乘號叫作運算符,一、二、3叫作操做數。1+2*3 通過計算後獲得的結果是7,就1+2*3 = 7。咱們能夠將計算結果保存在一個變量裏,ret = 1-2*3 。 因此表達式就是由操做數和運算符組成的一句代碼或語句,表達式能夠求值,能夠放在「=」的右邊,用來給變量賦值。
算術運算符 : + - * / //(取整除) %(取餘) **
>>> 2+3 5 >>> 3-2 1 >>> 2*3 6 >>> 5/2 2.5 >>> 5//2 2 >>> 5%2 1 >>> 2**3 8
賦值運算符: = 、+= -= *= /= %= //= **=
>>> num = 2 >>> num += 1 # 等價於 num = num + 1 >>> num -= 1 # 等價於 num = num - 1 >>> num *= 1 # 等價於 num = num * 1 >>> num /= 1 # 等價於 num = num / 1 >>> num //= 1 # 等價於 num = num // 1 >>> num %= 1 # 等價於 num = num % 1 >>> num **= 2 # 等價於 num = num ** 2
比較運算符:>、 <、 >=、 <=、 ==、!= True False簡單講一下
顧名思義,比較運算符是用來作比較的,比較的結果會有兩種,分別是成立和不成立,成立的時候,結果是 True,不成立的時候結果是False。 True和False 用來表示比較後的結果。
>>> a = 5 >>> b = 3 >>> a > b # 檢查左操做數的值是否大於右操做數的值,若是是,則條件成立。 True >>> a < b # 檢查左操做數的值是否小於右操做數的值,若是是,則條件成立。 False >>> a <= b # 檢查左操做數的值是否小於或等於右操做數的值,若是是,則條件成立。 False >>> a >= b # 檢查左操做數的值是否大於或等於右操做數的值,若是是,則條件成立。 True >>> a == b # 檢查,兩個操做數的值是否相等,若是是則條件變爲真。 False >>> a != b # 檢查兩個操做數的值是否相等,若是值不相等,則條件變爲真。 True
邏輯運算符: not 、and、 or
邏輯運算符是用來作邏輯計算的。像咱們上面用到的比較運算符,每一次比較其實就是一次條件判斷,都會相應的獲得一個爲True或False的值。而邏輯運算符的的操做數就是一個用來作條件判斷的表達式或者變量。
>>> a > b and a < b # 若是兩個操做數都是True,那麼結果爲True,不然結果爲False。 False >>> a > b or a < b # 若是有兩個操做數至少有一個爲True, 那麼條件變爲True,不然爲False。 True >>> not a > b # 反轉操做的狀態,操做數爲True,則結果爲False,反之則爲True False
結果爲True的時候,咱們通常稱 結果爲 真, 邏輯運算符會有一個真值表。
and 真值表 or 真值表 or 真值表
成員運算符: not in 、in (判斷某個單詞裏是否是有某個字母)
成員運算符用來判斷一個元素是不是另外一個元素的成員。 好比說咱們能夠判斷 「hello」 中是否有 「h」, 獲得的結果也是True 或者 False。
>>> "h" in "hello" # 這裏的意思是 「h」 在「Hello」 中,判斷後結果爲True True >>> "h" not in "hello" # 這裏的意思是 「h」 不在「Hello」 中,判斷後結果爲False False
身份運算符: is、is not(講數據類型時講解,通常用來判斷變量的數據類型)
用來判斷身份。
>>> a = 123456 >>> b = a >>> b is a #判斷 a 和 b 是否是同一個 123456 True >>> c = 123456 >>> c is a #判斷 c 和 a 是否是同一個 123456 False >>> c is not a #判斷 c 和 a 是否是不是同一個 123456 True
這裏咱們首先將123456賦值給a,後有將a賦值給b, 這樣實際上是 a和b 的值都是123456, 可是後面c的值也是123456,爲何 第一次a is b 的結果爲True ,c和 a 的結果爲False 呢?
緣由是這樣的: 咱們知道程序是運行在內存裏的,第一次 咱們將123456賦值給a的時候,實際上是在內存裏開闢了一塊空間,將123456放在這塊空間裏,爲了找到這裏的123456, 會有一個指向這塊空間的地址,這個地址叫作內存地址,是123456存儲在內存中的地址。a其實指向的就是存儲123456的內存空間的地址。執行了b=a,就是讓b指向的地址和a同樣。以後咱們執行了 c = 123456 ,這裏就會再開闢一塊內存空間,並將指向該空間的內存地址賦值給c ,這樣的話 ,a和b 指向的是同一個123456, c 指向的是另一個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
位運算符通常用於二進制操做,通常用於底層,咱們不多用,知道就能夠了。
優先級
運算符 | 描述 |
---|---|
** | 指數 (最高優先級) |
~ + - | 按位翻轉, 一元加號和減號 (最後兩個的方法名爲 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法減法 |
>> << | 右移,左移運算符 |
& | 位 'AND' |
^ | | 位運算符 |
<= < > >= | 比較運算符 |
<> == != | 等於運算符 |
= %= /= //= -= += *= **= | 賦值運算符 |
is is not | 身份運算符 |
in not in | 成員運算符 |
not or and | 邏輯運算符 |
運算符那麼多,優先級記不住怎麼辦? 使用小括號。經過使用小括號,咱們就能夠很方便的進行優先級的區分。
註釋
程序很長的時候,不弄明白代碼就不知道代碼是什麼的,這個時候怎麼辦?
咱們看書的時候,有不懂的地方,咱們通常都會標註一下。
咱們寫程序也同樣,我在代碼旁邊標註一下是否是就很方便了。
註釋有兩種方式:
單行註釋 #
多行註釋 """ 內容"""
做用:
1. 避免本身忘了寫的代碼是作什麼的——
2. 寫給人看的
3. 不要去註釋你代碼作了什麼,而要去 註釋 個人代碼爲什要這麼作。
Linux/Unix用戶須要注意的內容:
特殊的註釋:
在某些Python文件中咱們會看到文件的第一行是
#!/usr/bin/env python
這一行是一個特殊的註釋,他有特殊的做用,被稱爲Shebang,通常在linux/Unix中出現。
Shebang是一個由 「#」 和 「!」 構成的字符串行(#!),她出如今文件的第一行。當文件中出現Shebang 時,Linux/Unix 操做系統的的程序載入器會分析Shebang的內容,將以後的內容做爲解釋器命令,並調用該執行,將載有Shebang的文件路徑做爲解釋器的參數。
在這裏 #! 先用於幫助內核找到Python解釋器,可是在導入模塊的時候將會被忽略,所以,只有在直接執行的文件纔有必要加入#! 。
如何獲取用戶的輸入
咱們前面寫的程序,並無和用戶交互,程序運行後,就等待結果的輸出。而有些程序是須要用戶輸入才能繼續向下執行。
Python中獲取用戶輸入的語句——input()
var = input() print(var) var = input("請輸入:")
流程控制 之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: 執行語句……
num = input("Enter:") my_num = 12 if num == my_num: print("True") else: print("Flase")
到如今咱們已經完成了一個基本的猜數字遊戲,想一下,若是用戶在輸入數字的時候,若是輸入的數字過大,程序就提示數字過大;若是用戶輸入的數字太小,程序就提示數字太小。若是這樣,我們的程序就更友好了。
num = int(input("Enter:")) my_num = 12 if num == my_num: print("True") elif num > my_num: print("輸入的數字過大") else: print("輸入的數字太小")
if 語句的流程圖
if語句有三種結構
# 第一種 if 條件: pass # 第二種 if 條件: pass # pass語句用來佔爲,表示什麼都不作 else: pass # 第三種 if 條件1: pass elif 條件2: pass elif 條件3: pass else: pass
流程控制——while循環
咱們的猜數字遊戲,是否是每執行一次,用戶就輸入一次數字,程序就會判斷一個結果,以後程序就結束了。然而這樣並很差,程序應該是一直讓用戶輸入數字,一直到用戶輸入的數字正確。
# while循環結構 while 判斷條件: # 只有條件不成立時退出循環,若是條件爲真,則循環就沒有中止的時候,成爲一個死循環 執行語句……
init_num = 12 num = int(input("Enter:")) while init_num != num: if num > init_num: print("數字過大") else: print("數字太小") num = int(input("Enter:")) print("猜對了")
這樣咱們就完成了一個簡單的小數字遊戲。
while循環流程圖:
如今,咱們換一個需求,咱們要輸出1到10。
# 循環輸出1-10全部整數 num = 1 while num <11: print(num) num = num +1
若是如今咱們要當數字爲5的時候結束循環,怎麼辦?
這裏要使用break語句,break語句會終端當前循環。咱們看一下效果:
# 循環輸出1-10全部整數 num = 1 while num <11: print("當前數字是",num) if num == 5 : break num = num +1 print("如今數字變成了:",num)
break的做用: 結束循環,在死循環中,也能夠經過設置必定的條件來結束循環。
在變一下需求,若是我但願輸出1-100之間的全部奇數。
經過continue語句能夠是實現。
# 輸出1-100之間全部奇數 num = 0 while num<100: num = num + 1 if num%2 ==0: continue print(num)
while循環中的else:
# while循環結構 while 判斷條件: 執行語句…… else: 執行語句……
while循環中的else語句比較特殊,這裏的else語句,只有在循環正常結束的時候纔會執行,什麼意思呢?意思就是說若是咱們的while循環在執行過程當中中斷了,也就是說執行了break語句,這裏的else語句就不會被執行。咱們看一下下面的代碼:
# 循環沒有被中斷 num = 0 while num<10: num = num + 1 if num%2 ==0: continue print(num) else: print("else-----") ### 循環被中斷 num = 0 while num<10: num = num + 1 if num%2 ==0: break print(num) else: print("else-----")
嵌套循環:循環套循環
num1 = 0 while num1 <3: print(num1,end="++" ) num1 += 1 num2 = 0 while num2<3: print(num2,end=" ") num2 +=1 print()
練習題:
1. 輸出九九乘法表
2. 使用 # 號 輸出一個長方形,用戶能夠指定寬和高,若是長爲3 ,高爲4 ,則輸出一個 橫着有3個#號 豎着有4個#號的長方形。
3.如何輸出一個以下的直接三角形,用戶指定輸出行數; (若是上下反轉,又如何實現?)
*
**
***
****
序列
咱們去銀行辦理業務都是須要排隊的,排隊前都是拿一個號,而後去排序,窗口叫到哪一個號,哪一個號就去窗口辦理業務。
咱們把排隊的人想象成一個排列好的隊伍,隊伍按照號碼來排序,他們是一個有序的隊列。每一個人排隊的人都有名字,這些名字按照順序排列起來也叫序列。一樣,咱們把人名替換成數字或字母,那他們也叫序列。
序列就是按照必定的順序排列起來的一系列元素,每一個元素不是在其餘元素以前,就是在其餘元素以後。
這裏須要你們瞭解一條語句——range()。
range()語句用來生成一組數字,在Pyhton2.x裏能夠很明顯的看出來,Python3.x則看不出來(後面會解釋緣由)
>>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 就像隊伍同樣,仍是有按照順序來排列的,每一個元素不是在其餘元素以前就是在其以後 >>> range(1,10) # Range()生成的數字默認從0開始,也能夠是指定起始值。 [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(1,10,2) # 還能夠指定步長 [1, 3, 5, 7, 9] # rang()的用法: range(stop) #stop爲結束位置,列出從0到stop以前的全部整數 range(start, stop[, step]) #start表示起始數字,stop表示結束數字,stop表示每兩個相鄰數字之間的差,也叫步長 #列出從start開始,到stop以前全部的數字
流程控制——for循環
# for循環結構一 for var in sequence: statements(s) # for 循環示例 for i in range(10): print(i)
和while循環同樣,在for循環中也可使用break和continue語句,二者效果同樣。
1. 使用for循環輸出1-100的全部偶數/奇數
2. 使用for輸出0-10,若是遇到5,結束循環
練習題:
1. 輸出九九乘法表,for實現
2. 使用 # 號 輸出一個長方形,用戶能夠指定寬和高,for實現
3. 輸出一個以下的直接三角形,用戶指定輸出行數,for實現