一、Python的簡介
1、Python的由來與版本
1.1 python的由來
python的創始人為吉多·范羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·范羅蘇姆(中文名字:龜叔)為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,作為ABC語言的一種繼承。
1.2 python版本
目前Python的主要版本為Python2.7與Python3.6 。
Python2版本到2020年就不再維護。
2、Python是什么樣的語言
編程語言主要從以下幾個角度為進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每個分類代表什么意思呢,我們一起來看一下。
2.1 編譯型語言和解釋型語言
編譯型語言:當用戶寫完一段代碼需要執行的時候,由編譯器先把整段代碼一次性編譯成計算機能看懂的二進制文件,然后再執行。這個過程中,如果用戶寫的代碼出錯了,編譯器就得整段從頭開始編譯,只是幾行或者幾頁代碼的情況下還感覺不出來,但是如果代碼由成千上萬行甚至上億行,可想而知,會浪費很多時間,導致開發速度慢。而且,他不是跨平台的,編譯過后的代碼在不同操作系統上就無法執行。他的優點是運行快,因為一旦編譯成功,每次調用只需直接執行即可
編譯型語言的代表:C語言、C++語言
解釋型語言:當用戶寫完一段代碼需要執行的時候,由解釋器一段一段的解釋成計算機能看懂的二進制文件,然后直接執行。與編譯型語言不同的是,如果用戶寫的代碼出錯了,解釋器不需要從頭開始,這就會大大節省了開發時間。而且他是可以移植的,不同操作系統由不同的解釋器可以解釋他。他的缺點是執行速度慢,每次執行都需要一行一行的解釋。
解釋型語言的代表:JavaScript、PHP、Python
2.2 動態語言與靜態語言
動態語言:動態語言是指在運行的時候才去檢查一個變量的數據類型,寫程序的時候不需要先給一個變量指定類型。當第一次給變量賦值的時候,該語言會將該變量的數據類型存到內存當中。Python和Ruby就是典型的動態語言的代表。
靜態語言:靜態語言是指程序在編譯的時候就要首先檢查每個變量的數據類型,所以用戶在寫程序之前就要首先聲明每個變量的數據類型。Java、C、C++都是靜態語言的代表。
2.3 強類型定義語言和弱類型定義語言
強類型定義語言:一旦一個變量被賦值為一個數據類型,那么它將永遠為該數據類型,除非它被強制轉換(int()、str())。比如說 a = 1 那么之后在給 a 賦值的時候也必須為整形。
弱類型定義語言:一個變量可以在不同的時候被賦予不同數據類型的值。所以,一個變量的數據類型可以被忽略。
綜上所述,Python是一種動態解釋型的強類型定義語言。
3、Python的優缺點
優點:
▷ 優雅、明確、簡潔
▷ 可移植、可拓展、可潛入
▷ 開發效率高
缺點:
▷ 運行速度慢
▷ 代碼不能加密
▷ 不能多線程
4、Python的種類
CPython
當我們從Python官方網站下載並安裝好Python 3.6后,我們就直接獲得了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,所以叫CPython。在命令行下運行python
就是啟動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的所有代碼也都在CPython下執行。
IPython
IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但內核其實都是調 用了IE。
CPython用>>>
作為提示符,而IPython用In [
序號
]:
作為提示符。
PyPy
PyPy是另一個Python解釋器,它的目標是執行速度。PyPy采用JIT技術,對Python代碼進行動態編譯(注意不是解釋),所以可以顯著提高Python代碼的執行速度。
絕大部分Python代碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的,這就導致相同的Python代碼在兩種解釋器下執行可能會有不同的結果。
Jython
Jython是運行在Java平台上的Python解釋器,可以直接把Python代碼編譯成Java字節碼執行。
IronPython
IronPython和Jython類似,只不過IronPython是運行在微軟.Net平台上的Python解釋器,可以直接把Python代碼編譯成.Net的字節碼。
小結:
Python的解釋器很多,但使用最廣泛的還是CPython。如果要和Java或.Net平台交互,最好的辦法不是用Jython或IronPython,而是通過網絡調用來交互,確保各程序之間的獨立性。
二、Python的環境配置
1、下載安裝包
https://www.python.org/downloads/
2、安裝 默認安裝路徑:C:\python27 3、配置環境變量 【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名為Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】 如:原來的值;C:\python27,切記前面要有英文輸入法狀態下的分號
三、Python基礎
1、編寫以及運行Python代碼的方法
▷ 在E盤創建一個文件名為test.py的文件,編寫代碼如下:
print("Hello World!")
▷ 按快捷鍵win+R打開運行窗口,然后輸入cmd打開命令行窗口。
▷在命令行窗口里輸入 python e:/test.py
上圖可以看出,以及成功運行該文件代碼並且打印出“Hello World!”
2、內容編碼
解釋器在執行代碼的時候,需要將代碼編譯成機器能讀懂的二進制碼(由1和0組成),而python2版本在編譯的時候默認以ASCII碼的格式進行轉換(也可以指定編碼格式),而python3版本在編譯的時候默認為utf-8格式進行轉換。
ASCII(American Standard Code for Information Interchange,美國標准信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多只能用 8 位來表示(一個字節),即:2**8 = 256,所以,ASCII碼最多只能表示 256 個符號。
然而,世界上的語言以及符號遠遠不止256個,所以當計算機傳入世界各國的時候ASCII碼已經不能滿足大家的使用了,於是出現了Unicode(統一碼、萬國碼、單一碼),Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一並且唯一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多
但是問題來了,友誼Unicode至少2個字節,也就是16位,但是英文字母以及有些符號根本不需要這么多字節,所以統一用Unicode碼的話會大大浪費寶貴的內存空間,於是又出現了一種新的編碼:UTF-8.該編碼格式是對Unicode編碼的壓縮和優化,他不再使用最少使用2個字節,而是將所有的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
所以,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),如果是如下代碼的話:
報錯:ascii碼無法表示中文
print('你好,世界!')
解決方法是,在代碼的首行加入以下代碼,用來指定編碼格式:
#-*- ecoding:utf-8 -*-
#這樣,就能成功執行並打印出中文“你好,世界!”了。
3、注釋
單行注釋:# 被注釋內容
多行注釋:'''被注釋內容''',或者"""被注釋內容"""
4、變量
變量就是把程序運行的中間結果,存到內存中,以待調用
▷聲明變量
1 # -*- coding: utf-8 -*- 2 3 name = "fuyong"
上述代碼聲明了一個變量,變量名為: name,變量name的值為:"fuyong"
變量的作用:昵稱,其代指內存里某個地址中保存的內容
▷變量的命名規則
1、由字母、下划線、數字組成
2、首字母不能是數字
3、不能是python中的關鍵字(以下為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']
▷變量的賦值
變量的賦值其實是在內存中開辟一塊數據,然后將該數據指向變量名,這樣在調用變量名的時候就能找到該變量所對應的值。
而如果將一個變量的值賦予給另一個變量,那么內存中還是只有一個數據值,只是將該數據指向了不同的兩個變量而已
5、常量
常量即指不變的量,如pai 3.141592653..., 或在程序運行過程中不會改變的量
在Python中沒有一個專門的語法代表常量,程序員約定俗成用變量名全部大寫代表常量(實際上這個常量也是可以改變值的)
:Bir_of_China = 1949
6、用戶交互(input)
1 # -*- coding: utf-8 -*-
2
3 # 將用戶輸入的內容賦值給 name 變量
4 name = input("請輸入用戶名:")
5 age = input('請輸入您的年齡')
6 # 打印輸入的內容
7 print(name,age)
#執行腳本就會發現,程序會等待你輸入姓名后再往下繼續走。
7、基礎數據類型
▷ int 整形
在32位的機器上,int的長度為32為,范圍為 -2**31 -- 2**31-1
在64位的機器上,int的長度為64位,范圍為 -2**63 -- 2**63-1
▷ long 長整型 (python3版本已經沒有該類型了,不管多長的數,全部為int類型)
跟C語言不同,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上由於機器內存有限,我們使用的長整數數值不可能無限大。
該類型不用用戶特別定義,當一個數字大到超過int數據類型的范圍后將自動轉化為long長整形。
注意:python3版本沒有long型了,全部為int類型
▷ bool 布爾類型(True False)
True :1 、 1==1 、 2>1 、type('a') == str 的結果均為True
False:0 、 1!=1 、 2>3 等等的結果均為False
▷ str 字符串類型
簡單一句話,在python中,加了引號的字符都被認為是字符串,哪怕他是一個數字(‘123’)
1 >>> name = "Alex Li" #雙引號 2 >>> age = "22" #只要加引號就是字符串 3 >>> age2 = 22 #int 4 >>> 5 >>> msg = '''My name is Alex, I am 22 years old!''' #我擦,3個引號也可以 6 >>> 7 >>> hometown = 'ShanDong' #單引號也可以
單引號雙引號以及三引號都可以表示字符串
雙引號和單引號可以搭配使用,如下:
msg = "I'm a small birld"
三引號可以將一大段代碼賦值給一個變量,如下:
1 msg = ''' 2 今天我想寫首小詩, 3 歌頌我的同桌, 4 你看他那烏黑的短發, 5 好像一只炸毛雞。 6 ''' 7 print(msg)
字符串可以用 + 拼接,但是兩者必須都為字符串類型。如:
1 a = 'hello'
2 b = 'xiaomi'
3 c = a + b
4 print(c)
打印結果即為“helloxiaomi”
字符串也可以與一個數字相乘,結果是將該字符串連續輸入N遍,如:
print('xyz' * 3)
#輸出結果為‘xyzxyzxyz’
8、格式化輸出
現有一練習需求,問用戶的姓名、年齡、工作、愛好 ,然后打印成以下格式
------------ info of fuyong -----------
Name : fuyong
Age : 29 job : none Hobbie: girl ------------- end -----------------
我們該怎么實現呢?你會發現,用字符拼接的方式還難實現這種格式的輸出,所以一起來學一下新姿勢
只需要把要打印的格式先准備好, 由於里面的 一些信息是需要用戶輸入的,你沒辦法預設知道,因此可以先放置個占位符,再把字符串里的占位符與外部的變量做個映射關系就好啦
1 name = input("請輸入您的姓名:")
2 age = input("請輸入您的年齡:") 3 job = input("請輸入您的工作:") 4 hobbie = input("請輸入您的愛好:") 5 6 info = ''' 7 ------------ info of %s ----------- #給一個占位符,等待傳入name的值 8 9 Name:%s #給一個占位符,等待傳入name的值 10 11 Age :%s #給一個占位符,等待傳入age的值 12 13 Job :%s #給一個占位符,等待傳入job的值 14 15 Hobbie:%s #給一個占位符,等待傳入hobbie的值 16 17 ------------- end ----------------- 18 19 ''' %(name,name,age,job,hobbie) # 符號%后的括號里的值與上面的幾個占為符號一一對應,將值分別傳入 20 21 print(info)
注意:如果字符串里需要出現‘%’的時候,需要用轉義符號來實現,如:
msg = "我是%s,年齡%d,目前學習進度為80%%"%('金鑫',18)
print(msg)
PS :
▷查看數據類型的方法為type() 如type(1) 的結果為int type('a')的結果為str
▷如果一個變量位阿拉伯數字,則該數據可以在int類型與str類型之間互相轉換
9.基本運算符
▷算數運算

▷比較運算

▷賦值運算

▷邏輯運算

注意:在沒有()的情況下,not的優先級大於and,and的優先級大於or。即 () > not > and > or 優先級相同的情況下從左向右計算
10、流程控制之判斷
在現實中,我們往往由很多種選擇,比如說走路遇到分叉口,我們只能選擇走一條路,程序也是一樣,如果遇到分支,就用if語句控制流程
if 條件判斷: #條件判斷可以是比較運算,邏輯運算,以及布爾運算
執行語句
else: 執行語句
#注意:if 以及else 后都由一個分號 ':'
# if 以及else 下面的一段執行語句必須縮進
name = input('請輸入用戶名:')
password = input('請輸入您的密碼') if name == 'fuyong' and password == '123': print('恭喜您,登錄成功') else: print('抱歉,用戶名或者密碼錯誤!')
if語句可以嵌套使用,如上面的代碼可以改為:
name = input('請輸入用戶名:')
password = input('請輸入您的密碼') if name == 'fuyong' : if password == '123' print('恭喜您,登錄成功') else: print('抱歉,用戶名或者密碼錯誤!')
if else也可以由多個分支判斷,用elif表示,如:
num = input('請輸入一個數字'):
if num == 1: print("您選擇的是1號") elif num == 2: print("您選擇的是2號") elif num == 3: print('您選擇的是3號') else: print('輸入有誤,請在1、2、3中選擇')
11、流程控制之循環
在寫程序的過程中,有時候我們需要一段代碼反復執行許多次,如果每次都重復寫很多次,代碼不但會占用很多篇幅,而且會變得非常不美觀,這不符合python的‘優雅、明確、簡潔’的宗旨,這個時候我們只需要用一個循環語句即可解決問題。格式為:
while 判斷條件: #與判斷語句if一樣,判斷條件可以是比較運算,邏輯運算,以及布爾運算
循環體
我們通過判斷條件控制循環的次數,如
n = 0
while n < 3
print("這段話將被執行3次") n = n+1
我們可以通過關鍵字break 、continue來終止循環
break是跳出整個循環,直接執行循環體外面的代碼
continue是跳出本次循環,重新返回循環的開頭
count = 0
while True: print("如果不是count,我就會一直打印下去,直到你的電腦爆炸為止") if count == 5: break count = count + 1
上面的例子可以看到,只要出現break,不管判斷條件是否依然為True,循環都要立即終止
1 n = 0
2
3 while n < 10: 4 5 n = n+1 6 7 if n == 4 : 8 9 continue 10 11 print(n,"就是不願意打印'4'") 12 13 14
上面的代碼執行結果為
1 1 就是不願意打印'4' 2 2 就是不願意打印'4' 3 3 就是不願意打印'4' 4 5 就是不願意打印'4' 5 6 就是不願意打印'4' 6 7 就是不願意打印'4' 7 8 就是不願意打印'4' 8 9 就是不願意打印'4' 9 10 就是不願意打印'4' 10 >>>
上面的例子可以看出,出現了continue,就會跳出本次循環,但是還會跳到循環體的第一句,來判斷條件是否為True
其他的語言中的else一般只與if搭配,而python中,else還可以搭配while,格式為:
1 while 條件判斷:
2
3 循環體 4 else: 5 6 如果循環正常執行完畢,沒有被break終止,則會執行本段代碼
四、應用練習
1、使用while循環輸入 1 2 3 4 5 6 8 9 10
1 count = 0
2
3 while count < 10: 4 5 count = count + 1 6 7 if count == 7: 8 continue 9 10 print(count)
2、求1-100的所有數的和
1 count = 0
2
3 sum = 0 4 5 while count < 100: 6 7 count = count + 1 8 9 sum = sum + count 10 11 print(sum)
3、輸出 1-100 內的所有奇數
1 count = 0
2
3
4 while count < 100: 5 6 count = count + 1 7 8 if count % 2 == 1: 9 print(count) 10
4、輸出 1-100 內的所有偶數
1 count = 0
2
3
4 while count < 100: 5 6 count = count + 1 7 8 if count % 2 == 0: 9 print(count) 10
5、求1-2+3-4+5 ... 99的所有數的和
1 count = 0
2 sum = 0 3 4 while count < 99: 5 6 count = count + 1 7 8 if count % 2 == 0: #如果是偶數的話,運算符號即為+ 9 sum = sum-count 10 11 else: 12 sum = sum + count#如果是奇數的話,運算符號即為- 13 14 print(sum) 15
6、用戶登陸(三次機會重試)
1 count = 0
2
3 while True: 4 5 name = input('請輸入您的用戶名:') 6 password = input('請輸入您的密碼:') 7 8 if name == 'fuyong' and password == '123': 9 print('恭喜您,登錄成功!') 10 11 break 12 13 else: 14 print('用戶名或者密碼錯誤,請重新輸入:') 15 16 count = count + 1 17 18 if count == 3: 19 print('對不起,您以及輸入錯誤3次,登錄程序終止') 20 21 break