01 Python3程式設計之程式設計語法簡介

卡卡6發表於2020-11-24

一、Python基礎

每一種程式語言都有自己的一套語法,編譯器或者直譯器負責把符合語法的程式程式碼轉換成CPU能夠執行的機器碼然後執行,Python也不例外,寫Python程式碼需要遵循一定的規則。

1. Python中的程式碼塊

python使用縮排來表示程式碼塊[一般使用tab鍵],不需要使用大括號{}。

縮排的空格數不是固定的,但是同一個程式碼塊的語句必須包含相同的縮排空格數, 縮排的空格數不一致,會導致執行錯誤。

什麼是程式碼塊?

答:程式碼塊一般由大括號{}將多行程式碼括起來,實現特定的邏輯演算法功能。比如:函式體,條件判斷等。以C語言為例,在SI中雙擊{前面,能自動識別出程式碼塊。

程式碼塊也並不都是由大括號括起來。

示例程式1:正確的縮排。

#!/usr/bin/python3

import sys

 

if True:

    print("true")

else:

    print("false")  

    print("is alignment")

示例程式2:錯誤的縮排,程式碼塊縮排空格數不一致。

#!/usr/bin/python3

import sys

if True:

    print("true")

else:

    print("false")  

     print("is not alignment") //多了一個空行

報錯提示(縮排錯誤,indent是“縮排”的意思):IndentationError: unexpected indent

完整提示資訊如下:

c:/Users/weiguopai/Desktop/python3/01.py

  File "c:/Users/weiguopai/Desktop/python3/01.py", line 7

    print("is not alignment")

    ^

IndentationError: unexpected indent

 

2. Python中如何註釋程式碼

和C語言一樣,在Python中可以註釋單行/多行程式碼。

單行註釋以#開頭,比如:

# this is the first python program

import sys

if True:

    print("true")

else:

    print("false")  

    print("is alignment")

多行註釋用三個單引號 ''' 或者三個雙引號 """ 將註釋括起來,示例程式如下:

#!/usr/bin/python3

#this is the first python program

'''

notes: line 01

notes: line 02

notes: line 03

notes: line 04

'''

 

"""

notes: line 05

notes: line 06

notes: line 07

notes: line 08

"""

 

import sys

if True:

    print("true")

else:

    print("false")  

    print("is not alignment")

 

3. 輸入函式input()

input()是一個內建函式,從標準輸入讀入一行文字(以字串的形式),預設的標準輸入裝置是鍵盤。

示例程式碼01:

#!/usr/bin/python3

data = input("請輸入一個數字:")

print("你輸入的是:", data)

執行和輸出:

請輸入一個數字:500

你輸入的是: 500

程式碼執行後,Python命令列就等待使用者的輸入。輸入資料,按Enter鍵表示輸入完成,程式將輸入的資料儲存在變數data中,然後又將該變數的值列印出來。

注意:python3.0版本後,input以字串的形式接收命令列中的資料;input()對輸入的資料都是按照字串方式處理,如果想要得到其他型別的資料(字串型別是不能進行算術運算的),需要進行資料型別的轉換。

示例程式碼02:

#!/usr/bin/python3

data_01 = int(input("請輸入第一個數字:"))

data_02 = int(input("請輸入第二個數字:"))

print("第一個數字與第二個數字之和為:", data_01 + data_02)

執行和輸出:

請輸入第一個數字:400

請輸入第二個數字:500

第一個數字與第二個數字之和為: 900

 

4. 關於print()

對於要輸出一串普通的字串來說,使用單引號或者雙引號都可以。

#!/usr/bin/python3

print('hello word')

print("hello word")

4.1 Python中單/雙引號的巢狀

匹配原則:單雙巢狀時,符號會與離自己最近的另一個符號進行組合

(1)雙引號巢狀雙引號

如果雙引號要當成普通字元來處理,則要使用轉義字元,如下:

#!/usr/bin/python3

print("hello \"word\"")

正確輸出:hello "word"

假如不使用轉義,則匹配會出錯!直接報語法錯誤[SyntaxError]

錯誤示例程1:

print("hello "word\"") #左邊兩個雙引號配對,最右邊兩個也配對,之後word\就是不合法的!

錯誤示例程式2:

#!/usr/bin/python3

#print("hello "word\"") #左邊兩個雙引號配對,最右邊兩個也配對,之後word\就是不合法的!

print("hello \"word"")#中間的單引號被當成普通字元之後,最後兩個雙引號相互匹配,

                              #第一個雙引號就沒法匹配了,執行時報語法錯誤

可以在最後增加一個雙引號使得它與第一個雙引號匹配,改掉這個語法錯誤。

print("hello \"word""")

正確輸出:hello "word

(2)單引號巢狀單引號

與雙引號巢狀雙引號同理。

(3)單引號內部巢狀雙引號

不需要轉義,單引號內的雙引號都被當成普通字元。

#!/usr/bin/python3

print('hello "word')

print('hello "word"')

print('hell"o "word"')

正確輸出:

hello "word

hello "word"

hell"o "word"

(4)雙引號內部巢狀單引號

與單引號內部巢狀雙引號同理。

#!/usr/bin/python3

print("hello 'word")

print("hello word'")

print("hello 'word'")

print("hell'o word'")

正確輸出

hello 'word

hello word'

hello 'word'

hell'o word

 

4.2 print()連續輸出和多行輸出

當使用print函式連續列印多個字串時,字串之間使用逗號“,”隔開。輸出後,逗號會變成空格。

程式程式碼:

#!/usr/bin/python3

print("hello", "word!", "i", "am", "python")

輸出:

hello word! i am python

多行輸出示例程式碼(與多行註釋類似,使用’’’或者”””):

#!/usr/bin/python3

print('''hello

word! 

i

am

python''')

 

print("""hello

word! 

i

am

python""")

 

列印整數

#!/usr/bin/python3

print("1 + 2 =", 1+2)

輸出:1 + 2 = 3

 

5. Python中識別符號的命名規則和關鍵字

識別符號,也就是變數的命名規則:

1) 識別符號由數字、字母和下劃線組成,其中第一個字元必須是字母或下劃線 _。[和C語言一樣,不能以數字開頭]

2) 識別符號對大小寫敏感(大寫表示一個變數,小寫又表示一個變數)。

3) 在Python 3 中,可以用中文作為變數名,非 ASCII 識別符號也允許(不建議使用中文)。

 4) Python的關鍵字(變數的命名不能與關鍵字衝突)

Python 的標準庫提供了一個 keyword 模組,可以輸出當前版本的所有關鍵字。

#!/usr/bin/python3

import keyword

print("python3的關鍵字:", keyword.kwlist)

執行輸出:

python3的關鍵字: ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

 

6. 關於文字編碼格式

因為目前的計算機CPU只能處理數字,要處理文字,就需要把文字轉換為數字才能處理。

最早的計算機在設計時採用8個位元(bit)作為一個位元組(byte),一個位元組能表示的最大的整數就是255(二進位制11111111=十進位制255),如果要表示更大的整數,就必須用更多的位元組。

比如: 兩個位元組可以表示的最大整數是65535,4個位元組可以表示的最大整數是4294967295。

由於計算機是美國人發明的,最早只有127個字元被編碼到計算機裡,包含大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。

但是要處理中文顯然一個位元組是不夠的,至少需要兩個位元組,而且還不能和ASCII編碼衝突,所以,中國製定了GB2312編碼,用來把中文編進去。

可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS裡,韓國把韓文編到Euc-kr裡,各國有各國的標準,就會不可避免地出現衝突,結果就是,在多語言混合的文字中,顯示出來會有亂碼。

因此,就誕生了Unicode編碼。Unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。

Unicode標準也在不斷髮展,但最常用的是用兩個位元組表示一個字元(如果要用到非常偏僻的字元,就需要4個位元組)。現代作業系統和大多數程式語言都直接支援Unicode。

ASCII編碼和Unicode編碼的區別:ASCII編碼是1個位元組,而Unicode編碼通常是2個位元組。

字母A用ASCII編碼是十進位制的65,二進位制的01000001;

字元0用ASCII編碼是十進位制的48,二進位制的00110000,注意字元'0'和整數0是不同的;

漢字中已經超出了ASCII編碼的範圍,用Unicode編碼是十進位制的20013,二進位制的01001110 00101101。

如果把ASCII編碼的A用Unicode編碼,只需要在前面補0就可以,因此,A的Unicode編碼是00000000 01000001。

如果我們把所有文字編碼都統一成Unicode編碼,亂碼問題就消失了;但是,如果你寫的文字基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的儲存空間,在儲存和傳輸上就十分不划算。

所以,又出現了把Unicode編碼轉化為“可變長編碼”的UTF-8編碼。

UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成1個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組。如果要傳輸的文字包含大量英文字元,用UTF-8編碼就能節省空間。

字元

ASCII

Unicode

UTF-8

A

01000001

00000000 01000001

01000001

x

 

01001110 00101101

11100100 10111000 10101101

從上面的表格可以發現, ASCII編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支援ASCII編碼的歷史遺留軟體可以在UTF-8編碼下繼續工作。

目前在計算機記憶體中,統一使用Unicode編碼,當需要儲存到硬碟或者需要傳輸的時候,就轉換為UTF-8編碼。

用記事本編輯的時候,從檔案讀取的UTF-8字元被轉換為Unicode字元到記憶體裡,編輯完成後,儲存的時候再把Unicode轉換為UTF-8儲存到檔案。

瀏覽網頁的時候,伺服器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器。

預設情況下,Python 3原始碼檔案都是以 UTF-8 編碼,所有字串都是 unicode 字串。

 

7. 指定python原始碼檔案的文字編碼格式

Python允許直接在原始碼中指定檔案的編碼格式。

例子1:指定原始碼使用UTF-8編碼:

#!/usr/bin/python3

# -*- coding: utf-8 -*-

import keyword

print("python3的關鍵字:", keyword.kwlist)

第一行註釋:告訴Linux/OS X系統,這是一個Python可執行程式,Windows系統會忽略這個註釋。

第二行註釋:告訴Python直譯器,按照UTF-8編碼讀取原始碼,否則,你在原始碼中寫的中文輸出可能會有亂碼。

注意:宣告瞭UTF-8編碼並不意味著你的.py檔案就是UTF-8編碼的,必須並且要確保文字編輯器正在使用UTF-8編碼。

這是大多數情況下,中文出現亂碼的原因(雖然在程式中指定了編碼格式,但是有可能系統並不支援,或者當前使用的編輯器使用其他格式的編碼,造成“不對應”)。

 

相關文章