目錄java
Python是著名的「龜叔」Guido van Rossum在1989年聖誕節期間,爲了打發無聊的聖誕節而編寫的一個編程語言,Python官方網站 。python
Python是一種計算機程序設計語言。你可能已經據說過不少種流行的編程語言,好比很是難學的C語言,很是流行的Java語言,適合初學者的Basic語言,適合網頁編程的JavaScript語言等等。c++
Python 是一個高層次的結合瞭解釋性、編譯性、互動性和麪向對象的腳本語言。git
- 解釋型語言:這意味着開發過程當中沒有編譯環節,相似於PHP和Perl語言。
- 交互式語言:這意味着能夠在一個Python提示符直接互動執行你寫的程序。
- 面嚮對象語言:這意味着Python支持面向對象的風格或代碼封裝在對象的編程技術。
- 易於學習:Python有相對較少的關鍵字,結構簡單,和一個明肯定義的語法,學習起來更加簡單。
- 易於閱讀:Python代碼定義的更清晰。
- 易於維護:Python的成功在於它的源代碼是至關容易維護的。
- 豐富的標準庫:Python的最大的優點之一是豐富的庫,跨平臺的,在UNIX,Windows和Macintosh兼容很好。
- 互動模式:互動模式的支持,您能夠從終端輸入執行代碼並得到結果的語言,互動的測試和調試代碼片段。
- 可移植:基於其開放源代碼的特性,Python已經被移植(也就是使其工做)到許多平臺。
- 可擴展:若是你須要一段運行很快的關鍵代碼,或者是想要編寫一些不肯開放的算法,你可使用C或C++完成那部分程序,而後從你的Python程序中調用。
- 數據庫:Python提供全部主要的商業數據庫的接口。
- GUI編程:Python支持GUI能夠建立和移植到許多系統調用。
- 可嵌入: 你能夠將Python嵌入到C/C++程序,讓你的程序的用戶得到"腳本化"的能力。
- 雲計算: 雲計算最火的語言, 典型應用OpenStack
- WEB開發: 衆多優秀的WEB框架,衆多大型網站均爲Python開發,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
- 科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系統運維: 運維人員必備語言
- 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,並且重要性逐年提升。緣由:做爲動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤爲擅長策略回測
- 圖形GUI: PyQT, WxPython,TkInter
當咱們編寫Python代碼時,咱們獲得的是一個包含Python代碼的以.py爲擴展名的文本文件。要運行代碼,就須要Python解釋器去執行.py文件。面試
- CPython
Python的官方版本,使用C語言實現,使用最爲普遍,CPython會將源文件(py文件)轉換成字節碼文件(pyc文件),而後運行在Python虛擬機上。算法
- PyPy
Python實現的Python,PyPy運行在CPython(或者其它實現)之上,用戶程序運行在PyPy之上,將Python的字節碼再動態編譯成機器碼(非解釋),它的目標是執行速度。數據庫
- 其它Python
如Jyhton、IronPython、RubyPython、Brython等。編程
- 小結:
Python的解釋器不少,但使用最普遍的仍是CPython。若是要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是經過網絡調用來交互,確保各程序之間的獨立性。windows
在桌面下建立一個t1.py文件內容是:api
print('hello world')
打開windows命令行輸入cmd,肯定後 寫入代碼python t1.py
在這裏也能夠切換成python2.x的環境進行運行,可是2.x版本和3.x版本是有必定區別的。
python2和python3的區別:
- python2:默認編碼方式爲ascii編碼。解決方式:在文件的首行添加:
-*- coding: utf-8 -*-
- python3:默認編碼方式utf-8
變量:把程序運行的中間結果臨時的存在內存裏,以便後續的代碼調用。
聲明變量:
#!/usr/bin/env python # -*- coding: utf-8 -*- name = "beijing"
上述代碼聲明瞭一個變量,變量名爲: name,變量name的值爲:"taibai"
變量的做用:暱稱,其代指內存裏某個地址中保存的內容。
變量定義的規則:
- 一、必須由數字,字母,下劃線任意組合,且不能數字開頭。
- 二、不能是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']
- 三、變量具備可描述性,看名知意。
- 四、不建議使用中文做爲變量名稱,遵照規範。
推薦變量的定義方式:
#駝峯體 AgeOfKimboy = 26 NumberOfStudents = 80 #下劃線 age_of_kimboy = 56 number_of_students = 80
變量的賦值
#!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "wusong" name2 = "suwukong" student1 = "tangseng" student2 = student1
常量即指不變的量,如π 3.141592653..., 或在程序運行過程當中不會改變的量
當行註釋:# 被註釋內容
多行註釋:'''被註釋內容''',或者 """被註釋內容"""
#!/usr/bin/env python # -*- coding: utf-8 -*- # 將用戶輸入的內容賦值給 name 變量 name = input("請輸入用戶名:") # 打印輸入的內容 print(name) 執行結果: E:\Python19\venv\Scripts\python.exe E:/Python19/DAY01/t2.py please input your name:kimi kimi Process finished with exit code 0
執行腳本就會發現,程序會等待你輸入姓名後再往下繼續走。 同時也可讓用戶輸入多個信息,以下:
#!/usr/bin/env python # -*- coding: utf-8 -*- name = input("what is your name?") age = input("how old are you?") hometown = input("where are you come from?") print("hello",name,"you are",age,"years old,you come from",hometown) 執行結果: E:\Python19\venv\Scripts\python.exe E:/Python19/DAY01/t2.py what is your name?kimi how old are you?26 where are you come from?China hello kimi you are 26 years old,you come from China
什麼是數據類型?
咱們人類能夠很容易的分清數字與字符的區別,可是計算機並不能呀,計算機雖然很強大,但從某種角度上看又很傻,除非你明確的告訴它,1是數字,「漢」是文字,不然它是分不清1和‘漢’的區別的,所以,在每一個編程語言裏都會有一個叫數據類型的東東,其實就是對經常使用的各類數據類型進行了明確的劃分,你想讓計算機進行數值運算,你就傳數字給它,你想讓他處理文字,就傳字符串類型給他。Python中經常使用的數據類型有多種,今天咱們暫只講3種, 數字、字符串、布爾類型
- int(整型)
在32位機器上,整數的位數爲32位,取值範圍爲-2**31~2**31-1,即-2147483648~2147483647
在64位系統上,整數的位數爲64位,取值範圍爲-2**63~2**63-1,即-9223372036854775808~9223372036854775807
- long(長整型)
跟C語言不一樣,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上因爲機器內存有限,咱們使用的長整數數值不可能無限大。
注意,自從Python2.2起,若是整數發生溢出,Python會自動將整數數據轉換爲長整數,因此現在在長整數數據後面不加字母L也不會致使嚴重後果了。
PS:在Python3中再也不有long整型,所有都爲int類型
>>> a= 2**64 >>> type(a) #type()是查看數據類型的方法 <type 'long'> >>> b = 2**60 >>> type(b) <type 'int'>
在Python中,加了引號的字符都被認爲是字符串!!!!
>>> name = "Kimi Li" #雙引號 >>> age = "26" #只要加引號就是字符串 >>> age2 = 26 #int類型 >>> >>> msg = '''My name is taibai, I am 22 years old!''' #3個引號也能夠 >>> >>> hometown = 'Guangdong' #單引號也能夠
單引號、雙引號、多引號基本沒什麼區別,可是在如下這種狀況時,須要考慮單雙的配合:
msg = "My name is Kimi, I'm 26 years old!"
多引號什麼做用呢?做用就是多行字符串必須用多引號
#!/usr/bin/env python # -*- coding: utf-8 -*- msg = ''' 牀前明月光, 疑是地上霜。 舉頭望明月, 低頭思故鄉。 ''' print(msg) 執行結果: E:\Python19\venv\Scripts\python.exe E:/Python19/DAY01/t2.py 牀前明月光, 疑是地上霜。 舉頭望明月, 低頭思故鄉。 Process finished with exit code 0
字符串的拼接
數字能夠進行加減乘除等運算,字符串呢?是的,但只能進行"相加"和"相乘"運算。
>>> name = 'kimi' >>> print(name) kimi >>> age = '26' >>> name + age #相加其實就是簡單拼接 'kimi26' >>> name * 5 #相乘其實就是複製本身多少次,再拼接在一塊兒 'kimikimikimikimikimi'
注意,字符串的拼接只能是雙方都是字符串,不能跟數字或其它類型拼接
>>> age2 =30 >>> type(name),type(age2) (<class 'str'>, <class 'int'>) >>> name 'kimi' >>> age2 30 >>> name + age2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate str (not "int") to str #錯誤提示數字 和 字符 不能拼接
布爾類型很簡單,就兩個值 ,一個True(真),一個False(假), 主要用記邏輯判斷
如今有2個值 , a=3, b=5 , 我說a>b你說成立麼? 咱們固然知道不成立,但問題是計算機怎麼去描述這成不成立呢?或者說a< b是成立,計算機怎麼描述這是成立呢?
沒錯,答案就是,用布爾類型
>>> a=3 >>> b=5 >>> >>> a > b #不成立就是False,即假 False >>> >>> a < b #成立就是True, 即真 True
Python條件語句是經過一條或多條語句的執行結果(True或者False)來決定執行的代碼塊。
單分支
if 表達式1: 語句
雙分支
if 表達式1: 語句1 else: 語句2
多分支
if 表達式1: 語句 elif 表達式2: 語句 else: 語句
if嵌套
if 表達式1: 語句 if 表達式2: 語句 elif 表達式3: 語句 else: 語句 elif 表達式4: 語句 else: 語句
注意:
- 一、每一個條件後面要使用冒號 :,表示接下來是知足條件後要執行的語句塊。
- 二、使用縮進來劃分語句塊,相同縮進數的語句在一塊兒組成一個語句塊。
- 三、在Python中沒有switch – case語句。
#!/usr/bin/python # -*- coding:utf-8 -*- score = int(input("輸入分數:")) if score > 100: print("我擦,最高分才100...") elif score >= 90: print("A") elif score >= 80: print("B") elif score >= 60: print("C") elif score >= 40: print("D") else: print("太笨了...E") 執行結果: E:\Python19\venv\Scripts\python.exe E:/Python19/DAY01/t2.py 輸入分數:10 太笨了...E Process finished with exit code 0
這裏有個問題,就是當我輸入95的時候 ,它打印的結果是A,可是95 明明也大於第二個條件
elif score >=80:
呀, 爲何不打印B呢?這是由於代碼是從上到下依次判斷,只要知足一個,就不會再往下走啦,這一點必定要清楚呀!
while 判斷條件: 語句
一樣須要注意冒號和縮進。另外,在Python中沒有do..while循環。
使用while 來打印1-100:
********方法一******** count = 1 flag = True #標誌位 while flag: print(count) count = count + 1 if count > 100 : flag = False ********方法二******** count = 1 while count <= 100: print(count) count = count + 1
計算1-100的總和
count = 1 sum = 0 while count <= 100: sum = sum + count count = count + 1 print(sum)
若是在循環的過程當中,由於某些緣由,你不想繼續循環了,怎麼把它停止掉呢?這就用到break 或 continue 語句
- break用於徹底結束一個循環,跳出循環體執行循環後面的語句
- continue和break有點相似,區別在於continue只是終止本次循環,接着還執行後面的循環,break則徹底終止循環
例子:break
count = 0 while count <= 100 : #只要count<=100就不斷執行下面的代碼 print("loop ", count) if count == 5: break count +=1 #每執行一次,就把count+1,要否則就變成死循環啦,由於count一直是0 print("-----out of while loop ------") 執行結果: E:\Python19\venv\Scripts\python.exe E:/Python19/DAY01/t1.py loop 0 loop 1 loop 2 loop 3 loop 4 loop 5 -----out of while loop ------ Process finished with exit code 0
例子:continue
count = 0 while count <= 100 : count += 1 if count > 5 and count < 95: #只要count在6-94之間,就不走下面的print語句,直接進入下一次loop continue print("loop ", count) print("-----out of while loop ------") 執行結果: E:\Python19\venv\Scripts\python.exe E:/Python19/DAY01/t1.py loop 1 loop 2 loop 3 loop 4 loop 5 loop 95 loop 96 loop 97 loop 98 loop 99 loop 100 loop 101 -----out of while loop ------ Process finished with exit code 0
在Python當中還有一個while ... else...語句
while後面的else的做用:當while循環正常執行完畢,中間無
berak
終止的話,就會執行else後面的語句。
#!/usr/bin/python # -*- coding:utf-8 -*- count = 0 while count < 5: count += 1 print("Loop",count) else: print("The loop is over.") print("------while loop is exitd------") 執行結果: Loop 1 Loop 2 Loop 3 Loop 4 Loop 5 The loop is over. ------while loop is exitd------
從上面能夠看到,循環過程當中沒有break,會自動去執行else後面的語句。當執行過程被
break
終止了,就不會再去執行else後面的語句,以下:
#!/usr/bin/python # -*- coding:utf-8 -*- count = 0 while count < 5: count += 1 if count == 3:break print("Loop",count) else: print("The loop is over.") print("------while loop is exitd------") 執行結果: Loop 1 Loop 2 ------while loop is exitd------
一、使用while循環輸入 1 2 3 4 5 6 8 9 10
count = 0 while count < 10: count = count + 1 if count == 7: print(' ') else: print(count)
二、求1-100的全部數的和
count = 1 sum = 0 while count <= 100: sum = sum +count count = count + 1 print(sum)
三、輸出 1-100 內的全部奇數
#方法一: count = 1 while count < 101: print(count) count += 2 #方法二: count = 1 while count <= 100: num = count % 2 if num != 0: print(count) count = count + 1
四、輸出 1-100 內的全部偶數
count = 1 while count <= 100: num = count % 2 if num == 0: print(count) count = count + 1
五、求1-2+3-4+5 ... 99的全部數的和
sum = 0 count = 1 while count < 100: if count % 2 == 0: sum -= count else: sum += count count += 1 print(sum)
六、用戶登錄(三次機會重試)
i = 0 while i < 3: username = input('Please input your username:') password = input('Please input your password:') if username == 'kimi' and password == '123123': print('Login sucess!!') else: print('Login Failed,Please retry again!') i += 1
現有一需求,問用戶的姓名、年齡、工做、愛好,須要按如下格式打印我的信息
------------ info of Kimi Li ----------- Name : Kimi Li Age : 26 job : sales Hobbie: football ------------- end -----------------
若是使用字符拼接的方式,仍是相對來講比較難實現這樣的格式化輸出的。爲此Python當中有一種格式化輸出的方法。
只須要把打印的格式準備好,並使用佔位符(% s d),再將字符串的佔位符和外部的變量進行映射便可。以下:
#!/usr/bin/python # -*- coding:utf-8 -*- name = input("Please input your name:") age = input("Please input your age:") job = input("Please input your job:") hobbie = input("Please input your hobbie:") info = ''' ---------- info of %s ---------- #這裏的每一個%s就是一個佔位符,本行的表明 後面拓號裏的 name Name : %s #表明 name Age : %s #表明 age Job : %s #表明 job Hobbie : %s #表明 hobbie ------------ end --------------- ''' %(name,name,age,job,hobbie) # 這行的 % 號就是 把前面的字符串 與括號 後面的 變量 關聯起來 print(info) 執行結果: E:\Python19\venv\Scripts\python.exe E:/Python19/DAY01/format.py Please input your name:Kimi Please input your age:26 Please input your job:sales Please input your hobbie:football ---------- info of Kimi ---------- Name : Kimi Age : 26 Job : sales Hobbie : football ------------ end --------------- Process finished with exit code 0
%s就是表明字符串佔位符,除此以外,還有%d,是數字佔位符, 若是把上面的age後面的換成%d,就表明你必須只能輸入數字啦
#!/usr/bin/python # -*- coding:utf-8 -*- name = input("Please input your name:") age = input("Please input your age:") job = input("Please input your job:") hobbie = input("Please input your hobbie:") info = ''' ---------- info of %s ---------- Name : %s Age : %d #換成%d的數字佔位符,該變量必須是一個數字,不然會報錯 Job : %s Hobbie : %s ------------ end --------------- ''' %(name,name,age,job,hobbie) print(info)
當咱們輸入age的值是一個字符串或者是數字時,會報如下錯誤:
Traceback (most recent call last):
File "E:/Python19/DAY01/format.py", line 16, in <module>
''' %(name,name,age,job,hobbie)
TypeError: %d format: a number is required, not str
這是爲何的???要知道的是input接收的全部輸入默認都是字符串格式!!此時就須要進行類型轉換。
age = int(input("Please input your age:")) #使用int對age的輸入值,str轉換成init類型
如今有這樣的一行代碼:
msg = "我是%s,年齡%d,目前學習進度爲50%" %('Kimi',26) print(msg) 執行結果: Traceback (most recent call last): File "E:/Python19/DAY01/format.py", line 19, in <module> msg = "我是%s,年齡%d,目前學習進度爲50%"%('Kimi',26) ValueError: incomplete format
由於在格式化輸出裏,出現%默認爲就是佔位符的%,可是想在上面一條語句中最後的80%就是表示80%而不是佔位符,怎麼辦?
msg = "我是%s,年齡%d,目前學習進度爲50%%" %('Kimi',26) print(msg)
這樣就能夠了,第一個%是對第二個%的轉義,告訴Python解釋器這只是一個單純的%,而不是佔位符。
電腦的傳輸,還有儲存的實際上都是0101010101。咱們在硬盤上看到的多少GB甚至TB的存儲量,實際在計算機中的具體表示都爲二進制。
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號。
從上面的編碼表格上知道,在編碼的最左邊一位所有都是0。最初設計者使用7位的二進制已經足夠表示全部的英文、特殊字符等,然而設計者爲了拓展,因而預留出1位的。因而就有2**8=256種方式對英文進行表示。那對於編碼的單位有如下的規則:
8位(bit)表示1個字節(byte)
1024字節 = 1kb
1024kb = 1MB
1024MB = 1GB
1024GB = 1TB
因爲計算機的發展,最初美國設計的ascii碼沒法知足世界的通用。好比ascii碼沒法知足對中文的編碼。爲了解決這個全球化的文字問題,建立了 一個萬國碼--unicode。
咱們知道1個字節,能夠表示全部的英文和特殊字符以及數字等等。那麼1箇中文須要多少個字節來表示中文呢?最初開始使用2個字節表示1箇中文,可是遠遠不夠。因而unicode編碼一箇中文使用32位來表示,那麼一共會有2**32=4294967296。這樣就顯得太過於浪費,針對這種的現象,因而對unicode進行升級。則出現了utf-8的編碼方式:一箇中文用3個字節去表示,即:2**24=16777216,這樣就能夠包含了全部的語言表示。
還有一種編碼方式是GBK,是屬於國內自創的一種編碼方式,僅供國內使用。一箇中文用2個字節表示。可是沒法包含全部的中文。
Python語言支持如下類型的運算符:
- 算術運算符
- 比較(關係)運算符
- 賦值運算符
- 邏輯運算符
- 位運算符
- 成員運算符
- 身份運算符
- 運算符優先級
如下假設變量a爲10,變量b爲21:
如下假設變量a爲10,變量b爲20:
賦值運算符
如下假設變量a爲10,變量b爲20:
如下假設變量 a 爲 10, b爲 20:
針對邏輯運算符,須要有如下的瞭解:
- 一、在沒有()的狀況下,not優先級高於and,and優先級高於or,即優先級關係爲:()> not > and > or,同一優先級從左往右計算。以下例題:
#!/usr/bin/python # -*- coding:utf-8 -*- print(3>4 or 4<3 and 1==1) #False print(1 < 2 and 3 < 4 or 1>2) #True print(2 > 1 and 3 < 4 or 4 > 5 and 2 < 1) #True print(1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8) #False print(1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) #False print(not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6) #False print(not 2 < 1) #True
二、x or y , x爲真,值就是x,x爲假,值是y;
x and y, x爲真,值是y,x爲假,值是x。
'''x or y x爲True,則返回x; x 爲False,則返回Y''' print(1 or 2) # x爲非0,爲True,返回1 print(3 or 2) # x爲非0,爲True,返回3 print(0 or 2) # x爲0,爲False,返回2 print(0 or 100) # x爲0,爲False,返回100 print(2 or 100 or 3 or 4) # 從左往右,一次計算,返回2 '''x and y x爲True,則返回y;x爲False,則返回x''' print(1 and 2) # x爲非0,返回2 print(0 and 2) # x爲0,返回0 print(2 or 1 < 3) #先比較1< 3爲False,即爲0;2 or 0 返回2 ***********or 和 and 混合*********** print(3 > 1 or 2 and 2) #優先級計算and,爲2;1 or 2 ,返回1;3 > 1,返回True
除了以上的一些運算符以外,Python還支持成員運算符,測試實例中包含了一系列的成員,包括字符串,列表或元組。
#!/usr/bin/python # -*- coding:utf-8 -*- a = 10 b = 20 list = [1, 2, 3, 4, 5 ]; if ( a in list ): print ("1 - 變量 a 在給定的列表中 list 中") else: print ("1 - 變量 a 不在給定的列表中 list 中") if ( b not in list ): print ("2 - 變量 b 不在給定的列表中 list 中") else: print ("2 - 變量 b 在給定的列表中 list 中") # 修改變量 a 的值 a = 2 if ( a in list ): print ("3 - 變量 a 在給定的列表中 list 中") else: print ("3 - 變量 a 不在給定的列表中 list 中") 執行結果: E:\Python19\venv\Scripts\python.exe E:/Python19/DAY01/邏輯運算符.py 1 - 變量 a 不在給定的列表中 list 中 2 - 變量 b 不在給定的列表中 list 中 3 - 變量 a 在給定的列表中 list 中
Python中經常使用的數據類型有不少種,以下:
類型 | 用途 |
---|---|
int | 整型,數字,主要用於運算,如1,2,3 |
bool | 布爾型,用於判斷真假,True 和 False |
str | 字符串,簡單少許的存儲數據,並進行相應的操做。name = 'kimi' |
list | 列表,大量有序數據存儲,好比[1,2,3,'123',[4,5,6],'tiger'] |
tuple | 元祖,至關於一個只讀列表,沒法更改,好比(1,2,3,'第三方') |
dict | 字典,大量有關聯性比較強的數據,好比{'name':'kimi','age':'20'} |
set | 集合,工做中幾乎用不到。{1,2,3,'abc'},面試可能用到 |
整型是常見的數據類型,主要有用於計算,因此針對數字可使用的方法除了運算之外,並無什麼經常使用的方法,python中提供了一種方法,用於快速計算證書在內存中佔用的二進制碼的長度:bit_length()
#!/usr/bin/python # -*- coding:utf-8 -*- num = 10 print(num.bit_length()) #運行結果:4
布爾值就兩種:True和False,反應條件的正確與否。再看看int str bool三者數據類型的轉換
# int --> bool i = 10 print(bool(i)) #True,非0便是True a = 0 print(bool(a)) #False,0便是False #bool --> int t = True print(int(t)) # 1 True--> 1 t = False print(int(t)) #0 False --> 0 #int --> str i = 100 print(str(i)) #'100' #str --> bool s1 = '中國' s2 = '' print(bool(s1)) #True,非空就是True print(bool(s2)) #False #bool --> str t = True print(str(t)) #'True'
Python中凡是用引號引發來的數據能夠稱爲字符串類型,組成字符串的每一個元素稱之爲字符,將這些字符一個一個鏈接起來,而後在用引號起來就是字符串。
組成字符串的字符從左至右,依次排列,他們都是有順序的。索引即下標,就是字符串組成的元素從第一個開始,初始索引爲0以此類推。看下面的例子:
a = 'ABCDEFGHIJKLMN' print(a[0]) #A print(a[1]) #B print(a[4]) #E print(a[7]) #H
切片就是經過索引(索引:索引:步長)截取字符串的一段,造成新的字符串(原則就是顧頭不顧尾),以下:
a = 'ABCDEFGHIJKLMN' print(a[0:3]) #ABC print(a[2:5]) #CDE print(a[:]) #ABCDEFGHIJKLMN,默認到切片從頭至尾 print(a[:-1]) #ABCDEFGHIJKLM,-1 是列表中最後一個元素的索引,可是要知足顧頭不顧尾的原則,因此取不到K元素 print(a[:5:2]) #ACE,從0到5,加步長爲2, print(a[-1:-5:-2]) #NL,反向加步長
方法 | 描述 |
---|---|
capitalize() | 將字符串的第一個字符轉換爲大寫 |
upper() | 轉換字符串中的小寫字母爲大寫 |
lower() | 轉換字符串中全部大寫字符爲小寫 |
swapcase() | 將字符串中大寫轉換爲小寫,小寫轉換爲大寫 |
center(width, fillchar) | 返回一個指定的寬度 width 居中的字符串,fillchar 爲填充的字符,默認爲空格。 |
expandtabs() | 把字符串 string 中的 tab 符號轉爲空格,tab 符號默認的空格數是 8 。 |
len() | 返回字符串長度 |
startswith() | 檢查字符串是不是以指定子字符串 substr 開頭,是則返回 True,不然返回 False。若是beg 和 end 指定值,則在指定範圍內檢查。 |
endswith() | 檢查字符串是否以 某個字符 結束,若是是,返回 True,不然返回 False. |
find() | 檢測 str 是否包含在字符串中,若是包含返回開始的索引值,不然返回-1 |
index() | 跟find()方法同樣,只不過若是str不在字符串中會報一個異常 |
strip() | 在字符串上執行 lstrip()和 rstrip() |
rstrip() | 刪除字符串字符串末尾的空格 |
lstrip() | 截掉字符串左邊的空格或指定字符 |
count() | 返回 str 在 string 裏面出現的次數 |
split() | 以 str 爲分隔符截取字符串,若是 num 有指定值,則僅截取 num+1 個子字符串 |
format() | 格式化字符串 |
replace() | 把 將字符串中的 str1 替換成 str2,若是 max 指定,則替換不超過 max 次。 |
title() | 返回"標題化"的字符串,就是說全部單詞都是以大寫開始,其他字母均爲小寫 |
實踐出真知:
####大小寫轉換 s = 'i am come from China' print(s.capitalize()) #I am come from china 字符串第一個字符轉換成大寫 print(s.upper()) #I AM COME FROM CHINA 字符串全部小寫字母轉換成大寫 print(s.lower()) #i am come from china 字符串全部的大寫字母換成小寫 #大小寫轉換,能夠用在驗證碼階段,如: s_str = 'aEbF' code_input = input('請輸入驗證碼,不區分大小寫:') if s_str.upper() == code_input.upper(): print('驗證碼經過') else: print('請從新輸入') ####一次大小寫轉換 print(s.swapcase()) #I AM COME FROM cHINA 字符串中大寫變小寫,小寫變大寫 ####特殊字符相隔後首字母大寫 s = 'alex*egon-wusir' #特殊字符隔開後的單詞首字母大寫 print(s.title()) #Alex*Egon-Wusir ####字符居中,填充,主要用於表格製做 s = 'ChinaStyle' #將s的字符以20個字符居中,不夠20用$進行填充,默認是空格填充 print(s.center(20,'$')) #$$$$$ChinaStyle$$$$$ s = 'China*&Style_Bei6Jing_TianAnMen' print(s.title()) #China*&Style_Bei6Jing_Tiananmen ####統計字符串長度 print(len(s)) #31 計算字符長度 ####判斷以什麼開頭和結尾 print(s.startswith('C')) #True,判斷s字符串是否以C開頭,爲真返回True,不然返回False print(s.endswith('N')) #False,判斷s字符串是否以N結尾 print(s.endswith('*',1,6)) #True,也能夠指定切片長度進行判斷 ####經過元素找索引,find找不到返回-1,index找不到直接報錯 print(s.find('S')) #查看字符串中的S,返回索引值爲7,若是找不到該字符,會返回-1 print(s.find('K')) #-1,一樣還能夠經過index進行查找,可是index在找不到狀況下會報錯 print(s.index('S')) #7 print(s.index('K')) #ValueError: substring not found ####刪除空格或指定字符 s = ' %%cHina_Style &Bei Jing ' print(s.strip()) #%%cHina_Style &Bei Jing ,默認刪除字符串兩邊的空格 s = '%%cHina_Style &Bei Jing &' print(s.strip('%')) #cHina_Style &Bei Jing &,也能夠指定刪除字符 print(s.rstrip('&')) #%%cHina_Style &Bei Jing print(s.lstrip('%')) #cHina_Style &Bei Jing & #應用在輸入用戶名或驗證碼時,錯誤輸入多個空格的狀況,以下 username = input('請輸入名字:').strip() if username == "kimi": print("welcome kimi!") 執行結果: 請輸入名字:kimi #輸入時增長空格 welcome kimi! ####字符串統計 s = 'China*&Style_Bei6Jing_TianAnMen' print(s.count('an')) #1,統計字符串出現的次數 ####字符串切割,能夠指定切割符號 print(s.split('_')) #['China*&Style', 'Bei6Jing', 'TianAnMen'],切割字符串,指定切割符號爲_,切割 後會生成一個列表 ####字符串format的三種格式化輸出,比%s和%d好用 s = '個人名字是{},今年{}歲,來自{}'.format('kimi',20,'廣東') print(s) #個人名字是kimi,今年20歲,來自廣東 s = '個人名字是{0},今年{1}歲,來自{2}'.format('kimi',20,'廣東') print(s) #個人名字是kimi,今年20歲,來自廣東 s = '個人名字是{name},今年{age}歲,來自{city}'.format(name='kimi',age=20,city='廣東') print(s) #個人名字是kimi,今年20歲,來自廣東 ####replace替換字符 s = '咱們都是祖國的花朵,花朵開得正旺盛!' print(s.replace('花朵','huaduo')) #默認會把字符中的花朵所有替換成huaduo print(s.replace('花朵','huaduo',1)) #僅替換一個花朵 ####is系列,判斷字符串的組成,可用在用戶輸入判斷 s = 'I want to go buy something for 123' print(s.isdigit()) #False,判斷s是否只由數字組成 s1 = 'tian123' print(s1.isalnum()) #True,判斷字符串由字母或數字組成 print(s1.isalpha()) #False,字符串只由字母組成 print(s1.isdecimal()) #False,字符串只由十進制組成
練習題:content = input('請輸入內容') 如 5+9進行計算
content = input('請輸入:').strip() index = content.find('+') a = int(content[0:index]) b = int(content[index+1:]) print(a + b)
咱們如今已經學過的數據類型有:數字,布爾值,字符串,你們都知道數字主要用於計算,bool值主要是條件判斷,只有字符串能夠用於數據的存儲,這些數據類型夠用麼?對於一門語言來講,確定是不夠用的。就說字符串:
(1)字符串只能存儲少許的數據,對於大量的數據用字符串操做不方便也不易存儲。
(2)字符串存儲的數據類型太單一,只能是字符串類型。
例如:‘1 True alex’ 像這樣的字符串,我若是經過切片或者其餘方法將1 True alex 取出來,他也只能是字符串,可是我想要獲得數字的1,布爾值的True,必須還要轉化,是否是很麻煩。
因此python給我們也提供了一類數據類型,他能承載多種數據類型,這類數據類型被稱做容器類數據類型能夠存儲大量的數據。列表就屬於容器類的數據類型。
這個數據類型就是list列表。
列表是python的基礎數據類型之一 ,其餘編程語言也有相似的數據類型.好比JS中的數 組, java中的數組等等. 它是以[ ]括起來, 每一個元素用' , '隔開並且能夠存放各類數據類型: 列表是python中的基礎數據類型之一,其餘語言中也有相似於列表的數據類
型,好比js中叫數組,他是以[]括起來,每一個元素以逗號隔開,並且他裏面能夠存放各類數據類型好比:
li = [‘alex’,123,Ture,(1,2,3,’wusir’),[1,2,3,’小明’,],{‘name’:’alex’}]
列表相比於字符串,不只能夠儲存不一樣的數據類型,並且能夠儲存大量數據,32位python的限制是 536870912 個元素,64位python的限制是 1152921504606846975 個元素。並且列表是有序的,有索引值,可切片,方便取值。
# 建立一個列表有三種方式: # 方式一:(經常使用) l1 = [1, 2, 'kimi'] # 方式二:(不經常使用) l1 = list() # 空列表 # l1 = list(iterable) # 可迭代對象 l1 = list('123') print(l1) # ['1', '2', '3'] # 方式三:列表推導式 l1 = [i for i in range(1,5)] print(l1) # [1, 2, 3, 4]
以該列表爲主進行操做:li = ['kimi','AD','China']
列表使用 | 方法 | 舉例 | 結果 | 描述 |
---|---|---|---|---|
增長 | append | li.append('HongKong') | ['kimi', 'AD', 'China', 'HongKong'] | 在列表末尾添加新的元素 |
插入 | insert | li.insert(1,'g') | ['kimi', 'g', 'AD', 'China'] | 將對象插入列表,須要指定在哪一個元素前進行插入,經過索引值進行標識 |
迭代 | extend | li.extend([1,2,3]) | ['kimi', 'AD', 'China', 1, 2, 3] | 在列表末尾一次性追加另外一個序列中的多個值(用新列表擴展原來的列表) |
元素刪除 | pop | li.pop() li.pop(1) | ['kimi', 'AD'] ['kimi', 'China'] | 移除列表中的一個元素(默認最後一個元素),而且返回該元素的值 |
remove | li.remove('China') | ['kimi', 'AD'] | 移除列表中某個值的第一個匹配項 | |
清空 | clear | li.clear() | [] | 清空列表 |
列表刪除 | del | del(li) | name 'li' is not defined | 刪除列表,刪除列表後進行打印就會報錯 |
列表複製 | copy | l2 = li.copy() print(l2) | ['kimi', 'AD', 'China'] | 複製列表 |
更改 | 按索引 | li[2] = 'KK' | ['kimi', 'AD', 'KK'] | 根據索引進行修改元素 |
切片修改 | li[0:1] = [1,2,3] | [1, 2, 3, 'AD', 'China'] | 根據切片進行修改,這裏修改第一元素,更改的元素會進行拆分填充 | |
查詢 | 索引查詢 | print(li[0]) | kimi | 根據元素索引查詢 |
切片查詢 | print(li[0:2]) | ['kimi', 'AD'] | 切片查詢 | |
查詢每一個元素 | for i in li: print(i) | kimi AD China |
經過for循環進行迭代查詢 | |
統計 | len | print(len(li)) | 3 | 統計列表元素個數 |
計數 | count | print(li.count('AD')) | 1 | 統計某個元素在列表中出現的次數 |
索引值 | index | print(li.index('kimi')) | 0 | 從列表中找出某個值第一個匹配項的索引位置,並返回索引值 |
排序 | sort | li = [19,3,4,21,5,6] li.sort() print(li) | [3, 4, 5, 6, 19, 21] | 對原列表進行排序 |
倒序 | sort(revers=True) | li = [19,3,4,21,5,6] li.sort(reverse=True) print(li) | [21, 19, 6, 5, 4, 3] | 對原列表排序後倒序 |
反轉 | reverse | li = [19,3,4,21,5,6] li.reverse() print(li) | [6, 5, 21, 4, 3, 19] | 反轉列表中元素 |