1. 程式人生 > >Python基礎知識(三) Python編碼、變量、if和while語句

Python基礎知識(三) Python編碼、變量、if和while語句

SM 不同的 正式 網頁 end oot 循環輸出 mut 字符編碼

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]# mv
hello.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 個漢字和圖形符號,包括:

  1. GB 2312 中的全部漢字、非漢字符號;
  2. BIG5 中的全部漢字;
  3. 與 ISO 10646 相應的國家標準 GB 13000 中的其它 CJK 漢字,以上合計 20902 個漢字;
  4. 其它漢字、部首、符號,共計 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 + 1
View 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 + 1
View 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 + 1
View 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 + 1
View 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
        continue
View Code

Python基礎知識(三) Python編碼、變量、if和while語句