學習Python記錄

轉載內容,原地址http://www.cnblogs.com/resn/p/5776403.html

只是方便記錄,轉載到自己這裏,如果有問題,請聯繫我修改。謝謝!


開始使用Pyhton

安裝

 


 

第一個Python程序

 

首先我們打開python 交互式解釋器, 執行如下命令:

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”

這就是我們的第一個程序。

但是這和我們平時使用的程序不一樣

平時都是在文件上雙擊,然後程序就運行起來了。
交互式解釋器退出後程序就沒了。交互式解釋器是一個臨時的程序運行環境,不保存運行程序。
我們寫的程序最終是要保存在文件裏的。這樣我們下次要運行程序的時候,運行我們上次保存的程序文件就可以了。

現在我們寫一個最簡單的Python程序。

打開記事本 、 將如下內容寫入文件:

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 就是一個表達式,這裏的加號和乘號叫做運算符,1、2、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:
    執行語句……
猜數字

 

到現在我們已經完成了一個基本的猜數字遊戲,想一下,如果用戶在輸入數字的時候,如果輸入的數字過大,程序就提示數字過大;如果用戶輸入的數字過小,程序就提示數字過小。如果這樣,咱們的程序就更友好了。

View Code

 

if 語句的流程圖

 

if語句有三種結構

複製代碼
# 第一種
if 條件:
    pass

# 第二種
if 條件:
    pass   # pass語句用來佔爲,表示什麼都不做
else:
    pass

# 第三種
if 條件1:
    pass
elif 條件2:
    pass
elif 條件3:
    pass
else:
    pass
複製代碼

 


 

流程控制——while循環

我們的猜數字遊戲,是不是每執行一次,用戶就輸入一次數字,程序就會判斷一個結果,之後程序就結束了。然而這樣並不好,程序應該是一直讓用戶輸入數字,一直到用戶輸入的數字正確。

# while循環結構
while 判斷條件:  # 只有條件不成立時退出循環,如果條件爲真,則循環就沒有停止的時候,成爲一個死循環
    執行語句……
猜數字改進版

這樣我們就完成了一個簡單的小數字遊戲。

 

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實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章