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

Python入門知識

1、第一句Python代碼

    在Linux下/home/test目錄下建立hello.py文件,內容以下:html

[root@root ~]# mkdir /home/test
[root@root ~]# cd /home/test
[root@root test]# cat hello.py
print("Hello World!")

    執行hello.py文件,獲得如下內容:python

[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後綴名同樣。shell

 

2、解釋器

    在上述的執行過程當中,咱們明確的指出hello.py文件由python解釋器來執行的,若是想要相似於執行shell腳本同樣執行python腳本,例如. /home/test/test.sh,那麼就須要在hello.py文件的頭部指定解釋器,首先咱們來看一下shell腳本的執行:vim

[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文件bash

[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文件加上權限後便可執行:app

[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!

 

 3、字符編碼

一、ASCII

    python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ASCII)。ide

    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誕生了。

二、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漢字字符集相繼出現以解決這些問題。

 

三、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 國際標準,在前者向後者過渡過程當中起到的承上啓下的做用。

四、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、GB23十二、GBK 到GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中老是有相同的編碼,後面的標準支持更多的字符。在這些編碼中,英文和中文能夠統一地處理。區分中文編碼的方法是高字節的最高位不爲0。按照程序員的稱呼,GB23十二、GBK到GB18030都屬於雙字節字符集 (DBCS)。

 

五、Unicode

    Unicode(統一碼、萬國碼、單一碼)是計算機科學領域裏的一項業界標準,包括字符集、編碼方案等。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,以知足跨語言、跨平臺進行文本轉換、處理的要求。1990年開始研發,1994年正式公佈。

    Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,一般用兩個字節表示一個字符,這樣理論上一共最多能夠表示216(即65536)個字符。基本知足各類語言的使用。原有的英文編碼從單字節變成雙字節,只須要把高字節所有填爲0就能夠。

 

六、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

 

4、設定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

 

5、變量

    變量來源於數學,是計算機語言中能儲存計算結果或能表示值抽象概念。變量能夠經過變量名訪問。在指令式語言中,變量一般是可變的;但在純函數式語言(如Haskell)中,變量多是不可變(immutable)的。

    變量存儲在內存中的值。這就意味着在建立變量時會在內存中開闢一個空間。

    基於變量的數據類型,解釋器會分配指定內存,並決定什麼數據能夠被存儲在內存中。

    所以,變量能夠指定不一樣的數據類型,這些變量能夠存儲整數,小數或字符。

一、聲明變量

[root@root test]# cat hello.py 
#!/usr/bin/env python
#-*- coding:utf-8 -*-

name = 'zhang'
print(name)

    在上述的代碼中,咱們聲明瞭一個變量,變量名爲name,變量name的值爲zhang,"="表示賦值的意思。

    提示:在Python代碼中,「=」表示賦值,而「==」表示等於。

 

二、變量定義的規則

  • 變量名只能是 字母、數字或下劃線的任意組合
  • 變量名的第一個字符不能是數字
  • 如下關鍵字不能聲明爲變量名:

        ['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']

 

6、if條件語句

一、嵌套式

#!/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!")

 

二、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")

 

三、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----")

 

7、while型語句

#!/usr/bin/env python
# _*_ coding:utf8 _*_
# Date: 2018/5/1

count = 1
while count < 10:
    print(count)
    count = count + 1

 

8、習題

一、使用while循環輸出一、二、三、四、五、六、八、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

     PS: pass代指空代碼,無心義,僅僅用於表示代碼塊。

 

二、求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

 

三、輸出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

 

四、輸出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

 

五、求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

 

六、用戶登陸(三次機會嘗試)

#!/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
相關文章
相關標籤/搜索