01 Python3程式設計之程式設計語法簡介
一、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編碼。
這是大多數情況下,中文出現亂碼的原因(雖然在程式中指定了編碼格式,但是有可能系統並不支援,或者當前使用的編輯器使用其他格式的編碼,造成“不對應”)。
相關文章
- C#基礎程式設計——簡介及基礎語法C#程式設計
- python之程式語言(簡介)01Python
- 響應式程式設計簡介之:Reactor程式設計React
- flex設計思想和語法簡介Flex
- Rust語言非同步程式設計簡介 - ShakaibRust非同步程式設計AI
- shell程式設計—簡介(一)程式設計
- 01 GUI程式設計GUI程式設計
- Bash程式設計基礎之語法和工具程式設計
- Windows 程式設計簡介從C/C++到Windows程式設計Windows程式設計C++
- Scala 簡介 [摘自 Scala程式設計 ]程式設計
- SpringBoo+HTMX程式設計簡介Spring程式設計
- WebGL程式設計指南(1)簡介Web程式設計
- Python 程式設計之Tkinter的使用01Python程式設計
- 程式語言設計,程式設計哲學程式設計
- Linux系統程式設計之程式介紹Linux程式設計
- 01 shell程式設計之變數定義程式設計變數
- Day43--GUI程式設計簡介GUI程式設計
- JavaScript函數語言程式設計之pointfree與宣告式程式設計JavaScript函數程式設計
- 簡單介紹python程式設計之檔案讀寫Python程式設計
- 01. 網路程式設計程式設計
- java 網路程式設計01Java程式設計
- 程式設計技巧之-表驅動法程式設計
- 併發程式設計基礎——JMM簡介程式設計
- ‘程式語言‘ ’程式設計工具’程式設計
- C 語言程式設計利器之 CLion程式設計
- shell程式設計之條件語句程式設計
- 函數語言程式設計-鏈式程式設計RAC函數程式設計
- .NET併發程式設計-函數語言程式設計程式設計函數
- NIO程式設計介紹程式設計
- 程式設計思想之冪等性 | 程式設計之道程式設計
- 最簡單的C程式設計--順序程式設計C程式程式設計
- 程式設計入門之學哪種程式語言?程式設計
- IT程式設計各學科語言的介紹程式設計
- ModbusTCP協議簡介與程式設計流程圖TCP協議程式設計流程圖
- 非同步程式設計測試Awaitlity簡介| Baeldung非同步程式設計AI
- 怎樣用 Bash 程式設計:語法和工具程式設計
- 好程式設計師Java教程分享Java語法程式設計師Java
- 02 shell程式設計之條件語句程式設計