Python學習之路(一)之Python基礎1

Python基礎初識

一、Python介紹

1.一、Python簡介

Python是著名的「龜叔」Guido van Rossum在1989年聖誕節期間,爲了打發無聊的聖誕節而編寫的一個編程語言,Python官方網站 。python

Python是一種計算機程序設計語言。你可能已經據說過不少種流行的編程語言,好比很是難學的C語言,很是流行的Java語言,適合初學者的Basic語言,適合網頁編程的JavaScript語言等等。c++

Python 是一個高層次的結合瞭解釋性、編譯性、互動性和麪向對象的腳本語言。git

  • 解釋型語言:這意味着開發過程當中沒有編譯環節,相似於PHP和Perl語言。
  • 交互式語言:這意味着能夠在一個Python提示符直接互動執行你寫的程序。
  • 面嚮對象語言:這意味着Python支持面向對象的風格或代碼封裝在對象的編程技術。

1.二、Python特色

  • 易於學習:Python有相對較少的關鍵字,結構簡單,和一個明肯定義的語法,學習起來更加簡單。
  • 易於閱讀:Python代碼定義的更清晰。
  • 易於維護:Python的成功在於它的源代碼是至關容易維護的。
  • 豐富的標準庫:Python的最大的優點之一是豐富的庫,跨平臺的,在UNIX,Windows和Macintosh兼容很好。
  • 互動模式:互動模式的支持,您能夠從終端輸入執行代碼並得到結果的語言,互動的測試和調試代碼片段。
  • 可移植:基於其開放源代碼的特性,Python已經被移植(也就是使其工做)到許多平臺。
  • 可擴展:若是你須要一段運行很快的關鍵代碼,或者是想要編寫一些不肯開放的算法,你可使用C或C++完成那部分程序,而後從你的Python程序中調用。
  • 數據庫:Python提供全部主要的商業數據庫的接口。
  • GUI編程:Python支持GUI能夠建立和移植到許多系統調用。
  • 可嵌入: 你能夠將Python嵌入到C/C++程序,讓你的程序的用戶得到"腳本化"的能力。

1.三、Python應用領域

  • 雲計算: 雲計算最火的語言, 典型應用OpenStack
  • WEB開發: 衆多優秀的WEB框架,衆多大型網站均爲Python開發,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
  • 科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
  • 系統運維: 運維人員必備語言
  • 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,並且重要性逐年提升。緣由:做爲動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤爲擅長策略回測
  • 圖形GUI: PyQT, WxPython,TkInter

1.四、Python解釋器的種類

​ 當咱們編寫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

二、Python基礎初識

2.一、運行python代碼

在桌面下建立一個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

2.二、變量

變量:把程序運行的中間結果臨時的存在內存裏,以便後續的代碼調用。

聲明變量:

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

2.三、常量

常量即指不變的量,如π 3.141592653..., 或在程序運行過程當中不會改變的量

2.四、註釋

當行註釋:# 被註釋內容

多行註釋:'''被註釋內容''',或者 """被註釋內容"""

2.五、用戶交互

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

2.六、基礎數據類型瞭解

什麼是數據類型?

​ 咱們人類能夠很容易的分清數字與字符的區別,可是計算機並不能呀,計算機雖然很強大,但從某種角度上看又很傻,除非你明確的告訴它,1是數字,「漢」是文字,不然它是分不清1和‘漢’的區別的,所以,在每一個編程語言裏都會有一個叫數據類型的東東,其實就是對經常使用的各類數據類型進行了明確的劃分,你想讓計算機進行數值運算,你就傳數字給它,你想讓他處理文字,就傳字符串類型給他。Python中經常使用的數據類型有多種,今天咱們暫只講3種, 數字、字符串、布爾類型

2.6.一、整數類型(int)

  • 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'>

2.6.二、字符串類型(str)

在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  #錯誤提示數字 和 字符 不能拼接

2.6.三、布爾值(True、False)

布爾類型很簡單,就兩個值 ,一個True(真),一個False(假), 主要用記邏輯判斷

如今有2個值 , a=3, b=5 , 我說a>b你說成立麼? 咱們固然知道不成立,但問題是計算機怎麼去描述這成不成立呢?或者說a< b是成立,計算機怎麼描述這是成立呢?

沒錯,答案就是,用布爾類型

>>> a=3
>>> b=5
>>> 
>>> a > b #不成立就是False,即假
False
>>> 
>>> a < b #成立就是True, 即真
True

2.七、流程控制語句if

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呢?這是由於代碼是從上到下依次判斷,只要知足一個,就不會再往下走啦,這一點必定要清楚呀!

2.八、循環語句while

2.8.一、語法

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)

2.8.二、終止循環語句

若是在循環的過程當中,由於某些緣由,你不想繼續循環了,怎麼把它停止掉呢?這就用到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

2.8.三、while...else

在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------

2.九、練習題

一、使用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

2.十、格式化輸出

現有一需求,問用戶的姓名、年齡、工做、愛好,須要按如下格式打印我的信息

------------ 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解釋器這只是一個單純的%,而不是佔位符。

2.十一、編碼

電腦的傳輸,還有儲存的實際上都是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個字節表示。可是沒法包含全部的中文。

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 中

2.1三、數據類型

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'},面試可能用到

2.13.一、int(整型)

整型是常見的數據類型,主要有用於計算,因此針對數字可使用的方法除了運算之外,並無什麼經常使用的方法,python中提供了一種方法,用於快速計算證書在內存中佔用的二進制碼的長度:bit_length()

#!/usr/bin/python
# -*- coding:utf-8 -*-

num = 10
print(num.bit_length())

#運行結果:4

2.13.二、bool(布爾型)

布爾值就兩種: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'

2.13.三、str(字符串)

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,字符串只由十進制組成

1557382517297

練習題:content = input('請輸入內容') 如 5+9進行計算

content = input('請輸入:').strip()
index = content.find('+')
a = int(content[0:index])
b = int(content[index+1:])
print(a + b)

2.13.四、list(列表)

咱們如今已經學過的數據類型有:數字,布爾值,字符串,你們都知道數字主要用於計算,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] 反轉列表中元素
相關文章
相關標籤/搜索