Python基礎知識(三) Python編碼、變量、if和while語句
Python入門知識
一、第一句Python代碼
在Linux下/home/test目錄下創建hello.py文件,內容如下:
[root@root ~]# mkdir /home/test [root@root ~]# cd /home/test [root@root test]# cat hello.py print("Hello World!")
執行hello.py文件,得到以下內容:
[root@root test]# python hello.py
Hello World!
將hello.py文件改為hello.text後執行:
[root@root test]# mvhello.py hello.text #<==Linux下改文件名可用mv命令 [root@root test]# ll 總用量 4 -rw-r--r-- 1 root root 22 4月 29 20:14 hello.text [root@root test]# python hello.text Hello World!
由此可見,文件後綴名對執行結果並無影響,但為了規範,也為了後期方便交接工作(如果你離職或者調離部門),強烈建議什麽語言編寫的開發腳本就用什麽樣的後綴名,如同shell腳本的.sh後綴名一樣。
二、解釋器
在上述的執行過程中,我們明確的指出hello.py文件由python解釋器來執行的,如果想要類似於執行shell腳本一樣執行python腳本,例如. /home/test/test.sh,那麽就需要在hello.py文件的頭部指定解釋器,首先我們來看一下shell腳本的執行:
[root@root test]# ls -l test.sh -rwxr--r-- 1 root root 32 4月 30 19:16 test.sh #<==擁有可執行權限 [root@root test]# cat test.sh #!/bin/bash #<==指定解釋器 echo "Hello World!" [root@root test]# ./test.sh Hello World!
接下來我們對比上述的操作執行hello.py文件
[root@root test]# cat hello.py #<==Linux下編輯文件可以用vi或vim命令#!/usr/bin/env python #<==python解釋器已經指定 print("Hello World!") [root@root test]# ./hello.py -bash: ./hello.py: 權限不夠 #<==提示權限不夠,因為沒有給文件加相應的權限
給hello.py文件加上權限後即可執行:
[root@root test]# ls -l hello.py -rw-r--r-- 1 root root 44 4月 30 19:25 hello.py #<==未加權限時的權限位明細 [root@root test]# chmod u+x hello.py [root@root test]# ls -l hello.py -rwxr--r-- 1 root root 44 4月 30 19:25 hello.py #<==加上權限位後多了可執行權限x [root@root test]# ./hello.py Hello World!
三、字符編碼
1、ASCII
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ASCII)。
ASCII(發音: /??ski/ ASS-kee,American Standard Code for Information Interchange,美國信息交換標準代碼)是基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語,而其擴展版本EASCOO則可以部分支持其他西歐語言,並等同於國際標準ISO/IEC 646。
因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的計算機在設計時采用8個比特(bit)作為一個字節(byte),所以,一個字節能表示的最大的整數就是255(二進制11111111=十進制255),0 - 255被用來表示大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼。
ASCII最多只能用 8 位(二進制數)來表示(一個字節),即:2**8 = 256,所以,ASCII碼最多只能表示 256 個符號。
但我們發現ASCII碼是沒有中文編碼的,顯然在天朝是不夠用的,於是GB2312誕生了。
2、GB2312
《信息交換用漢字編碼字符集》是由中國國家標準總局1980年發布,1981年5月1日開始實施的一套國家標準,標準號是GB 2312-1980。
GB2312編碼適用於漢字處理、漢字通信等系統之間的信息交換,通行於中國大陸;新加坡等地也采用此編碼。中國大陸幾乎所有的中文系統和國際化的軟件都支持GB 2312。
GB 2312標準共收錄7445個字符,包括6763個漢字和非漢字圖形字符682個,其中一級漢字3755個,二級漢字3008個;同時收錄了包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西裏爾字母在內的682個字符。
GB 2312的出現,基本滿足了漢字的計算機處理需要,它所收錄的漢字已經覆蓋中國大陸99.75%的使用頻率。但對於人名、古漢語等方面出現的罕用字和繁體字,GB 2312不能處理,因此後來GBK及GB 18030漢字字符集相繼出現以解決這些問題。
3、GBK
GBK全稱《漢字內碼擴展規範》(GBK即“國標”、“擴展”漢語拼音的第一個字母,英文名稱:Chinese Internal Code Specification) ,中華人民共和國全國信息技術標準化技術委員會1995年12月1日制訂,國家技術監督局標準化司、電子工業部科技與質量監督司1995年12月15日聯合以技監標函1995 229號文件的形式,將它確定為技術規範指導性文件。這一版的GBK規範為1.0版。
GBK 共收入 21886 個漢字和圖形符號,包括:
- GB 2312 中的全部漢字、非漢字符號;
- BIG5 中的全部漢字;
- 與 ISO 10646 相應的國家標準 GB 13000 中的其它 CJK 漢字,以上合計 20902 個漢字;
- 其它漢字、部首、符號,共計 984 個。
GBK 向下與 GB 2312 完全兼容,向上支持 ISO 10646 國際標準,在前者向後者過渡過程中起到的承上啟下的作用。
4、GB18030
國家標準GB18030-2005《信息技術 中文編碼字符集》是我國繼GB2312-1980和GB13000.1-1993之後最重要的漢字編碼標準,是我國計算機系統必須遵循的基礎性標準之一。
GB18030有兩個版本:GB18030-2000和GB18030-2005。GB18030-2000是GBK的取代版本,它的主要特點是在GBK基礎上增加了CJK統一漢字擴充A的漢字。GB18030-2005的主要特點是在GB18030-2000基礎上增加了CJK統一漢字擴充B的漢字。
該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。現在的PC平臺必須支持GB18030,對嵌入式產品暫不作要求。所以手機、MP3一般只支持GB2312。
從ASCII、GB2312、GBK 到GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中總是有相同的編碼,後面的標準支持更多的字符。在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方法是高字節的最高位不為0。按照程序員的稱呼,GB2312、GBK到GB18030都屬於雙字節字符集 (DBCS)。
5、Unicode
Unicode(統一碼、萬國碼、單一碼)是計算機科學領域裏的一項業界標準,包括字符集、編碼方案等。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一並且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。1990年開始研發,1994年正式公布。
Unicode 是為了解決傳統的字符編碼方案的局限而產生的,通常用兩個字節表示一個字符,這樣理論上一共最多可以表示216(即65536)個字符。基本滿足各種語言的使用。原有的英文編碼從單字節變成雙字節,只需要把高字節全部填為0就可以。
6、UTF-8
UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的可變長度字符編碼,又稱萬國碼。由Ken Thompson於1992年創建。現在已經標準化為RFC 3629。UTF-8用1到6個字節編碼Unicode字符。用在網頁上可以統一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文)。
如果UNICODE字符由2個字節表示,則編碼成UTF-8很可能需要3個字節。而如果UNICODE字符由4個字節表示,則編碼成UTF-8可能需要6個字節。用4個或6個字節去編碼一個UNICODE字符可能太多了,但很少會遇到那樣的UNICODE字符。
實際表示ASCII字符的Unicode字符,將會編碼成1個字節,並且UTF-8表示與ASCII字符表示是一樣的。
註:想更深入了解ASCII,GB2312,GBK,Unicode,UTF-8,大家可以參考這篇文章:https://blog.csdn.net/softwarenb/article/details/51994943
四、設定Python編碼
因為Python的誕生比Unicode標準發布的時間還要早,所以最早的Python只支持ASCII編碼,普通的字符串‘ABC‘在Python內部都是ASCII編碼的,因此,如果執行如下代碼的話,會出現報錯:
[root@root test]# ls -l hello.py -rwxr--r-- 1 root root 39 5月 1 01:50 hello.py [root@root test]# cat hello.py #!/usr/bin/env python print("你好!") [root@root test]# ./hello.py File "./hello.py", line 2 SyntaxError: Non-ASCII character ‘\xe4‘ in file ./hello.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
改正:我們應該告訴python解釋器,用什麽編碼來執行源代碼,即:
[root@root test]# ls -l hello.py -rwxr--r-- 1 root root 61 5月 1 01:52 hello.py [root@root test]# cat hello.py #!/usr/bin/env python #-*- coding:utf-8 -*- print("你好!") [root@root test]# ./hello.py 你好!
提示:上述操作環境是在2.6版本的基礎上進行的,如果在3.0版本以上呢?
[root@root test]# python -V #<==上述操作環境 Python 2.6.6
#!/usr/bin/env python print("你好!") /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Users/xxxxxxx/PycharmProjects/all_study/day02/test.py 你好! #<==通過上述可見,Python3.0以上版本已經有好的支持中文了 Process finished with exit code 0
五、變量
變量來源於數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變量可以通過變量名訪問。在指令式語言中,變量通常是可變的;但在純函數式語言(如Haskell)中,變量可能是不可變(immutable)的。
變量存儲在內存中的值。這就意味著在創建變量時會在內存中開辟一個空間。
基於變量的數據類型,解釋器會分配指定內存,並決定什麽數據可以被存儲在內存中。
因此,變量可以指定不同的數據類型,這些變量可以存儲整數,小數或字符。
1、聲明變量
[root@root test]# cat hello.py #!/usr/bin/env python #-*- coding:utf-8 -*- name = ‘zhang‘ print(name)
在上述的代碼中,我們聲明了一個變量,變量名為name,變量name的值為zhang,"="表示賦值的意思。
提示:在Python代碼中,“=”表示賦值,而“==”表示等於。
2、變量定義的規則
- 變量名只能是 字母、數字或下劃線的任意組合
- 變量名的第一個字符不能是數字
- 以下關鍵字不能聲明為變量名:
[‘and‘, ‘as‘, ‘assert‘, ‘break‘, ‘class‘, ‘continue‘, ‘def‘, ‘del‘, ‘elif‘, ‘else‘, ‘except‘, ‘exec‘, ‘finally‘, ‘for‘, ‘from‘, ‘global‘, ‘if‘, ‘import‘, ‘in‘, ‘is‘, ‘lambda‘, ‘not‘, ‘or‘, ‘pass‘, ‘print‘, ‘raise‘, ‘return‘, ‘try‘, ‘while‘, ‘with‘, ‘yield‘]
六、if條件語句
1、嵌套式
#!/usr/bin/env python # _*_ coding:utf8 _*_ # Date: 2018/5/1 testname = input("Please input your name:") if testname == ‘zhang‘: testage = input("Please input your age:") if testage == ‘22‘: print("Yes,you are right!") else: print("Sorry,you are wrong!") else: print("Try again!")
2、if..else型
#!/usr/bin/env python # _*_ coding:utf8 _*_ # Date: 2018/5/1 count = 5 if count == 1: pass elif count == 2: pass elif count == 3: pass elif count == 4: pass else: print("haha")
3、and..or型
#!/usr/bin/env python # _*_ coding:utf8 _*_ # Date: 2018/5/1 name=input("Please input your name:") age=input("Please input your age:") if name == "zhang" or age == "22": print("YES") else: print("----END----")
七、while型語句
#!/usr/bin/env python # _*_ coding:utf8 _*_ # Date: 2018/5/1 count = 1 while count < 10: print(count) count = count + 1
八、習題
1、使用while循環輸出1、2、3、4、5、6、8、9
#!/usr/bin/env python # _*_ coding:utf8 _*_ # Date: 2018/4/28 count = 1 while count < 10: if count == 7: pass else: print(count) count = count + 1View Code
2、求1-100的所有數的和
#!/usr/bin/env python # _*_ coding:utf8 _*_ # Date: 2018/4/28 SUM = 0 a = 1 while a < 101: SUM = SUM + a print(SUM) a = a + 1View Code
3、輸出1-100內的所有的奇數
#!/usr/bin/env python # _*_ coding:utf8 _*_ # Date: 2018/4/28 a = 1 while a < 101: s = a%2 if s == 1: print(a) else: pass a= a + 1View Code
4、輸出1-100內的所有偶數
#!/usr/bin/env python # _*_ coding:utf8 _*_ # Date: 2018/4/28 a = 1 while a < 101: s = a%2 if s == 0: print(a) else: pass a = a + 1View Code
5、求1-2+3-4....99的所有數的和
#!/usr/bin/env python # _*_ coding:utf8 _*_ # Date: 2018/4/28 a = 1 SUM = 0 while a < 100: surplus = a % 2 if surplus == 0: SUM = SUM - a else: SUM = SUM + a a = a + 1 print(SUM)View Code
6、用戶登錄(三次機會嘗試)
#!/usr/bin/env python # _*_ coding:utf8 _*_ # Date: 2018/4/28 time = 1 while time < 4: name=input(">>>Please input your name:") passwd=input(">>>Please input your passwd:") if name == ‘zhang‘ and passwd == ‘12345‘: print("Yes,you are right!") break else: print(">>>Try again.") time = time + 1 continueView Code
Python基礎知識(三) Python編碼、變量、if和while語句